■Lambda
ローリングアップデートを行うための処理を作成
▼Lamdaを作成する際の選択値
項目 | 値 |
---|---|
name | test ※仮でtestとします |
関数の作成 | 一から作成 |
ランタイム | Node.js 16.x |
▼コード
Node.js での現時点でのSDKサポートは v2 になります
※ 最新版を使用したい場合は自身でデプロイを行う必要があります
https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html
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」を追加してもローリングアップデートが実施されます。
■関連記事