Skip to content

Instantly share code, notes, and snippets.

@ryu1
Last active February 13, 2020 03:16
Show Gist options
  • Select an option

  • Save ryu1/7c3fd8ae864ce9abb24f28295e9c854e to your computer and use it in GitHub Desktop.

Select an option

Save ryu1/7c3fd8ae864ce9abb24f28295e9c854e to your computer and use it in GitHub Desktop.
AWS Tips

https://dev.classmethod.jp/cloud/aws/aws-name-rule/

DevelopersIOproduced byClassmethod キーワードを入力してください AWS Alexa モバイル ビッグデータ サーバーレス Tableau Alteryx イベント 弊社で使っているAWSリソースの命名規則を紹介します

2019年09月04日 城岸直希(27) 30 15 10 はてブ 5 みなさんこんな画面を見たことありませんか??

このような状態は避けるべきです。理由は以下の通り。

各リソースの役割がわかりにくい オペレーションミスが発生しやすい リソース削除などの判断が難しくなる 単純に見栄えが悪い そこで今回は弊社が環境を構築する際によく使う命名規則を紹介したいと思います。 新規でリソースを作成する際に参考にしていただけると嬉しいです。

※AWSアカウントでシステムや環境を分離していたとしても、命名規則を守ったほうがリソースの見通しがよくなります。

リソース名から何を知りたいのかを考える みんさんはリソース名(主にNameタグ)から何を知りたいですか?? 対象のリソースによっても異なりますが、共通で知りたいものは以下になるかと思います。

対象システム 環境(本番、検証、開発) また、リソースによってはこれ以外に知りたい情報もあるはずです。

Subnet、RouteTable ネットワークレイヤー(パブリック、プロテクト、プライベート、など) EC2、IAMRole 種別(アプリケーションサーバー、踏み台サーバー、メールサーバー、など) S3 目的(ログ保管用、静的コンテンツ配信用など) などなど、リソースによって様々です。

どう表現するのかを考える ではこの情報をどのように表現すれば良いでしょうか。

一般的な命名規則としては、キャメルケース、スネークケース、ケバブケースなどがありますが、AWSリソースの命名にはケバブケースがおすすめです。 ※S3のバケット名に大文字またはアンダースコアを含めることができないため

WebACLにはハイフンを利用できないなどの一部例外もありますが、基本的にはどのリソースもケバブケースで作成することができます。

命名規則表 ということで私がよく使う命名規則はこちらになります。

対象システムの名前(sysname) システムで一意となる識別子(例:xxsystem) 環境(env) 本番、検証、開発など(prod/stg/dev) ネットワークレイヤー(nlayer) パブリック、プロテクト、プライベートなど(public/protected/private) 種別(type) アプリケーションサーバー、踏み台サーバー、メールサーバーなど(app/bastion/mail) 目的(use) ログ保管用、静的コンテンツ配信用など(log/contents) また、採用する文字は「半角英数字とハイフンなどの一部記号のみ」とすべきです。安易に特殊文字を利用するとプログラムで処理する際に苦しむことになります。

AWSリソース 命名規則 備考 VPC {sysname}-{env}-vpc Subnet {sysname}-{env}-{nlayer}-subnet-XX XXは連番、AZ毎に分ける RouteTable {sysname}-{env}-{nlayer}-rtb NatGawatayをAZ毎に分ける場合はprotectedのみ連番を付与 InternetGateway {sysname}-{env}-igw ELB {sysname}-{env}-alb/clb インターナルなELBを作成する場合、役割毎に分ける場合はその部分も考慮 TargetGroup {sysname}-{env}-tg 同上 EC2 {sysname}-{env}-{type}-XX IAMRole {sysname}-{env}-{type}-role SecurityGroup {sysname}-{env}-{type}-sg RDS {sysname}-{env}-rds S3 {sysname}-{env}-{use}-{AccountID} S3のリソースは全体で一意にする必要があるためAWSのアカウント番号を付与 このルールを適用すると。。

かなりスッキリしました。また、このような命名にすることで絞り込みなども容易になります。

おまけ タグの使い方 タグにはNameだけではなく、システム名や環境の情報を登録しておくことをお勧めします。

これにより、EnvやSystemNameを指定した柔軟な絞り込みが可能になります。

最後に リソースの名前を適当に設定してもシステムは動きます。ただし、適当に設定することで不要な作業をする機会が増えてしまいます。みなさんそんな無駄なことしたくないですよね??

ということで今一度リソース名を見直してみませんか??その際に本ブログを参考にしていただければ幸いです。

PRもっと安く使いたい 15 10 はてブ 5

180302_採用募集 執筆者プロフィール

城岸直希 について詳しくみる

RANK 27

Exp. 270,273

AWS面白い∩(゚ー゚∩) 開催予定のイベント もっとみる 開催日 2019年09月05日 48 開催予定のイベント 【9/5(木) 東京】AWSのコストとセキュリティをチェック!「AWS Well-Architected Tool」活用術セミナーを開催します

開催日 2019年09月06日 4 開催予定のイベント 【9/6(金) 東京】クラスメソッドの会社説明会を開催します〜札幌・大阪・岡山・福岡・那覇からリモート参加もOK〜

開催日 2019年09月11日 60 開催予定のイベント 【9/11(水)東京】「Sumo Logicハンズオンセミナー 〜ログ収集、監視、分析を触って体感しよう!〜」を開催します

開催日 2019年09月12日 23 開催予定のイベント 【9/12(木)名古屋】AWS事業本部の採用説明会を開催します 〜激速で駆け上がるAWSスペシャリストへの道〜

開催日 2019年09月12日 469 開催予定のイベント 469件のシェア(そこそこ話題の記事) 【9/12(木)名古屋】2年ぶりの開催!サーバーレス・機械学習・ブロックチェーンなど多岐にわたるサービスについて話します!「Developers.IO 2019 in Nagoya」

週間ランキング もっとみる

431件のシェア(そこそこ話題の記事) クラスメソッドにジョインしました シリーズ 事業開発部にジョインした塩谷 (@kwappa) です 記事 2019年09月02日 kwappa 431

390件のシェア(そこそこ話題の記事) lambda シリーズ 【速報】もうアンチパターンとは呼ばせない!!VPC Lambdaのコールドスタート改善が正式アナウンスされました!! Lambda 記事 2019年09月04日 岩田智哉 390

118件のシェア(ちょっぴり話題の記事) ECSやEKSのメトリクスを一括取得するContainer Insightsが一般公開!既存ECSクラスタも追加設定可能に! EKSFargateECS 記事 2019年09月02日 濱田孝治 118

Bonfire Data Analyst #2 に参加してきた ( テーマ:データの可視化 ) #yjbonfire LookerTableau『カスタマーストーリー』を支えるツール特集レポート 記事 2019年09月02日 しんや 47

クラスメソッドにジョインしました シリーズ AWS事業本部コンサルティング部にジョインした西野です 記事 2019年09月02日 西野亘 39

月間ランキング もっとみる

431件のシェア(そこそこ話題の記事) クラスメソッドにジョインしました シリーズ 事業開発部にジョインした塩谷 (@kwappa) です 記事 2019年09月02日 kwappa 431

390件のシェア(そこそこ話題の記事) lambda シリーズ 【速報】もうアンチパターンとは呼ばせない!!VPC Lambdaのコールドスタート改善が正式アナウンスされました!! Lambda 記事 2019年09月04日 岩田智哉 390

118件のシェア(ちょっぴり話題の記事) ECSやEKSのメトリクスを一括取得するContainer Insightsが一般公開!既存ECSクラスタも追加設定可能に! EKSFargateECS 記事 2019年09月02日 濱田孝治 118

83件のシェア(ちょっぴり話題の記事) 【HUGO】爆速で静的Webページ作成してFirebaseにデプロイしてみた 記事 2019年09月01日 me 83

Bonfire Data Analyst #2 に参加してきた ( テーマ:データの可視化 ) #yjbonfire LookerTableau『カスタマーストーリー』を支えるツール特集レポート 記事 2019年09月02日 しんや 47

Amazon Web Services AWS特集 EC2 S3 RDS Lambda VPC IAM ビッグデータ Redshift Tableau Alteryx ランキング Amazon Alexa モバイル サーバーレス セキュリティ 四半期ランキング RSS お問い合わせ AWSに関するご相談 セミナーお知らせメール 会社説明会 運営会社について クラスメソッド株式会社 会社概要 アクセス プライバシーポリシー クッキーポリシー produced by

クラスメソッド株式会社 © Classmethod, Inc. All rights reserved.

AWSTemplateFormatVersion: '2010-09-09'
Description: "This is Template."
Parameters:
Stage:
Type: String
AllowedValues:
- Development # 開発環境
- Staging # ステージング環境
- Production # 本番環境
Default: Development
Description: "Specify environment for building"
# https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/conditions-section-structure.html
Conditions:
IsProduction: !Equals [ !Ref Stage, Production ]
IsStaging: !Equals [ !Ref Stage, Staging ]
IsDevelopment: !Equals [ !Ref Stage, Development ]
Mappings:
Stages:
Development:
Suffix: "-dev" # !FindInMap [ Stages, !Ref Stage, Suffix]
Staging:
Suffix: "-stg"
Production:
Suffix: ""
Resources:
Outputs:
PROFILE=
S3BUCKET=
STACKNAME=
.PHONY: package
package: clean
aws cloudformation package --s3-bucket $(S3BUCKET) --template-file ./template.yaml --output-template-file ./packaged.yaml --profile $(PROFILE)
.PHONY: deploy-development
deploy-development: package
aws cloudformation deploy --template-file ./packaged.yaml --stack-name $(STACKNAME)-Development --parameter-overrides Stage=Development --profile $(PROFILE) --capabilities CAPABILITY_NAMED_IAM
.PHONY: deploy-staging
deploy-staging: package
aws cloudformation deploy --template-file ./packaged.yaml --stack-name $(STACKNAME)-Staging --parameter-overrides Stage=Staging --profile $(PROFILE) --capabilities CAPABILITY_NAMED_IAM
.PHONY: deploy-production
deploy-production: package
aws cloudformation deploy --template-file ./packaged.yaml --stack-name $(STACKNAME)-Production --parameter-overrides Stage=Production --profile $(PROFILE) --capabilities CAPABILITY_NAMED_IAM
.PHONY: clean
clean:
rm -rf ./packaged.yaml
ENVIRONMENT=development
STACKNAME=
PROFILE=
S3_BUCKET=
S3_PREFIX=
ifeq ($(ENVIRONMENT), development)
PROFILE=
S3_BUCKET=
S3_PREFIX=cloudformation/dev/$(STACKNAME)
endif
ifeq ($(ENVIRONMENT), staging)
PROFILE=
S3_BUCKET=
S3_PREFIX=cloudformation/stg/$(STACKNAME)
endif
ifeq ($(ENVIRONMENT), production)
PROFILE=
S3_BUCKET=
S3_PREFIX=cloudformation/prod/$(STACKNAME)
endif
.PHONY: default
default: deploy
.PHONY: package
package: clean
aws cloudformation package --s3-bucket $(S3_BUCKET) --s3-prefix $(S3_PREFIX) --template-file ./template.yaml --output-template-file ./packaged.yaml --profile $(PROFILE)
.PHONY: deploy
deploy: package
aws cloudformation deploy \
--template-file ./packaged.yaml \
--stack-name $(STACKNAME) \
--s3-prefix $(S3_PREFIX) \
--parameter-overrides \
Environment=$(ENVIRONMENT) \
--profile $(PROFILE) --capabilities CAPABILITY_NAMED_IAM
.PHONY: clean
clean:
rm -rf ./packaged.yaml
.PHONY: init
init:
code --install-extension amazonwebservices.aws-toolkit-vscode
code --install-extension kddejong.vscode-cfn-lint
.PHONY: desc
desc:
aws cloudformation describe-stack-events --stack-name $(STACKNAME) --profile $(PROFILE) | grep "FAILED" -B 10 -A 10
.PHONY: delete
delete:
aws cloudformation delete-stack --stack-name $(STACKNAME) --profile $(PROFILE)
aws cloudformation wait stack-delete-complete --stack-name $(STACKNAME) --profile $(PROFILE)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment