CI2部 技術2課の山﨑です。
先日書いた2つのブログではそれぞれタグ設計に関する基礎知識、アカウント設計パターン別のタグ設計について整理して考えてみましたが、今回は少し志向を変えてAWSリソースの命名規則について考えてみました。
AWSリソースが持つ命名における3つの特性
AWSリソースには以下3つの特性を持ったものがありますので、命名規則について検討する場合は予め確認しておきましょう。
- ①全世界で一意の値である必要があるAWSリソース
- S3バケット名
- ②AWSアカウント内で一意の値である必要があるAWSリソース
- MFAデバイス名、IAM User名 等
- ③一意である必要はないAWSリソース
AWSリソースの命名規則および命名例
以下、AWSリソースの命名規則についてAWSリソースをいくつかピックアップして考えてみたものをリストアップしていますので必要に応じてご参考ください。
- < > で記載の箇所は必須で命名する内容を表しています
- [ ] で記載の箇所は任意で命名する内容を表しています
- { } で記載の箇所は { } 内に記載されている候補からいずれかを選択して命名することを示しています
AWSリソース | AWSリソースコード | 命名規則 | 例 |
---|---|---|---|
VPC | vpc | vpc-<システムコード>-<環境名>-[任意の値]-[連番] | vpc-sampleapp-prd、vpc-sampleapp-prd-001 |
VPC Endpoint | vpce | vpce-<システムコード>-<環境名>-<用途>-[任意の値]-[連番] | vpce-sampleapp-prd-ssm、vpce-sampleapp-prd-s3-001 |
MFA端末名 | mfa | mfa-<社員番号>-<メールアドレス>-[連番] | mfa-12345-xxxx@example.co.jp、mfa-12345-xxxx@example.co.jp-001 |
VPC Peering | vpcp | vpcp-リクエスタVPC名略称-to-アクセプタVPC名略称-[用途] | vpcpeering-appprd-to-appstg |
VPC Flow Logs | flowlogs | flowlogs-<ログ出力先>-[連番] | flowlogs-s3-001、flowlogs-cwlogs-001 |
VPC Public Subnet | public-subnet | <システムコード>-<環境名>-public-subnet-[任意の値]-AZ名-[連番] | sampleapp-prd-public-subnet-1a、sampleapp-prd-public-subnet-1a-001 |
VPC DMZ Subnet | dmz-subnet | <システムコード>-<環境名>-dmz-subnet-[任意の値-AZ名-[連番] | sampleapp-prd-dmz-subnet-1a、sampleapp-prd-dmz-subnet-1a-001 |
VPC Private Subnet | private-subnet | <システムコード>-<環境名>-private-subnet-[任意の値]-AZ名-[連番] | sampleapp-prd-private-subnet-1a、sampleapp-prd-private-subnet-1a-001 |
VPC Transit Gateway Attachment Subnet | tgw-subnet | <システムコード>-<環境名>-tgw-subnet-[任意の値]-AZ名-[連番] | sampleapp-prd-tgw-subnet-1a、sampleapp-prd-tgw-subnet-1a-001 |
Route Table | rtb | <システムコード>-<環境名>-rtb-{public/dmz/private/tgw}-[連番] | sampleapp-prd-rtb-public、sampleapp-prd-rtb-public-001 |
Internet Gateway | igw | igw-vpc名 ※VPC名はリソースコード以降を記述 | igw-sampleapp-prd、igw-sampleapp-prd-001 |
NAT Gateway | ngw | ngw-{public/private}-AZ名-vpc名 ※VPC名はリソースコード以降を記述 | ngw-public-1a-sampleapp-prd-001、ngw-private-1a-sampleapp-prd-001 |
Security Group | scg | scg-<システムコード>-<環境名>-<役割・用途>-[任意の値]-[連番] | scg-sampleapp-prd-web、scg-sampleapp-prd-web-001 |
Direct Connect Gateway | dxgw | dxgw-<システムコード>-<環境名>-[任意の値]-[連番] | dxgw-sampleapp-prd-tgwconnect-001、dxgw-sampleapp-prd-tgwconnect-001 |
Direct Connect Connection | dxconnecion | dxconection-<システムコード>-<環境名>-[任意の値]-[連番] | dxconnecion-sampleapp-prd-tgwconnect-001 |
Direct Connect VIF | dxvif | dxvif-<キャリア名>-<システムコード>-<環境名>-{public/private/tgw}-[連番] | dxvif-os1-sampleapp-prd-tgw-001、dxvif-attokyo-sampleapp-prd-private-001 |
Transit Gateway | tgw | tgw-<システムコード>-<環境名>-[任意の値]-[連番] | tgw-sampleapp-prd-001、tgw-sampleapp-stg-001 |
Transit Gateway RouteTable | tgw-rtb | tgw-rtb-<システムコード>-<環境名>-[任意の値]-[連番] | tgw-rtb-sampleapp-prd、tgw-rtb-sampleapp-prd-001 |
Transit Gateway Attachment | tgw-att | tgw-att-<システムコード>-<環境名>-[任意の値]-[連番] | tgw-att-sampleapp-prd、tgw-att-sampleapp-prd-001 |
EC2 | ec2 | ec2-<システムコード>-<環境>-[任意の値]-[連番] | ec2-sampleapp-prd-web、ec2-sampleapp-prd-db-001 |
AMI | ami | ami-インスタンスID-取得日時(YYYYMMDDhhmm) | ami-i-xxxxxxxxxxxxxx-202211301330 |
EBS | ebs | ebs-<システムコード>-<環境>-[任意の値] | ebs-sampleapp-prd-web-001、ec2-sampleapp-prd-web-002 |
EBS Snapshot | ebs-snapshot | ebs-snapshot-ボリュームID-取得日時(YYYYMMDDhhmm) | ebs-snapshot-vol-xxxxxxxxxxxxxx-202211301330 |
ENI | eni | eni-<システムコード>-<環境>-[任意の値]-[連番] | eni-sampleapp-prd-web、eni-sampleapp-prd-db-001 |
EIP | eip | eip-<システムコード>-<環境>-[任意の値]-[連番] | eip-sampleapp-prd-bastion、eip-sampleapp-prd-nat-001 |
Key Pair | keypair | keypair-<システムコード>-<環境名>-[任意の値]-[連番] | keypair-sampleapp-prd-bastion、keypair-sampleapp-prd-web-001 |
IAM User(コンソールログイン用) | ー | <社員番号>-メールアドレス | xxxx@example.co.jp |
IAM User(アクセスキー発行用) | ー | secret-<システムコード>-<利用環境>-[任意の値] | secret-sampleapp-poc |
IAM Group | iamgroup | iamgroup-<システムコード>-<用途・役割>-[任意の値] | iamgroup-sampleapp-maintenance、iamgroup-sampleapp-admin |
IAM Role | iamrole | iamrole-<エンティティタイプ>-<システムコード>-<環境名>-[任意の値] | iamrole-custom-sampleapp-prd、iamrole-service-sampleapp-prd-for-ec2 |
IAM Policy | iampolicy | iampolicy-<システムコード>-<環境名>-<権限・用途>-[任意の値] | iampolicy-sampleapp-prd-DenyCreateInstance |
SCP | scp | scp-<役割・用途> | scp-DenyCreateAccessKey、scp-ForceEncryption |
OU | ou | <役割・用途> | SSO、Security、LogIntegration |
AWS Budgets(スタンドアロン) | budgets | budgets-<システムコード>-<期間>-[任意の値] | budgets-sampleapp-monthly-all-resources |
AWS Budgets(Managementアカウント) | budgets | budgets-{OU/アカウントID}-<期間>-[任意の値] | budgets-111122223333-monthly、budgets-SalesOU-monthly |
AWS Budgets Reports | budgets-report | budgets-report-<Budgets名> ※Budgets名にはリソースコードは含めない |
budgets-report-sampleapp-monthly-all-resources、budgets-report-111122223333-monthly |
Athena(ワークグループ) | workgroup | workgroup-<データソース>-<クエリ実行したいログ種別>-[任意の値] | workgroup-s3-config、workgroup-s3-cloudtrail |
KMS | kms | kms-<AWSサービス名>-[任意の値]-[連番] | kms-guardduty、kms-s3-001 |
Resource Access Manager | ram | ram-<共有サービス名>-[共有リソース名]-[任意の値]-[連番] | ram-tgw |
AWS Backup Plan | backup-plan | backup-plan-<AWSサービス名>-<リソース>-<取得頻度(日)> | backup-plan-ec2-AMI-7、backup-plan-ebs-snapshot-1 |
CloudFormation StackSets | cfn | cfn-<用途・役割>-[任意の値] | cfn-activate-config、cfn-create-basic-config-rules |
S3 Bucket | s3 | s3-<システムコード>-<環境名>-<用途・役割>-アカウントID | s3-sampleapp-prd-cloudtrail-111122223333 |
S3 LifeCycle Rule | s3-lifecycle | s3-lifecycle-<アクション>-<期限日数>-[任意の値] | s3-lifecycle-delete-365、s3-lifecycle-move-365-to-glacier |
CloudTrail | trail | trail-[任意の値]-<用途・役割> | trail-audit、trail-sampleapp-s3-dataevent |
SNS Topic | sns-topic | sns-topic-<用途・役割> | sns-topic-securityhub-notification |
EventBridge Rules | event-rules | event-rules-<用途・役割> | event-rules-securityhub-notification |
EventBus | eventbus | eventbus-<用途・役割> | eventbus-custom-app |
CloudWatch Logs LogGroup | cw-loggroup | /aws/[サービス名]/[リソース名]/[ログ種別] | /aws/ec2/sampleapp-dev-001/app_log |
CloudWatch Logs LogStream | cw-logstream | /[リソース名]/[パス] | /cw-logstream/var/log/messages/ |
ALB | alb | alb-<システムコード>-<環境>-[連番] | alb-sampleapp-prd、alb-sampleapp-prd-001 |
ALB Target Group | alb-tg | alb-tg-<システムコード>-<環境>-<役割>-[連番] | alb-tg-sampleapp-prd-web-001、alb-tg-sampleapp-prd-web-002 |
Config Aggregator | config-agr | config-agr-<用途・役割> | config-agr-org-aggregation、config-agr-regional-aggregation |
Config Rules | config-rules | config-rules-<役割・用途> | config-rules-RestrictedSSHRDPPorts、config-rules-required-tags |
まとめ
長文でしたがご一読いただき有難うございます。今回はAWSリソースの命名規則について考えてみました。イチから命名規則を考えることは大変だと思いますのでどなたかのお役に立てれば幸いです。
山﨑 翔平 (Shohei Yamasaki) 記事一覧はコチラ
カスタマーサクセス部所属。2019年12月にインフラ未経験で入社し、AWSエンジニアとしてのキャリアを始める。2023 Japan AWS Ambassadors/2023-2024 Japan AWS Top Engineers