まず、AWSの基本的な概念のいくつかをまだ理解していないように感じます。この質問がわかりにくい場合は、ご容赦ください。
AWSで次の設定があります。
私はいくつかの先入観/条件を開発しました
CloudWatchおよびLambdaの助けを借りて、次のタスクを設定しました。
インスタンスはクラスター名で識別され、Nameタグに自動的に追加されます。
Auto Scaling Groupによって新しいインスタンスが作成されると、最新のECSエージェントを含む最新かつ最高のAMIが含まれることを期待していました。
間違っている場合は訂正してください。ただし、このAuto Scaling Groupの起動構成を確認したところ、構成されたAMIが常に使用されるため、これは当てはまらないことがわかりました。
私の一般的な質問は次のとおりです:起動構成でAMIを更新してから終了するために時々手動でチェックインする必要がある場合(正確な場合)、このセットアップにはどのような用途がありますか?新しいものを置き換えるインスタンス?
多くの人は、最初にテストしたいので、本番クラスターでOSの更新を自動化することをおそらく望まないことを理解しています。ただし、それでも、OSの更新が自動的に適用されるステージング環境が必要になる場合があります。 OSの更新を手動でロールアウトする必要があるのに、高度に自動化されたプラットフォームを使用するのはなぜですか。これは私の側の概念的な誤解ですか?
すべてのECSクラスターのインスタンスエージェントを更新するLambda関数を作成しました。
var AWS = require('aws-sdk');
AWS.config.update({ region: 'sa-east-1' });
exports.handler = async(event, context) => {
var ecs = new AWS.ECS();
var responseArray = [];
const clusters = await ecs.listClusters({}).promise();
for (var i = 0; i < clusters.clusterArns.length; i++) {
const clusterArn = clusters.clusterArns[i];
const clusterInstances = await ecs.listContainerInstances({
cluster: clusterArn
}).promise();
for (var j = 0; j < clusterInstances.containerInstanceArns.length; j++) {
const containerInstanceArn = clusterInstances.containerInstanceArns[j];
try {
const response = await ecs.updateContainerAgent({
containerInstance: containerInstanceArn,
cluster: clusterArn
}).promise();
responseArray.Push({
cluster: clusterArn,
containerInstance: containerInstanceArn,
response: response
});
}
catch (e) {
responseArray.Push({
cluster: clusterArn,
containerInstance: containerInstanceArn,
response: e
});
}
}
}
return responseArray;
};
次に、ラムダ関数を毎日実行するCloudWatchイベントルールを作成しました。私にとってはうまくいきます。