0
Help us understand the problem. What are the problem?

posted at

ECRへのPUSHをトリガーにECSのローリングアップデートを行う

■Lambda

ローリングアップデートを行うための処理を作成

▼Lamdaを作成する際の選択値

項目
name test ※仮でtestとします
関数の作成 一から作成
ランタイム Node.js 16.x

▼コード

Node.js での現時点でのSDKサポートは v2 になります
※ 最新版を使用したい場合は自身でデプロイを行う必要があります

https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html

index.js
const aws = require('aws-sdk')

// async は付けないでください
exports.handler = (event, context) => {
  const ecs = new aws.ECS({region: event.region});

  // 環境変数は「Lambda」の「設定」に保存します
  // 「forceNewDeployment」はイメージに更新がある場合に限定するなら不要
  ecs.updateService({
    cluster: process.env.CLUSTER,
    service: process.env.SERVICE,
    forceNewDeployment: true
  }, (err, data) => {
    if (err) {
      console.log(err);
    } else {
      context.succeed('succeed');
    }
  });
};

▼設定 > アクセス権限

作成時に「ロール権限」を自動生成している前提となります。
※リンクからIAMに遷移が出来ます
※ログの権限は自動生成時に付与されています

下記をインラインポリシーで追加します。

項目
サービス Elastic Container Service
アクション UpdateService
リーソース すべて

ログはCloudWatchのロググループ に「/aws/lambda/【Lambdaの関数名】」で生成されます

▼設定 > 環境変数

項目
CLUSTER ECSのクラスター名
SERVICE ECSのクラスターに所属するサービス名

■Amazon EventBridge

ルールを新規に作成します

ルールの詳細 ルールタイプ イベントパターンを持つルール
イベントソース イベントソース AWS イベントまたは EventBridge パートナーイベント
イベントパターン イベントソース AWSのサービス
AWS のサービス Elastic Container Registry(ECR)
イベントタイプ ECR Image Action
特定のアクションタイプ PUSH
特定の結果 SUCCESS
特定のリポジトリ 【作成リポジトリ】
特定のイメージタグ 【トリガーとしたいタグ名】
ターゲットを選択 ターゲットタイプ AWSのサービス
ターゲットを選択 Lambda関数
機能 【Lambdaで作成したローリングアップデートを行う関数名を選択】

■テスト

上記の「Lambda」と「Amazon EventBridge」で設定は完了となります。
ECRの該当リポジトリに設定したタグを push するとローリングアップデートが実施されます。

既存イメージに「EventBridge」のトリガーとなる「タグ」を追加した場合もローリングアップデートが実施されます。
例えば、トリガーとなるタグを「latest」とした場合、「staging」タグが付与されているイメージに「latest」を追加してもローリングアップデートが実施されます。

■関連記事

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?