ぴよ丸水産

週末ファゴッティストによる技術ブログ

【AWS】Systems Manager使ってみる 導入編

はじめに

AWS環境の運用自動化するのに、
AWS Systems Manager(以下、SSM)を試行中です。
今回は導入編ということで、
メンテナンスウィンドウを動かす最低限のチュートリアルを書きました。
オートメーションドキュメントの自作とかもやってみたので、
別記事で公開します。

AWS Systems Managerとは

公式サイトの紹介ページはこちら

AWS Systems Manager(運用時の洞察を改善し、実行)| AWSaws.amazon.com

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/what-is-systems-manager.html

機能はいくつかあるようですが、
私が使ってみたのはAutomationの機能です。
メンテナンスウィンドウから、

  • ターゲット
  • タスク(オートメーションドキュメント)
  • スケジュール

を登録して、実行します。
※ざっくり説明してます。詳細は後述。

動作確認環境

事前準備

SSM Automationタスク用IAMロールの作成

SSMからAWS上のリソースに対して
実行しようとする操作を許可するための
IAMロールを作成します。
以下、SSMServiceRoleとします。(説明の便宜上)

https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-maintenance-permissions.html

実行するタスクに応じて、
ポリシーをアタッチする必要があります。

例えばオートメーションドキュメントの中で、
DescribeInstancesというAPIを使う場合は、
SSMServiceRoleに
DescribeInstancesを許可するポリシーをアタッチしていないと、
実行時、権限がないよってエラーになります。

Step fails when it is Execute/Cancelling action. 
An error occurred (AccessDenied) when calling the DescribeInstances operation: 
User: arn:aws:sts::XXXXXXXXXXXX:assumed-role/SSMServiceRole/OrchestrationService is not authorized to perform: 
ec2:DescribeInstances. Please refer to Automation Service Troubleshooting Guide for more diagnosis details.

SSMに操作されるEC2用のIAMロールの作成

SSMに操作されるEC2インスタンス割り当てるIAMロールを作成します。
以下、EC2InstanceRoleForSSMとします。(説明の便宜上)

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/setup-instance-profile.html

AmazonSSMManagedInstanceCoreはアタッチ必須です。
S3やAD、CloudwatchとEC2を連携するような操作をするには、
カスタムポリシーが必要みたいです。

メンテナンスウィンドウの登録

メンテナンスウィンドウの設定手順は、こちら。

https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-maintenance-working.html

今回は、AWSにデフォルトで登録されている、
オートメーションドキュメントを使用して、
EC2インスタンスを18時に停止するメンテナンスウィンドウを作ってみます。

① Systems Manager のコンソールを開く
②[メンテナンスウィンドウの作成]を押下
③以下の項目を入力し、 [メンテナンスウィンドウの作成]を押下

No 項目名
1 名前 StopEC2Instance
2 説明 Stop EC2 Instance at 18:00.
3 指定 Cronスケジュールビルダー
4 ウィンドウの開始 毎日の18:00
5 期間 1
6 タスクの開始を停止 0
7 ウィンドウの開始日 指定なし
8 ウィンドウの終了日 指定なし
9 タイムゾーンのスケジュール (GMT+09:00)Japan

④ 作成したメンテナンスウィンドウを選択し、[編集]を押下
⑤ターゲットタブを開き、[ターゲットの編集]を押下
⑥以下の項目を入力し、 [ターゲットの登録]を押下

No 項目
1 名前 TargetHosts
2 説明 Hosts stopped at 18:00
3 所有者情報 指定なし
4 Target Selection Choose instances manually
5 インスタンス ★対象のインスタンスたち

インスタンスが出てこない場合は、以下をチェック

⑦タスクタブに移動して、[タスクを登録する]を押下
⑧[オートメーションタスクの登録]を押下
⑨以下の項目を入力し、 [タスクの登録]を押下

No 項目
1 名前 StopInstance
2 説明
3 オートメーションドキュメント AWS-StopEC2Instance
4 ドキュメントのバージョン ランタイムのデフォルトバージョン
5 優先度 1
6 ターゲット 登録済みのターゲットグループの選択:TargetHosts
7 レート制御-並行性 1ターゲット
8 レート制御-誤差閾値 0エラー
9 IAMサービスロール カスタムサービスロールを使用する:SSMServiceRole
10 入力パラメータ-InstanceId {{ TARGET_ID }}

※優先度って何…?

  • タスクの実行順番を制御できます。
  • 優先度は今回は1タスクのみなので、1にしてます。
  • 複数タスクを順次実行する場合は、優先度の値の昇順で実施されます。

オートメーションドキュメントの実体は、
AWS Systems Managerコンソールの左ペインの[ドキュメント]にあります。

これで、18時にEC2インスタンスを停止してくれるメンテナンスウィンドウができました。
タスクの実行履歴は履歴タブから確認できます。

おわりに

オートメーションドキュメント、
もとから入っているものでもけっこういろんなことできそうです。
SSMで運用チームが幸せになる使い方を模索中です。