Alibaba Cloud Function Compute を使用して、Content Delivery Network (CDN) からのオフラインログを Object Storage Service (OSS) に自動的かつ定期的に保存します。これにより、長期的なログのアーカイブと分析が可能になります。
背景情報
Content Delivery Network (CDN) は、高速化ドメイン名の詳細なアクセスログを提供します。これらのオフラインログは、ユーザーの動作分析、サービスのトラブルシューティング、および運用データの分析に重要です。CDN サービスポリシーによると、オフラインログファイルは CDN サーバーに 30 日間のみ保持され、この期間を過ぎると自動的に削除されます。
データコンプライアンス、長期監査、または既存データ分析の要件を満たすために、これらのログを永続的に保存する必要がある場合があります。Object Storage Service (OSS) は、高可用性、低コスト、かつ耐久性のあるストレージソリューションを提供し、長期的なログアーカイブに理想的な選択肢です。Function Compute (FC) は、CDN ログを生成するイベントをリッスンし、タスク関数を呼び出して CDN からのオフラインログを OSS に保存します。このソリューションを使用すると、CDN ログを OSS バケットにシームレスに保存するための自動化されたワークフローを構築できます。
実行ロジック
この自動化ストレージソリューションの中核は、FC をスケジューラおよびエグゼキュータとして使用して CDN と OSS を接続することです。ワークフローは次のとおりです:
イベントトリガー: Function Compute でトリガーが構成されます。トリガーは、CDN がログを生成するたびにアクティブ化されます。
関数実行: イベントトリガーがアクティブ化されると、関連付けられた関数コードが自動的に実行されます。
ログのプル: 関数コードは、現在の日付に基づいて前日のログファイル名を計算し、CDN オフラインログのダウンロード URL を生成します。その後、関数はこの URL にリクエストを送信して、ログファイルを FC の一時環境にダウンロードします。
Object Storage Service (OSS) への保存: 関数がログファイルのダウンロードに成功すると、OSS API を呼び出して、指定された OSS バケット内の指定されたディレクトリにファイルをアップロードします。
プロセス全体は完全に自動化されており、CDN、FC、OSS の 3 つの Alibaba Cloud サービスを統合しています。これにより、クラウドサービス管理の効率が向上します。
課金の説明
このソリューションでは、以下のプロダクトの課金が発生します。
Content Delivery Network (CDN): オフラインログを生成してダウンロードを提供する機能は無料です。
Function Compute: FC は、関数実行回数、消費リソース (vCPU とメモリ)、および実行時間に基づいて課金されます。1 日に数回しか実行されない軽量なログストレージタスクの場合、コストは通常非常に低くなります。詳細については、「Function Compute の課金の概要」をご参照ください。
Object Storage Service (OSS): OSS は、使用するストレージ容量、API リクエスト数、およびインターネット経由のアウトバウンドトラフィックに基づいて課金されます。詳細については、「Object Storage Service (OSS) の課金の概要」をご参照ください。
前提条件
CDN、FC、および OSS が同じ Alibaba Cloud アカウントでアクティブ化されていることを確認し、サービスの権限付与とシームレスなアクセスを確保してください。
「バケットの作成」の手順に従って、OSS にログファイルを保存するためのバケットを作成します。バケット名、インターネットアクセスのエンドポイント値、およびログファイルが保存されるディレクトリの名前を記録してください。
構成ステップ
1. バケット構成を取得する
FC でタスク関数を作成する際には、ログストレージ用の OSS 情報を提供する必要があります。したがって、まずログファイルを保存するためのバケット名、インターネットアクセスのエンドポイント値、およびディレクトリの名前を取得する必要があります。この情報を取得するには、次の手順に従ってください:
2. Function Compute タスクを作成する
この自動化ストレージソリューションの中核は、FC をスケジューラおよびエグゼキュータとして使用することです。したがって、FC で対応するトリガーとタスク関数を構成する必要があります。
Function Compute 3.0 コンソールに移動します。左側のナビゲーションウィンドウで、[関数] を選択します。
[関数] タブで、[関数の作成] をクリックし、[イベント関数] を選択してから、[イベント関数の作成] をクリックします。
イベント関数を作成する際には、関数の適切な実行に影響を与える主要なパラメーターのみを構成します。
基本構成 - 関数名: この関数名は後続のステップで使用します。
cdn-log-dumpを使用することをお勧めします。関数コード - ランタイム環境: タスク関数は Python コードであるため、[ビルトインランタイム]、[Python]、および [Python 3.10] を選択します。
詳細設定 - 環境変数: タスク関数はバケット情報を取得する必要があります。したがって、環境変数でバケット構成情報を渡す必要があります。3 つの環境変数を作成し、対応するパラメーターを入力します:
target_oss_bucket: バケット名target_oss_endpoint: インターネットアクセスのエンドポイント値target_oss_prefix: ログファイルを保存するためのディレクトリの名前

パラメータを構成した後、[作成] をクリックして関数を作成します。
[関数の詳細] ページで、[トリガー] タブをクリックし、次に [トリガーの作成] をクリックします。

次の手順に従って、トリガーの主要なパラメーターを構成します。[OK] をクリックします。
[トリガータイプ]: [CDN 同期呼び出し] を選択します。
名前: トリガー名を入力します。
cdn-logs-triggersを使用することをお勧めします。[トリガーイベント]: [LogFileCreated] を選択します。
ドメイン名: 同じ Alibaba Cloud アカウント下にあり、正常に実行されている CDN 高速化ドメイン名を入力する必要があります。
説明: トリガーの説明を入力します。CDN オフラインログファイル作成トリガーを使用することをお勧めします。
[ロール名]: [AliyunCDNEventNotificationRole] を選択します。
トリガーパラメーターを構成した後、[OK] をクリックします。メッセージ [CDN トリガーのデフォルトロールが作成されていません] が表示された場合は、[今すぐ承認] をクリックし、指示に従ってデフォルトロールを作成します。このメッセージが表示されない場合は、トリガーは直接作成されます。

[関数の詳細] ページで、[コード] タブをクリックします。オンラインコンパイラで、次のコードを入力して CDN からオフラインログをプルし、OSS に保存します。
[コードのデプロイ] をクリックして、関数の構成を完了します。
3. 専用のロールとアクセスポリシーの作成
FC は OSS にアクセスするための権限が必要です。権限付与プロセスを簡素化するために、FC はロールの関連付けをサポートしています。次の手順に従って、オフラインログストレージ関数が OSS にアクセスできるようにするロールを構成します。
Resource Access Management (RAM) コンソールを開きます。左側のナビゲーションウィンドウで、[権限管理] > [ポリシー] を選択します。
[ポリシーの作成] をクリックします。[ポリシーの作成] ページで、[スクリプト] タブをクリックします。
次のポリシーで、
BucketNameをご自身のバケット名に置き換え、FC-NAMEの 3 つのインスタンスすべてをステップ 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 アカウント] を選択します。[信頼できる Alibaba Cloud アカウント] で [現在の Alibaba Cloud アカウント Xxxxxxx] を選択します。次に、[OK] をクリックします。
[ロールの作成] パネルで、[ロール名] を入力します。
AliyunCDNLogDumpRoleを使用することをお勧めします。次に、[OK] をクリックしてロールを作成します。ロールの詳細ページで、[権限] タブをクリックし、次に [権限の付与] をクリックします。[権限付与の範囲] を [カスタムポリシー] に設定します。[ポリシー名] に、ステップ 4 で作成したポリシーの名前を入力します。
AliyunCDNLogDumpAccessを使用することをお勧めします。次に、[OK] をクリックします。[信頼ポリシー] タブをクリックし、次に [信頼ポリシーの編集] をクリックします。[スクリプト] エディターで、次の信頼ポリシーを入力し、[OK] をクリックします。
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "fc.aliyuncs.com" ] } } ], "Version": "1" }
この時点で、ロールと権限の構成は完了です。次に、このロールを FC タスクにバインドする必要があります。
4. ロールを Function Compute タスクにバインドする
FC コンソールで、[関数] タブで、ステップ 2 で作成した関数を選択し、[設定] をクリックします。
[設定] タブで、[詳細設定] を選択し、対応する [設定] ボタンをクリックします。

詳細設定で、[権限] - [関数ロール] オプションを見つけます。ステップ 3 で作成したロールを選択します。
AliyunCDNLogDumpRoleを使用することをお勧めします。次に、[デプロイ] をクリックしてロールを FC タスクにバインドします。
5. Function Compute タスクのテスト (オプション)
最初の 4 つのステップを完了すると、CDN オフラインログを OSS に保存するためのプロセス全体が構成されます。ただし、オフラインログの生成には約 24 時間の遅延があるため、構成した FC タスクが正しく実行されているかをすぐに確認することはできません。次の手順に従って、構成した FC タスクをテストできます。
FC コンソールで、[関数] タで、ステップ 2 で作成した関数を選択し、[設定] をクリックします。
[テスト] タブで、[テストリクエスト操作] には [新しいテストイベントの作成] を選択します。 [イベントテンプレート] には [CDN(LogFileCreated)] を選択します。 [イベント名] には [Test_cdn_log_dump] を入力します。

次の手順で取得したパラメーターを使用して、イベントテンプレートの
filePathパラメーターを置き換えます。[関数のテスト] をクリックします。実行が完了すると、戻り値が
nullで、ステータスが成功であることがわかります。
OSS バケットコンソールで、CDN ログの保存に使用するバケットを選択します。
[ファイルリスト] を選択し、CDN ログを保存するように構成されたディレクトリに移動します。高速化ドメイン名にちなんで名付けられたフォルダが表示されます。このフォルダ内には、日付にちなんで名付けられたサブフォルダがあり、テストで指定されたファイルが含まれています。これは、FC タスクが CDN オフラインログストレージを正常に処理したことを示します。


