AWS Systems Manager オートメーションによる AutoScaling グループのAMI更新

EC2 AutoScalingを利用している環境では、OS内の更新に伴い起動元AMIをアップデートする必要が出てきます。
例えば、下記のようにAMI更新用のインスタンス(AutoScalingグループに所属しない)を用意しておき、

  1. AMI更新用インスタンスで、OS内の更新作業を実施
  2. AMI更新用インスタンスを元にAMIを作成
  3. 作成したAMIを元にAutoScaling起動設定を作成
  4. 対象のAutoScalingグループを、作成した起動設定を参照するよう更新

といった流れで行います。
今回は、SSM Automation + CloudWatch Events を利用し、(2)~(4)をスケジュール実行させてみます。

設定方法

CloudFormationスタック作成

以下のテンプレートを利用しCloudFormationスタックを作成してください。

このテンプレートで、以下リソースが作成されます。

  • (2)~(4)を行う為のSSM Automationドキュメント
  • SSM Automationドキュメントの内容(AutoScaling AMI更新)を実行する為のIAMロール
  • CloudWatch Events から SSM Automationを実行する為のIAMロール

CloudWatch Events ルールの作成

CloudWatchの操作画面で、ルールを作成します。

AutoScalingの起動元AMI更新を実施するスケジュールを設定します。
以下の場合、日本時間で毎日14:30になります。

また[ターゲットの追加]を選択しておきます。

以下の通りターゲットを設定します。

ドキュメント [スタック名]-AutomationDocument-[ランダム文字列]

(CFnにより作成されたSSMドキュメント名)

InstanceId AMI更新用インスタンスのID
AutoScalingGroupName 対象のAutoScalingグループ名
LaunchConfigPrefix 新しく作成される起動設定の接頭辞(プレフィックス)
既存のロールを使用 EventsRoleForExecSSMAutomation (既定のIAMロール名)

適当な名前を設定し、ルールを作成します。

 

稼働確認

実際に起動元AMIが更新されているか確認してみましょう。
[インスタンスID]_[YY-MM-DD] という名前でAMIが作成されていて、

そのAMIを指定した起動設定が [指定したプレフィックス]_[YY-MM-DD] という名前で作成されていて、

対象のAutoScalingグループでその起動設定が参照されていればOKです。

更新処理の詳細はSystems Manager オートメーションの画面で確認できます。
実行IDを選択するとより詳細な内容が確認できます。

ステップごと(AMI作成、起動設定作成、AutoScalingグループ更新)の状況を確認したい場合はステップIDを選択します。

ステップ(AMI作成)の詳細が確認できました。

設定内容(CloudFormationテンプレート内容解説)

SSM Automationを実行する為のCloudWatch Events用IAMロール

CloudWatch Events(events.amazonaws.com)から、SSM Automationが実行可能なロールになっています。

AutoScalingグループを更新する為のSSM用IAMロール

Systems Manager(ssm.amazonaws.com)から、AMI作成・起動設定作成・AutoScalingグループ更新が実行可能なロールになっています。

SSM Automationドキュメント

CloudFormationテンプレートもSSMドキュメントもYAMLなので分かりにくいですが、
Content以下がSSMドキュメントの内容です。

  • createImageステップで(インスタンス再起動無しで) [インスタンスID]_[YY-MM-DD] というAMIを作成し、
  • CreateLaunchConfigurationステップでそのAMIを元に [指定したプレフィックス]_[YY-MM-DD] という起動設定を作成し、
  • UpdateAutoScalingGroupステップで、その起動設定を参照するよう対象のAutoScalingグループを更新しています。

また、CreateLaunchConfigurationステップではInstanceIdというオプションを指定しています。
これは指定したインスタンスのプロパティを引き継いだ起動設定を作成してくれるオプションです。

EC2 インスタンスを使用した起動設定の作成

以上です。