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のような公式の略称は使ってもいいけど、基本的には略称は避けるべきだと思う。上述のprod
もproduction
とした方がいいと思う。
まとめ
これまでの話をまとめると、たいていのケースでは<リソースの種類>-<環境>
というネーミングにするのがよさそう。例えば
- EC2インスタンス:
production
- ECSサービス:
api-production
,sidekiq-production
- S3バケット:
assets-production
,uploads-production
- IAMロール:
developer
,ecs-task
というようなネーミングになりそう。まだ考慮できていないケースがありそうなので、随時アップデートしていきたい。