AWS管理者として悩ましい問題の一つに「このリソース誰が作ったの?」「なんのためのものなの?」「今も必要なの?」というのがあります。
これに対するソリューションの1つに、各リソースにタグや説明をつけるというのがあります。 「では全てのリソースにタグをつけましょうね」と運用ルールを作ることはできますが、実際に全てにタグをつけるのは困難です。 また、昨今はインフラ構築のコード化が進んでいるので、そのサイクルの中でタグをつける必要があります。
CloudFormationの場合
タグ
yamlやjsonのテンプレートには何もする必要がなく、スタックの作成または更新時にスタックオプションの画面でタグを指定するだけです。 これでスタックとスタック内のリソースにまとめてタグをつけることができます。
ただ全てのリソースにタグがつくかというと、そんなに上手くはいきません。 これだけだと、EC2インスタンス作成時に派生して作成されるEBSボリューム等にはタグがつかなかったりします。
Description
また、CloudFormationスタック自体に少し説明があると、後でプロジェクトに参加した人などがわかりやすくなります。 例えば、yamlやjsonのテンプレートに、コードを管理しているURLを書くことなどが考えられます。
Description: "https://github.com/xxxxxxx/xxxxxxxx"
Serverless Frameworkの場合
Serverless Frameworkも内部ではCloudFormationを利用していますが、設定箇所が serverless.yml になります。
タグ
stackTagsを設定すると、スタックオプションで指定したのと同じことができます。 なお、stackTagsではなく、tagsにするとLambda関数にのみタグがつきます。
provider: name: aws runtime: python3.8 lambdaHashingVersion: 20201221 stackTags: Application: hello Owner: watanabe
実際に試したところ、Lambda、IAM、S3バケット等にまとめてタグがついていました。 ただし、CloudWatchLogsにはタグはつきませんでした。
また、更新時にstackTagsだけを更新した場合は、上手く動かないという不具合がありますが、ワークアラウンドとして--forceをつけてdeployすると上手くいきます。
Deployment skipped when stackTags are changed · Issue #6243 · serverless/serverless · GitHub
Description
Lambda関数の説明は、このように書けます。
functions: hello: handler: handler.hello description: https://github.com/xxxxxxx/xxxxxxxx
CloudFormationスタックの説明は、このように書けます。
resources: Description: https://github.com/xxxxxxx/xxxxxxxx
上記を行うと、 Lambda > アプリケーション
に表示される説明も同時に更新されます。
まとめ
AWSの各リソースへ簡単にタグと説明をつける方法を紹介しました。 完璧ではないですが、いくらかリソースの使用状況を把握しやすくなるのではないでしょうか。 ぜひ、ご検討ください。
渡辺 信秀(記事一覧)
2017年入社 / 地味な内容を丁寧に書きたい