Systems Manager でスナップショット作成のついでにタグもつける
Systems Manager の便利さにやっと気がつきました、那須です。
Systems Manager ほんとにいいですね。今まで頑張って Lambda で作ってたものがコード書かずにできるのが嬉しいです。 例えばバックアップとか。AMI 作成とかスナップショット作成とかをよしなにやってくれます。
完璧ではなかった
一例ですが、Systems Manager Automation のドキュメントに AWS-CreateSnapshot というドキュメントがあります。 名前の通りで、EBS の ボリューム ID を指定すれば EBS スナップショットを取ってくれます。 ただこのドキュメント、実行すると確かに EBS スナップショットは作成してくれるんですが残念なんですよね…
スナップショット作成する対象のボリュームはこれなんですが
実際に AWS-CreateSnapshot Automation を実行してみると…
タグ全くついてないやん!!
でも安心してください! Systems Manager ドキュメントは JSON か YAML で書かれているんです。ということは、自分で調整しちゃえばいいんですよ! Lambda みたいにがっつりコードを書くことなく、シンプルに運用自動タスクを実装できます(シンプルにできるかどうかは内容によります
AWS-CreateSnapshot でやってること
コンテンツを見てみると、大きく以下の流れになっています。
- CloudFormation スタックを作成する(中身は IAM ロール作成と Lambda 関数作成)
- Lambda 関数実行
- 確認して OK なら CloudFormation スタック削除
AWS で始まるドキュメントは編集できないのでドキュメント新規作成
ドキュメントを作成します。
ドキュメント名はただの名前なので好きにしてください。
コンテンツのところは、AWS-CreateSnapshot のコンテンツ内容をそのままコピペしてください。
まだ「ドキュメントの作成」ボタンは押しません。
コンテンツで変更するポイント(IAM ロール)
まずタグ付けするにも権限が必要です。一時的な IAM ロールを作成するところ(ec2: で検索するとすぐでてきます)で、下記の 3 つのアクションを追加します。
'ec2:DescribeTags', 'ec2:CreateTags', 'ec2:DescribeVolumes'
コンテンツで変更するポイント(Lambda 関数)
以下のスナップショットを作成するところで、
\\tsnapshot = volume.create_snapshot(Description=description)\\n\\n
こんな風にタグ付けする行を追加します。
\\tsnapshot = volume.create_snapshot(Description=description)\\n\\tsnapshot.create_tags(Tags=volume.tags)\\n
これだけです。必要に応じて try/catch 等の処理は入れてくださいね。 これでドキュメントの作成ボタンを押して完了です。
実行してみよう
こんな感じでステータスが成功になれば OK です!
スナップショットのコンソールでも確認してみましょう。作成された EBS スナップショットのタグを見ると…
ばっちりですね。
公開されているドキュメントを参考に自分好みのドキュメントを作ろう
いろんなドキュメントを見ていただければわかると思いますが、できることとできないことがなんとなく見えてきて、ここをこうすればたぶんできるな、みたいな感覚がつかめると思います。 環境によってやりたいことも異なると思うので、公開されているドキュメントを少しだけ変更して、自分の環境に適した Automation ドキュメントを作成して運用を少しでも楽にできるようにしていきましょう!