Alibaba Cloud EventBridge を使用することで、Container Registry (ACR) Enterprise Edition インスタンスにイメージをプッシュするたびに、Container Compute Service (ACS) でイメージキャッシュの作成を自動的にトリガーできます。イメージキャッシュを使用すると、イメージをゼロからプルする必要がなくなり、Pod の起動時間が大幅に短縮されます。
仕組み
このソリューションでは、イベント駆動型のパイプラインで次の 3 つの Alibaba Cloud サービスを連携させます。
ACR Enterprise Edition がイメージのプッシュを検出し、
cr:Artifact:PushCompletedイベントを送信します。EventBridge がデフォルトイベントバス上でイベントを受信し、イベントペイロードから抽出したパラメーターを使用して ACS の
CreateImageCacheAPI を呼び出します。ACS が新しくプッシュされたイメージから自動的にイメージキャッシュを作成し、高速な Pod 起動を可能にします。
イメージのプッシュごとに 1 回の CreateImageCache API 呼び出しがトリガーされます。頻繁にイメージをプッシュする場合は、発生するイメージキャッシュのストレージコストおよび EventBridge のイベント配信料金にご注意ください。前提条件
作業を開始する前に、次のリソースが準備されていることを確認してください。
リソース | 説明 |
Personal Edition インスタンスはサポートされていません。 | |
後ほど使用するために vSwitch ID を記録しておいてください。 | |
セキュリティグループ | VPC 上記の VPC に属している必要があります。後ほど使用するために セキュリティグループ ID を記録しておいてください。 |
ステップ 1:ACR インスタンスの設定
Container Registry コンソール にログインします。
左側のナビゲーションウィンドウで、[インスタンス] をクリックします。
[インスタンス] ページで、管理対象の Enterprise Edition インスタンスをクリックします。
左側のナビゲーションウィンドウで、 を選択します。VPC タブで、VPC の追加 をクリックし、事前に準備した VPC を追加します。
左側のナビゲーションウィンドウで、 を選択します。ルールの作成 をクリックし、次の設定を行います。
イベントタイプ:
cr:Artifact:PushCompletedを選択します。適用範囲:モニター対象のリポジトリを選択するか、すべてのリポジトリを選択します。
インシデント通知:DingTalk、HTTP、または HTTPS を選択します。
通知エンドポイントは機能していなくても問題ありません。この手順は、EventBridge がイベントをキャプチャできるようにするために必要です。
ステップ 2:RAM ポリシーの作成
ACS の CreateImageCache API を呼び出す権限を付与するカスタムポリシーを作成します。
RAM 管理者として RAM コンソール にログインします。
左側のナビゲーションウィンドウで、[権限] > [ポリシー] を選択します。
[ポリシー] ページで、[ポリシーの作成] をクリックします。
[ポリシーの作成] ページで、[JSON エディター] をクリックします。
次のポリシー詳細を貼り付け、[OK] をクリックします。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "acc:CreateImageCache", "Resource": "*" }, { "Effect": "Allow", "Action": "ram:CreateServiceLinkedRole", "Resource": "*", "Condition": { "StringEquals": { "ram:ServiceName": "imc.acc.aliyuncs.com" } } } ] }ポリシー名と任意の説明を入力し、[OK] をクリックします。
ステップ 3:EventBridge の設定
ステップ 1 の実行中に、EventBridge は デフォルト イベントバス上にルールを自動的に作成しました。このステップでは、このルールを編集して、ACS の CreateImageCache API を呼び出すイベントターゲットを追加します。
EventBridge コンソール にログインします。
上部のナビゲーションバーで、ご利用の VPC と同じリージョンを選択します。
左側のナビゲーションウィンドウで、[Event Buses] をクリックします。
デフォルト イベントバスの行で、操作 列の イベントルール をクリックします。ステップ 1 で作成したイベントルールを見つけ、イベントターゲットの編集 をクリックし、次に ターゲットの追加 をクリックします。
パラメーター
値
サービスタイプ
acs.openapi.accAPI タイプ
CreateImageCacheRegionId
テンプレート を選択します:
変数:
{ "InstanceName": "$.data.InstanceName", "RegionId": "$.data.RegionId", "RepoName": "$.data.RepoName", "RepoNamespaceName": "$.data.RepoNamespaceName", "Tag": "$.data.Tag" }テンプレート:
${RegionId}
ImageCacheName
テンプレート を選択します:
変数:
{ "InstanceName": "$.data.InstanceName", "RegionId": "$.data.RegionId", "RepoName": "$.data.RepoName", "RepoNamespaceName": "$.data.RepoNamespaceName", "Tag": "$.data.Tag" }テンプレート:
${RepoNamespaceName}-${RepoName}-${Tag}
Images
テンプレート を選択します:
変数:
{ "InstanceName": "$.data.InstanceName", "RegionId": "$.data.RegionId", "RepoName": "$.data.RepoName", "RepoNamespaceName": "$.data.RepoNamespaceName", "Tag": "$.data.Tag" }テンプレート:
${InstanceName}-registry-vpc.${RegionId}.cr.aliyuncs.com/${RepoNamespaceName}/${RepoName}:${Tag}
NetworkConfig
VSwitchIds:事前に準備した vSwitch ID を入力します。
SecurityGroupId:事前に準備したセキュリティグループ ID を入力します。
ロール設定
新しいロールの作成を許可 をクリックすると、EventBridge により
AliyunEventBridgeOpenApi-******という名前のロールが作成されます。その後、RAM 管理者として RAM コンソール にログインし、該当のロールを検索して、手順 2 で作成したカスタムポリシーをアタッチしてください。再試行ポリシーとデッドレターキュー
指数減衰再試行 および フォールトトレランスの許可 を選択します。
ステップ 4:結果の確認
ACR Enterprise Edition インスタンスにイメージをプッシュし、ACS コンソール にログインします。左側のナビゲーションウィンドウで イメージキャッシュ をクリックし、<名前空間>-<リポジトリ>-<タグ> 形式の名前で新しいイメージキャッシュが表示されることを確認します。