Function Compute を使用して、Alibaba Cloud CDN のオフラインログを自動的かつ定期的に Object Storage Service (OSS) にアーカイブし、長期保存と分析に活用します。
背景情報
Alibaba Cloud CDN は、高速化ドメイン名の詳細なアクセスログを提供します。これらのオフラインログは、ユーザー行動分析、サービストラブルシューティング、運用データ統計に不可欠です。Alibaba Cloud CDN は、オフラインログファイルをサーバー上に 30 日間のみ保持し、その後自動的に削除します。
データコンプライアンス、長期監査、または履歴データ分析の要件を満たすために、これらのログを永続的に保存する必要がある場合があります。Object Storage Service (OSS) は、高可用性、コスト効率、耐久性に優れたストレージソリューションを提供するため、長期的なログのアーカイブに最適です。Function Compute は、Alibaba Cloud CDN がログを作成する際に生成されるイベントをリッスンし、関数を呼び出してオフラインログを Object Storage Service (OSS) にアーカイブします。このソリューションは、Alibaba Cloud CDN のログをご利用の OSS バケットにシームレスにアーカイブする自動化されたワークフローを作成します。
仕組み
この自動アーカイブソリューションは、Function Compute を「スケジューラ」および「データムーバー」として使用し、Alibaba Cloud CDN と Object Storage Service (OSS) を接続します。ワークフローは次のとおりです:
-
イベントトリガー:Alibaba Cloud CDN が新しいログファイルを生成するたびに、Function Compute のトリガーが起動します。
-
関数の実行:トリガーが起動すると、関連付けられた関数コードが自動的に実行されます。
-
ログの取得:関数コードは、現在の日付に基づいて前日のログファイル名を計算し、Alibaba Cloud CDN のオフラインログのダウンロード URL を生成します。その後、この URL にリクエストを送信して、ログファイルを Function Compute の一時環境にダウンロードします。
-
Object Storage Service (OSS) への転送:関数がログファイルのダウンロードに成功すると、OSS API を呼び出して、指定された OSS バケット内の指定されたディレクトリにファイルをアップロードします。
プロセス全体が完全に自動化されており、Alibaba Cloud CDN、Function Compute、および Object Storage Service (OSS) が緊密に統合され、クラウドサービス管理が効率化されます。
課金
このソリューションでは、次のプロダクトの料金が発生します:
-
Alibaba Cloud CDN:オフラインログの生成とダウンロードは無料です。
-
Function Compute:関数呼び出しの回数、消費リソース (vCPU とメモリ)、および実行時間に基づいて課金されます。1日に数回しか実行されない軽量なログアーカイブタスクの場合、コストは通常ごくわずかです。詳細については、Function Compute の課金の概要をご参照ください。
-
Object Storage Service (OSS):使用するストレージ容量、API リクエストの数、およびアウトバウンドインターネットトラフィックに基づいて課金されます。詳細については、Object Storage Service (OSS) の課金の概要をご参照ください。
前提条件
-
同じ Alibaba Cloud アカウントで Alibaba Cloud CDN、Function Compute、および Object Storage Service (OSS) を有効化していることを確認してください。これにより、サービス間のスムーズな権限付与とアクセスが保証されます。
-
ログファイルを保存するための Object Storage Service (OSS) バケットを作成します。詳細については、バケットの作成をご参照ください。バケット名、パブリックアクセスエンドポイント、およびログストレージディレクトリ名を記録しておきます。
操作手順
1. バケット詳細の取得
Function Compute の関数には、OSS バケットの詳細が必要です。次の手順に従って、バケット名、パブリックアクセスエンドポイント、およびログストレージディレクトリ名を取得します。
2. Function Compute の関数とトリガーの作成
Function Compute で、アーカイブを実行する関数と、それを開始するトリガーを作成します。
-
Function Compute コンソールにログインします。左側のナビゲーションウィンドウで、[関数] を選択します。
-
[関数] ページで、[関数の作成] をクリックし、[イベント関数] を選択してから、[イベント関数の作成] をクリックします。
-
イベント関数を作成する際に、次の主要なパラメーターを設定します:
-
[基本設定] - 関数名:この関数名は後続の操作で必要になります。
cdn-log-dumpを使用することを推奨します。 -
関数コード > ランタイム:この関数は Python で記述されているため、[公式ランタイム]、[Python]、次に [Python 3.10] を選択します。
-
[詳細設定] > 環境変数:OSS バケットの詳細を関数に渡すために、次の環境変数を作成します:
-
target_oss_bucket:バケット名 -
target_oss_endpoint:パブリックアクセス用のエンドポイント -
target_oss_prefix:ログファイルを保存するディレクトリの名前
例:target_oss_bucket を
demo-bucketに、target_oss_endpoint をoss-cn-hangzhou.aliyuncs.comに、target_oss_prefix をcdn_logに設定します。 -
-
-
パラメーターを設定した後、作成 をクリックします。
-
[関数詳細] で、[トリガー] タブをクリックし、[トリガーの作成] をクリックします。
-
トリガーの主要なパラメーターを次のように設定し、[OK] をクリックします。
-
[トリガータイプ]:[Alibaba Cloud CDN (同期呼び出し)] を選択します。
-
名前:トリガーの名前を入力します (推奨:
cdn-logs-triggers)。 -
[イベント名]:[LogFileCreated] を選択します。
-
ドメイン名:同じ Alibaba Cloud アカウント配下のアクティブな高速化ドメイン名を入力します。
-
説明:トリガーの説明を入力します。「CDN オフラインログファイル生成トリガー」の使用を推奨します。
-
[ロール]:[AliyunCDNEventNotificationRole] を選択します。
-
-
トリガーのパラメーターを設定した後、OK をクリックします。[CDN トリガーのデフォルトロールが作成されていません] というメッセージが表示された場合は、[今すぐ承認] をクリックし、画面の指示に従ってデフォルトロールを作成します。それ以外の場合、トリガーはすぐに作成されます。
-
[関数詳細] で、[コード] タブをクリックし、オンラインエディターに以下のコードを入力します。このコードは、Alibaba Cloud CDN からオフラインログを取得し、Object Storage Service (OSS) に保存します。
-
[コードのデプロイ] をクリックします。
3. カスタムロールとポリシーの作成
Function Compute の関数は、Object Storage Service (OSS) にアクセスするための権限が必要です。これらの権限は、カスタムロールを関数にアタッチすることで付与できます。必要なロールとポリシーを作成するには、次の手順に従います。
-
Resource Access Management (RAM) コンソールにログインします。左側のナビゲーションウィンドウで、[権限] > [ポリシー] を選択します。
-
[ポリシーの作成] をクリックし、[JSON] タブを選択します。
-
次のポリシーで、
BucketNameをご利用のバケット名に置き換え、3つのFC-NAMEをすべてステップ 2 の関数名 (推奨:cdn-log-dump) に置き換えます。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "oss:PutObject", "Resource": "acs:oss:*:*:BucketName/*" }, { "Effect": "Allow", "Action": "fc:InvokeFunction", "Resource": [ "acs:fc:*:*:services/FC-NAME/functions/FC-NAME", "acs:fc:*:*:services/FC-NAME.*/functions/*" ] } ] } -
OK をクリックし、[ポリシー名] と 備考 を入力します。その後、もう一度 OK をクリックしてポリシーを作成します (ポリシー名には
AliyunCDNLogDumpAccess、説明には「CDN オフラインログダンプを管理する権限」を設定することを推奨します)。 -
左側のナビゲーションウィンドウで、[ID] > [ロール] を選択し、[ロールの作成] をクリックします。
-
[信頼できるエンティティの選択] で [Alibaba Cloud サービス] を選択します。[信頼できるサービス] で [Function Compute] を選択し、OK をクリックします。
-
[ロールの作成] ダイアログボックスで、[ロール名] を入力し (推奨:
AliyunCDNLogDumpRole)、OK をクリックしてロールを作成します。 -
[権限] タブで、[正確な権限付与] をクリックします。[ポリシータイプ] で カスタムポリシー を選択し、[ポリシー名] にステップ 4 で作成したポリシーの名前 (推奨:
AliyunCDNLogDumpAccess) を入力します。その後、OK をクリックします。 -
[信頼ポリシー] タブで、[信頼ポリシーの編集] をクリックします。[JSON] エディターに次の信頼ポリシーを入力し、OK をクリックします。
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "fc.aliyuncs.com" ] } } ], "Version": "1" }
4. 関数へのロールのアタッチ
-
Function Compute コンソールの [関数] タブで、ステップ 2 で作成した関数を選択し、設定 をクリックします。
-
関数詳細ページで、設定 タブをクリックします。高度設定 セクションで、設定 をクリックします。
-
[詳細設定] で、[権限] - [関数ロール] オプションを見つけ、ステップ 3 で作成したロールを選択します。
AliyunCDNLogDumpRoleの使用を推奨します。その後、[デプロイ] をクリックして、ロールを Function Compute タスクにバインドします。
5. 関数のテスト (任意)
これで設定は完了です。Alibaba Cloud CDN はオフラインログを約 24 時間の遅延で生成するため、設定が機能するかどうかをすぐに確認することはできません。すぐに関数をテストするには、次の任意の手順に従います。
-
Function Compute コンソールの [関数] タブで、ステップ 2 で作成した関数を選択し、設定 をクリックします。
-
関数詳細ページで、テスト タブをクリックします。[テストイベント] で、[新しいテストイベントの作成] を選択します。[イベントテンプレート] で、[CDN (LogFileCreated)] を選択します。[イベント名] に [Test_cdn_log_dump] と入力します。
JSON エディターには、CDN の LogFileCreated イベントテンプレートが自動的に入力されます。これには、
eventName、eventSource、region、eventTime、traceId、userIdentity(aliUid)、resource(例:ドメインは example.com)、およびeventParameterなどのフィールドが含まれます。 -
以下で取得したパラメーターを使用して、イベントテンプレートの
filePathパラメーターを変更します。 -
[関数のテスト] をクリックします。実行が完了すると、返される結果は
nullで、実行ステータスは成功になります。 -
Object Storage Service (OSS) コンソールで、Alibaba Cloud CDN ログの保存に使用するバケットを選択します。
-
[ファイル] をクリックし、Alibaba Cloud CDN ログを保存するように設定したディレクトリに移動します。高速化ドメイン名にちなんで名付けられたフォルダが表示されます。その中には、日付にちなんで名付けられたサブフォルダに、アーカイブされたログファイルが含まれています。これにより、Function Compute タスクが正常に実行されたことが確認できます。