■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」を追加してもローリングアップデートが実施されます。
■関連記事