CloudFormationとServerless Framework利用時の「タグ」「説明」の付け方

記事タイトルとURLをコピーする

AWS管理者として悩ましい問題の一つに「このリソース誰が作ったの?」「なんのためのものなの?」「今も必要なの?」というのがあります。

これに対するソリューションの1つに、各リソースにタグや説明をつけるというのがあります。 「では全てのリソースにタグをつけましょうね」と運用ルールを作ることはできますが、実際に全てにタグをつけるのは困難です。 また、昨今はインフラ構築のコード化が進んでいるので、そのサイクルの中でタグをつける必要があります。

CloudFormationの場合

タグ

yamlやjsonのテンプレートには何もする必要がなく、スタックの作成または更新時にスタックオプションの画面でタグを指定するだけです。 これでスタックとスタック内のリソースにまとめてタグをつけることができます。

f:id:swx-watanabe:20210612074611p:plain

ただ全てのリソースにタグがつくかというと、そんなに上手くはいきません。 これだけだと、EC2インスタンス作成時に派生して作成されるEBSボリューム等にはタグがつかなかったりします。

Description

また、CloudFormationスタック自体に少し説明があると、後でプロジェクトに参加した人などがわかりやすくなります。 例えば、yamlやjsonのテンプレートに、コードを管理しているURLを書くことなどが考えられます。

Description: "https://github.com/xxxxxxx/xxxxxxxx"

f:id:swx-watanabe:20210625104643p:plain

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

f:id:swx-watanabe:20210625113622p:plain

CloudFormationスタックの説明は、このように書けます。

resources:
  Description: https://github.com/xxxxxxx/xxxxxxxx

f:id:swx-watanabe:20210625114115p:plain

上記を行うと、 Lambda > アプリケーション に表示される説明も同時に更新されます。

f:id:swx-watanabe:20210625114124p:plain

まとめ

AWSの各リソースへ簡単にタグと説明をつける方法を紹介しました。 完璧ではないですが、いくらかリソースの使用状況を把握しやすくなるのではないでしょうか。 ぜひ、ご検討ください。

渡辺 信秀(Nobuhide Watanabe) (記事一覧)

2017年入社。好きな言語は日本語。