Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
実践!CloudFormation Best Practice
Search
urmot
December 20, 2018
Programming
310
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
実践!CloudFormation Best Practice
urmot
December 20, 2018
More Decks by urmot
See All by urmot
DDDにおける認可の扱いとKotlinにおける実装パターン / authorization-for-ddd-and-kotlin-implement-pattern
urmot
4
1.9k
ログラスを支える設計標準について / loglass-design-standards
urmot
12
3k
ログラスを支える技術的投資の仕組み / loglass-technical-investment
urmot
10
6.3k
実践!CloudFormation Best Practice ~CloudFormationで始める組織改革~
urmot
2
3.6k
CircleCIを導入した話
urmot
0
130
SPA on AWS
urmot
0
250
RDBのログを取る時にDMSを使うという選択肢
urmot
0
180
ベンチャー企業のインフラを運用して学んだ99のこと
urmot
0
1.4k
Other Decks in Programming
See All in Programming
Next.js: The final boss of Web Performance
guaca
0
260
re:Inventに行く前に知っておきたい現地参加のノウハウ
nokomoro3
0
430
AI主導のプログラミング学習アプリを作ってみた
econanringo
0
180
月間100万人のサービス刷新で、 技術選定をHonoに振り切った話
yutobara
8
6.6k
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
1.1k
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
610
Verilogで学ぶCPU自作入門
uyuki234
8
4.1k
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
350
AWSに止められる覚悟してますか?
morizo_1984
2
540
ActionController meets Protocol Buffers
sorah
0
540
GemmaをJevのように使ってみる / Use Gemma like Jev
kishida
5
790
すこし踏み込む CancellationToken
htkym
2
1.7k
Featured
See All Featured
Being A Developer After 40
akosma
92
590k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
400
Scaling GitHub
holman
464
140k
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
270
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
600
Technical Leadership for Architectural Decision Making
baasie
3
600
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
The Cult of Friendly URLs
andyhume
79
7k
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リソースを更新できる みんなが使うテンプレートの完成!?!
おわり