Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
実践!CloudFormation Best Practice
Search
urmot
December 20, 2018
Programming
0
220
実践!CloudFormation Best Practice
urmot
December 20, 2018
Tweet
Share
More Decks by urmot
See All by urmot
DDDにおける認可の扱いとKotlinにおける実装パターン / authorization-for-ddd-and-kotlin-implement-pattern
urmot
4
1.1k
ログラスを支える設計標準について / loglass-design-standards
urmot
12
2.8k
ログラスを支える技術的投資の仕組み / loglass-technical-investment
urmot
10
6k
実践!CloudFormation Best Practice ~CloudFormationで始める組織改革~
urmot
2
3.4k
CircleCIを導入した話
urmot
0
80
SPA on AWS
urmot
0
200
RDBのログを取る時にDMSを使うという選択肢
urmot
0
130
ベンチャー企業のインフラを運用して学んだ99のこと
urmot
0
1.2k
Other Decks in Programming
See All in Programming
オープンセミナー2025@広島LT技術ブログを続けるには
satoshi256kbyte
0
110
レガシープロジェクトで最大限AIの恩恵を受けられるようClaude Codeを利用する
tk1351
2
490
[FEConf 2025] 모노레포 절망편, 14개 레포로 부활하기까지 걸린 1년
mmmaxkim
0
790
CSC305 Summer Lecture 05
javiergs
PRO
0
100
WebAssemblyインタプリタを書く ~Component Modelを添えて~
ruccho
1
880
20250808_AIAgent勉強会_ClaudeCodeデータ分析の実運用〜競馬を題材に回収率100%の先を目指すメソッドとは〜
kkakeru
0
200
tool ディレクティブを導入してみた感想
sgash708
1
150
バイブコーディングの正体——AIエージェントはソフトウェア開発を変えるか?
stakaya
5
1k
CEDEC2025 長期運営ゲームをあと10年続けるための0から始める自動テスト ~4000項目を50%自動化し、月1→毎日実行にした3年間~
akatsukigames_tech
0
140
画像コンペでのベースラインモデルの育て方
tattaka
3
1.8k
Nuances on Kubernetes - RubyConf Taiwan 2025
envek
0
180
KessokuでDIでもgoroutineを活用する / Go Connect #6
mazrean
0
110
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
61k
YesSQL, Process and Tooling at Scale
rocio
173
14k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
30
9.6k
A designer walks into a library…
pauljervisheath
207
24k
Statistics for Hackers
jakevdp
799
220k
Being A Developer After 40
akosma
90
590k
Imperfection Machines: The Place of Print at Facebook
scottboms
268
13k
Embracing the Ebb and Flow
colly
87
4.8k
How GitHub (no longer) Works
holman
315
140k
The Invisible Side of Design
smashingmag
301
51k
Gamification - CAS2011
davidbonilla
81
5.4k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Transcript
実践! CloudFormation Best Practice ~設計編~ レバレジーズ株式会社 村本 雄太 2018/12/19
目次 • 自己紹介 • 背景 • 解説!CloudFormation Best Practice •
実践!CloudFormation Best Practice • まとめ
自己紹介.yaml Name: 村本 雄太 BelongsTo: レバレジーズ株式会社: SRE Team Tags: -
新卒2年目 - いんふらえんじにあ
自己紹介.png
自己紹介.png
自己紹介.png
自己紹介.png
背景
背景 CloudFormationテンプレートを管理するのにつかれた
CloudFormationテンプレートが肥大化 どこに何を書けばよいかわからない そして誰も使わなくなる... 背景 CloudFormationテンプレートを管理するのにつかれた
誰も使わないテンプレートじゃなくて みんなが使うものを作ろう!
背景
AWS CloudFormation Best Practice を実践しよう!
解説!AWS CloudFormation Best Practice by https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/best-practices.html
解説!AWS CloudFormation Best Practice 1. ライフサイクルと所有権でスタックを整理 2. クロススタック参照を利用して共通リソースをエクスポート 3. ネストされたスタックを利用して共通テンプレートパターンを再利用
4. テンプレートを再利用して複数環境にスタックを複製する
1. ライフサイクルと所有権でスタックを整理
解説!CloudFormation Best Practice ライフサイクルと所有権によるStackの整理 • Stackを分ける基準についての項目 • ライフサイクルと所有権という概念でStackを分ける • 他リソースに影響を与えずリソースセットを変更可能
ライフサイクルとは
解説!CloudFormation Best Practice ライフサイクルが同じリソースはまとめて管理しよう • AWSリソースのライフサイクルのこと • テンプレートの変更による影響を閉じられる • Point:
AWSリソースの死に際を意識する ◦ あるAWSリソースを削除する時に同時に削除されるべきものを纏める
解説!CloudFormation Best Practice 例: 期間限定のキャンペーン用のサーバをつくる Campaign EC2 Campaign ELB WebSite
ELB WebSite EC2 S3 RDS
解説!CloudFormation Best Practice 例: 期間限定のキャンペーン用のサーバをつくる Campaign EC2 Campaign ELB WebSite
ELB WebSite EC2 S3 RDS キャンペーン終了後 使ったリソースを 削除したい
解説!CloudFormation Best Practice 例: 期間限定のキャンペーン用のサーバをつくる Campaign EC2 Campaign ELB WebSite
ELB WebSite EC2 S3 RDS キャンペーン終了後 使ったリソースを 削除したい
解説!CloudFormation Best Practice 例: 期間限定のキャンペーン用のサーバをつくる Campaign EC2 Campaign ELB WebSite
ELB WebSite EC2 S3 RDS キャンペーン終了後 使ったリソースを 削除したい キャンペーンでS3 使ってたっけ?
解説!CloudFormation Best Practice
解説!CloudFormation Best Practice 解決策: キャンペーン用のStackを別に作成する Campaign EC2 Campaign ELB WebSite
ELB WebSite EC2 S3 RDS Campaign ELB Campaign EC2 S3 WebSite ELB WebSite EC2 S3 RDS
解説!CloudFormation Best Practice 例: 期間限定のキャンペーン用のサーバをつくる Campaign ELB Campaign EC2 S3
WebSite ELB WebSite EC2 S3 RDS キャンペーン終了は キャンペーンのStack を削除するだけ
解説!CloudFormation Best Practice 解決策: キャンペーン用のStackを別に作成する Campaign ELB Campaign EC2 S3
WebSite ELB WebSite EC2 S3 RDS キャンペーン終了は キャンペーンのStack を削除するだけ キャンペーンリソースが 削除された事による影 響を閉じられる
所有権とは
解説!CloudFormation Best Practice 所有権が異なるリソースは分けて管理しよう • AWSリソースの所有権のこと • AWSリソースを誰が管理すべきかという観点で考える • 各チームのリソース変更にかかるコストを減らせる
• テンプレートの柔軟な変更が可能となる
解説!CloudFormation Best Practice 例: DBチームとWebチームで運用されているサービス EC2 ELB RDS Parameter Groups
Security Group Security Group
DBチーム: RDS SecurityGroup を変更したい 解説!CloudFormation Best Practice 例: DBチームとWebチームで運用されているサービス EC2
ELB RDS Parameter Groups Security Group Security Group
Webチーム: Web SecurityGroup を変更したい 解説!CloudFormation Best Practice 例: DBチームとWebチームで運用されているサービス EC2
ELB RDS Parameter Groups Security Group Security Group
更新タイミング の調整 影響範囲の確認 解説!CloudFormation Best Practice 例: DBチームとWebチームで運用されているサービス EC2 ELB
RDS Parameter Groups Security Group Security Group
解説!CloudFormation Best Practice
解説!CloudFormation Best Practice 解決策: WebチームとDBチームでStackを分ける EC2 ELB RDS Parameter Groups
Security Group Security Group EC2 ELB RDS Security Group Parameter Groups Security Group
解説!CloudFormation Best Practice 解決策: WebチームとDBチームでStackを分ける EC2 ELB RDS Security Group
Parameter Groups Security Group 更新タイミング の調整は不要 影響範囲もStack内 で確認できればOK
解説!CloudFormation Best Practice • SOA = Service Oriented Architecture ◦
ServiceをNetwork上で連携させてシステムの全体構成をしていく ◦ Service: 業務上の一処理 • 多層アーキテクチャ ◦ アプリケーションを複数の層に分け, 独立したモジュールとして開発 ◦ 各層はその直下の層に依存する おまけ: 詳細なStackの分け方は多層アーキテクチャとSOAが使える(らしい)
2. クロススタック参照を利用して共有リソースを エクスポート
解説!CloudFormation Best Practice クロススタック参照で共有リソースをエクスポートする • 別Stackのリソースの値を参照できる • 参照されている値の変更は不可能 ◦ 依存関係ができるので利用する際は注意が必要
• ハードコードするくらいならクロススタック参照
3. ネストされたスタックを使用して 共通テンプレートパターンを再利用する
• StackとTemplateは別の概念と認識する • Template: 呼び出す際に値を注入して利用 • Stack: AWSリソースを作るための情報を全て持つ • テンプレートが膨大になることを防ぐ
◦ どこに何を書けばよいかわからない状態を防げる 解説!CloudFormation Best Practice ネストされたスタックを使用して共通パターンを再利用する
• StackもCloudFormationで作ることができる • 共通したパターンを別Templateに抽出する • 抽出したTemplateからStackを作成する • ネストされたStackの変更は参照先に伝搬する 解説!CloudFormation Best
Practice AWS::CloudFormation::Stackを使う
解説!CloudFormation Best Practice ネストされたStackを利用するメリット • コピペを減らせる • Stackをコンポーネントに閉じることができる • コンポーネントの保守を分担できる(かも)
4. テンプレートを再利用して 複数環境にスタックを複製する
解説!CloudFormation Best Practice テンプレートを再利用して複数環境にスタックを複製する • CloudFormationは条件式を使った制御が可能 • 開発、テスト、本番の環境を条件式で制御する
• Stackは極力簡潔に書きたい • 条件式による制御をいれると複雑になってしまう • あと、各環境で差分が結構ありそう ◦ 冗長化をしない ◦ 低スペックにする
◦ テスト環境は社内アクセスのみ 解説!CloudFormation Best Practice 個人的な疑問点
実践!CloudFormation Best Practice
実践!CloudFormation Best Practice ディレクトリ構成: StackとTemplateを分ける
• ライフサイクルと所有権によってStackを分ける • 再利用されないことを前提とする • AWSリソースを作るために必要な情報を全て記述 ◦ CloudFormationで管理していないものはここでハードコードする 実践!CloudFormation Best
Practice Stacks: AWSリソースを作るために必要な情報を全て記述する
• 共通したライフサイクルと所有権を持つリソース郡 • <Service>間の連携にはクロススタック参照を用いる • SOAの考えが利用できる部分(かもしれない) 実践!CloudFormation Best Practice <Service>:
ある機能を構成するAWSリソース郡をまとめたもの
• 各層のリソースは類似したライフサイクルと所有権を持つ • 各層はその直下の層に依存する • 各層はネストされたStackとして依存解決を行う 実践!CloudFormation Best Practice <Layer>:
多層アーキテクチャでいう独立したモジュール
• <Service>以下のディレクトリには必ずmaster.yamlを置く • 各層の依存解決を担う • クロススタック参照で使う値のエクスポートも行う 実践!CloudFormation Best Practice master.yaml:
各層の依存解決を行うCloudFormationテンプレート
• 再利用されることを前提に記述する • ParametersやConditionsを使用して制御を行う • よく使う設定をここにまとめる 実践!CloudFormation Best Practice Templates:
共通パターンのテンプレート郡
まとめ
CloudFormation Best Practiceを実践する まとめ 所有者が明確になり、 少ない操作で安全にAWSリソースを更新できる みんなが使うテンプレートの完成!?!
おわり