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 がログを作成する際に生成されるイベントをリッスンし、関数を呼び出してオフラインログを OSS にアーカイブします。このソリューションは、Alibaba Cloud CDN のログをお客様の OSS バケットにシームレスにアーカイブする自動化されたワークフローを作成します。
仕組み
この自動アーカイブソリューションは、Function Compute を「スケジューラー」および「データムーバー」として使用し、Alibaba Cloud CDN と OSS を接続します。ワークフローは次のとおりです。
-
イベントトリガー:Alibaba Cloud CDN が新しいログファイルを生成するたびに、Function Compute のトリガーが起動します。
-
関数の実行:トリガーが起動すると、関連付けられた関数コードが自動的に実行されます。
-
ログの取得:関数コードは、現在の日付に基づいて前日のログファイル名を計算し、Alibaba Cloud CDN オフラインログのダウンロード URL を生成します。その後、この URL にリクエストを送信して、ログファイルを Function Compute の一時環境にダウンロードします。
-
OSS への転送:関数がログファイルを正常にダウンロードした後、OSS API を呼び出して、指定された OSS バケット内の特定のディレクトリにファイルをアップロードします。
プロセス全体は完全に自動化されており、Alibaba Cloud CDN、Function Compute、および OSS を密に統合し、クラウドサービス管理を効率化します。
課金
このソリューションには、以下の製品の料金が発生します。
-
Alibaba Cloud CDN:オフラインログの生成とダウンロードは 無料 です。
-
Function Compute:関数の呼び出し回数、消費されたリソース (vCPU とメモリ)、および実行時間に基づいて課金されます。1 日に数回しか実行されない軽量なログアーカイブタスクの場合、コストは通常ごくわずかです。詳細については、「Function Compute 課金の概要」をご参照ください。
-
OSS:使用するストレージ容量、API リクエスト数、およびアウトバウンドインターネットトラフィックに基づいて課金されます。詳細については、「Object Storage Service (OSS) 課金の概要」をご参照ください。
前提条件
-
同じ Alibaba Cloud アカウント で Alibaba Cloud CDN、Function Compute、および OSS を有効化していることを確認してください。これにより、サービス間のスムーズな承認とアクセスが確保されます。
-
ログファイルを保存するための OSS バケットを作成します。詳細については、「バケットの作成」をご参照ください。 バケット名、パブリックアクセス用エンドポイント、および ログ保存先ディレクトリ名 を記録しておきます。
操作手順
1. バケット情報の取得
Function Compute の関数には、OSS バケット情報が必要です。次の手順に従って、バケット名、パブリックアクセス用エンドポイント、および ログ保存先ディレクトリ名 を取得します。
2. Function Compute の関数とトリガーの作成
Function Compute で、アーカイブを実行する関数とそれを起動するトリガーを作成します。
-
Function Compute コンソールにログインします。左側メニューで、[Functions] を選択します。
-
[Functions] ページで [Create Function] をクリックし、[Event Function] を選択してから [Create Event Function] をクリックします。
-
イベント関数を作成する際に、次の主要なパラメーターを設定します。
-
[Basic Settings] - 関数名:この関数名は後の操作で必要です。
cdn-log-dumpの使用を推奨します。 -
[Function Code] > [Runtime]:この関数は Python で記述されています。[Official Runtimes]、[Python]、[Python 3.10] を選択します。
-
[Advanced Settings] > 環境変数: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に設定します。 -
-
-
パラメーターを設定したら、作成 をクリックします。
-
[Function Details] ページで、[Triggers] タブをクリックし、[Create Trigger] をクリックします。
-
トリガーの主要なパラメーターを次のように設定し、[OK] をクリックします。
-
[Trigger Type]:[Alibaba Cloud CDN (Sync)] を選択します。
-
名前:トリガーの名前を入力します (推奨名:
cdn-logs-triggers) 。 -
[Event Name]:[LogFileCreated] を選択します。
-
ドメイン名:同じ Alibaba Cloud アカウント内にある有効なアクセラレーションドメイン名を入力します。
-
説明:トリガーの説明を入力します。「CDN オフラインログファイル生成トリガー」の使用を推奨します。
-
[Role]:[AliyunCDNEventNotificationRole] を選択します。
-
-
トリガーのパラメーターを設定した後、OK をクリックします。"No Default Role Is Created for CDN Trigger" というメッセージが表示された場合は、[Authorize Now] をクリックし、画面の指示に従ってデフォルトのロールを作成します。表示されない場合、トリガーはすぐに作成されます。
-
[Function Details] ページで [Code] タブをクリックし、オンラインエディターに次のコードを入力します。このコードは Alibaba Cloud CDN からオフラインログを取得し、OSS に保存します。
-
[Deploy Code] をクリックします。
3. カスタムロールとポリシーの作成
Function Compute の関数は、OSS にアクセスするための権限が必要です。これらの権限は、カスタムロールを関数にアタッチすることで付与できます。次の手順に従って、必要なロールとポリシーを作成します。
-
Resource Access Management (RAM) コンソールにログインします。左側メニューで、[Permissions] > [Policies] を選択します。
-
[Create Policy] をクリックし、[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 をクリックし、[Policy Name] と 備考 を入力します。その後、再度 OK をクリックして ポリシーを作成します (ポリシー名には
AliyunCDNLogDumpAccess、説明には CDN オフラインログダンプを管理する権限 を設定することを推奨します) 。 -
左側メニューで、[Identities] > [Roles] を選択し、[Create Role] をクリックします。
-
[Select Trusted Entity] で [Alibaba Cloud Service] を選択します。[信頼されたサービス] で [Function Compute] を選択し、OK をクリックします。
-
[Create Role] ダイアログボックスで、[Role Name] (推奨:
AliyunCDNLogDumpRole) を入力し、OK をクリックしてロールを作成します。 -
[Permissions] タブで、[Grant Permission] をクリックします。[Policy Type] で カスタムポリシー を選択し、[Policy Name] に先ほど作成したポリシーの名前 (推奨:
AliyunCDNLogDumpAccess) を入力します。その後、OK をクリックします。 -
[Trust Policy] タブで、[Edit Trust Policy] をクリックします。[JSON] エディターに次の信頼ポリシーを入力し、OK をクリックします。
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "fc.aliyuncs.com" ] } } ], "Version": "1" }
4. 関数へのロールのアタッチ
-
Function Compute コンソールの [Functions] タブで、ステップ 2 で作成した関数を選択し、設定 をクリックします。
-
関数の詳細ページで、設定 タブをクリックします。高度設定 セクションで、設定 をクリックします。
-
[詳細設定] で、[権限 - 関数ロール] オプションを見つけ、ステップ 3 で作成したロールを選択します。
AliyunCDNLogDumpRoleの使用を推奨します。その後、[Deploy] をクリックして、ロールを Function Compute タスクに割り当てます。
5. 関数のテスト (任意)
これで設定は完了です。Alibaba Cloud CDN はオフラインログを約 24 時間の遅延で生成するため、設定が正しく機能するかどうかをすぐに検証することはできません。関数をすぐにテストするには、次の任意の手順に従ってください。
-
Function Compute コンソールの [Functions] タブで、ステップ 2 で作成した関数を選択し、設定 をクリックします。
-
関数の詳細ページで、テスト タブをクリックします。[Test Event] で [Create New Test Event] を選択します。[Event Template] で [CDN (LogFileCreated)] を選択します。[Event Name] に Test_cdn_log_dump と入力します。
JSON エディターには、CDN の LogFileCreated イベントテンプレートが自動的に入力されます。このテンプレートには、
eventName、eventSource、region、eventTime、traceId、userIdentity(aliUid)、resource(例:ドメインが example.com)、eventParameterなどのフィールドが含まれます。 -
次の手順で取得するパラメーターを使用して、イベントテンプレートの
filePathパラメーターを変更します。 -
[Test Function] をクリックします。実行が完了すると、返される結果は
null、実行ステータスは成功となります。 -
OSS コンソールで、Alibaba Cloud CDN ログを保存するために使用するバケットを選択します。
-
[Files] をクリックし、Alibaba Cloud CDN ログを保存するように設定したディレクトリに移動します。アクセラレーションドメイン名にちなんだ名前のフォルダーが表示されます。そのフォルダー内には、日付の名前が付いたサブフォルダーがあり、その中にアーカイブされたログファイルが含まれています。これにより、Function Compute タスクが正常に実行されたことが確認できます。