AWSのリソースのネーミング

AWSのリソースをどうネーミングするのがいいか地味に悩む。なので、一度ちゃんと考えてみた。

リソース名の要素

自分が扱っているプロダクトでは、リソース名を構成する要素を分解してみると、以下のような感じになる。

  • プロダクトのコードネーム
  • AWSサービス名:ec2, serviceなど
  • 環境:prod, stgなど
  • リソースの種類:api, assetsなど

この中だと「プロダクトのコードネーム」「AWSサービス名」はあってもなくてもよさそう。

prod, stgといった環境名は必要なケースと不要なケースがありそう。例えば、EC2インスタンスやS3バケットでは環境ごとに異なるものなので、環境名をつけることになる。一方、IAMのような権限まわりの設定はアプリケーションの実行環境とは別に考えられるものもあるし、SESのようなすべての環境で共通して利用するものも環境名をつけなくていいはず。

リソースの種類は複数のリソースを識別するために必要になるけど、識別する必要がなければなくてもいい。

要素の順

「環境」と「リソースの種類」が必要そうなのはわかったので、どちらを先に書くかを決める必要があるけど、環境が後かなーという気がする。どっちでもいいと思う。

スタイル

リソース名のスタイルはUpperCamelCase, camelCase, snake_case, kebab-caseのうちどれなのか。AWSのドキュメントを読むと、kebab-caseが多い。ただ、IAMだとUpperCamelCaseが使われているので、サービスごとに使い分けるのがよさそう。

略称

EC2のような公式の略称は使ってもいいけど、基本的には略称は避けるべきだと思う。上述のprodproductionとした方がいいと思う。

まとめ

これまでの話をまとめると、たいていのケースでは<リソースの種類>-<環境>というネーミングにするのがよさそう。例えば

  • EC2インスタンス:production
  • ECSサービス:api-production, sidekiq-production
  • S3バケット:assets-production, uploads-production
  • IAMロール:developer, ecs-task

というようなネーミングになりそう。まだ考慮できていないケースがありそうなので、随時アップデートしていきたい。