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
AWS CloudFormationによる Infrastructure as Codeの実現
Search
HIRA
August 01, 2019
Technology
0
180
AWS CloudFormationによる Infrastructure as Codeの実現
2019.8.1 社内勉強会発表資料
2022.5.21 SlideShareから移行
HIRA
August 01, 2019
Tweet
Share
More Decks by HIRA
See All by HIRA
脱VM!リモートコンテナによる開発
hira
0
810
MQ(メッセージキュー)入門
hira
0
700
マイクロサービス化に向けて
hira
0
150
CI(継続的インテグレーション)
hira
0
81
Other Decks in Technology
See All in Technology
複数サービスを支えるマルチテナント型Batch MLプラットフォーム
lycorptech_jp
PRO
0
320
バイブスに「型」を!Kent Beckに学ぶ、AI時代のテスト駆動開発
amixedcolor
2
540
Generative AI Japan 第一回生成AI実践研究会「AI駆動開発の現在地──ブレイクスルーの鍵を握るのはデータ領域」
shisyu_gaku
0
150
オブザーバビリティが広げる AIOps の世界 / The World of AIOps Expanded by Observability
aoto
PRO
0
360
「全員プロダクトマネージャー」を実現する、Cursorによる仕様検討の自動運転
applism118
21
10k
Autonomous Database - Dedicated 技術詳細 / adb-d_technical_detail_jp
oracle4engineer
PRO
4
10k
20250910_障害注入から効率的復旧へ_カオスエンジニアリング_生成AIで考えるAWS障害対応.pdf
sh_fk2
3
240
Agile PBL at New Grads Trainings
kawaguti
PRO
1
410
AWSを利用する上で知っておきたい名前解決のはなし(10分版)
nagisa53
10
3.1k
Practical Agentic AI in Software Engineering
uzyn
0
100
250905 大吉祥寺.pm 2025 前夜祭 「プログラミングに出会って20年、『今』が1番楽しい」
msykd
PRO
1
710
DDD集約とサービスコンテキスト境界との関係性
pandayumi
3
280
Featured
See All Featured
The Power of CSS Pseudo Elements
geoffreycrofte
77
6k
GitHub's CSS Performance
jonrohan
1032
460k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Designing Experiences People Love
moore
142
24k
Code Reviewing Like a Champion
maltzj
525
40k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
920
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
139
34k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.9k
The Cost Of JavaScript in 2023
addyosmani
53
8.9k
Transcript
AWS CloudFormationによる Infrastructure as Codeの実現 平田憲司 2019.8.1 クラウド・マイクロサービス勉強会(第3回)
自己紹介 平田憲司 • アーキテクト担当 GitHub:@kenzy0727 Qiita: @kj_hira
アジェンダ 1. IaC(Infrastructure as Code)とは 2. プロビジョニングについて 3. AWS CloudFormationのご紹介と実演
4. 今後やりたいこと 5. 困ったこと、注意点
アジェンダ 1.IaC(Infrastructure as Code)とは 2. プロビジョニングについて 3. AWS CloudFormationのご紹介と実演 4.
今後やりたいこと 5. 困ったこと、注意点
IaC(Infrastructure as Code)とは コードでインフラを管理できるようにすることで、自動化・バージョン管 理・テスト・継続的インテグレーションを実現する方法論。 • 仮想マシンやネットワークの設定 • OSのインストール、設定 •
ミドルウェアやアプリケーションのセットアップ、設定 など
とあるサーバ担当者の物語 テスト環境をもう1つ新しく作りたいんだけど
とあるサーバ担当者の物語 確か構築手順書と設計書あるから見れば作れるよ テスト環境をもう1つ新しく作りたいんだけど
とあるサーバ担当者の物語 確か構築手順書と設計書あるから見れば作れるよ テスト環境をもう1つ新しく作りたいんだけど 見たんだけど、あれ更新されてる?最新じゃないよね?
とあるサーバ担当者の物語 確か構築手順書と設計書あるから見れば作れるよ テスト環境をもう1つ新しく作りたいんだけど 見たんだけど、あれ更新されてる?最新じゃないよね? ああ、更新してないね。サーバ直接みてみて。 ・・・
インフラのコード化をはじめるきっかけ インフラ環境もアプリのように簡単にデプロイしたい!
インフラをアプリのようにデプロイするためには・・ • 手順書、サーバドキュメントを元に環境構築する必要がある • ドキュメントがメンテナンスされていない場合は、実環境と乖離状態となる • 変更管理ができていない • アプリケーションのように動作するもの(環境)をソースコードで管理する。 •
インフラに限らずドキュメントを信用しないという前提の上、動作環境を生成するもの をメンテナンスし、変更管理する 同環境の構築が困難
インフラをコード化するメリット • ドキュメントや実環境を見るだけでは分からない複雑な依存関係を管理で き、いつでも生成可能になる • 手作業によるヒューマンエラー回避 • 誰でも実行すれば環境を同じように構築できるため、属人性を排除できる • 変更管理ができる(Gitなどのバージョン管理ツールで管理ができる)
• 共有と展開ができ、引継ぎも容易になる
1. IaC(Infrastructure as Code)とは 2.プロビジョニングについて 3. AWS CloudFormationのご紹介と実演 4. 今後やりたいこと
5. 困ったこと、注意点
プロビジョニングとは 必要に応じてネットワーク・サーバなどのリソースを提供でき るように、準備しておくこと 今回は、実行環境を構築するという意味とします。
代表的なプロビジョニングツール OS・ミドルレイヤ ハード・仮想レイヤ アプリケーションレイヤ AWS CloudFormation、TerraForm Docker? Ansible、Chef 他にも多数のツールがあります
1. IaC(Infrastructure as Code)とは 2. プロビジョニングについて 3.AWS CloudFormationのご紹介と実演 4. 今後やりたいこと
5. 困ったこと、注意点
AWS CloudFormationのご紹介 • AWSリソースを自動構築できるサービス • テンプレートを元に、同じ構成をいくつも自動構築できる • テンプレートのファイル形式は、YAMLまたはJSON※ • テンプレート=スタック単位で構築される
テンプレート スタック VPC サブネット EC2 など ※テンプレートのファイル形式は、好みに分かれるが、コメントがつけられるYAMLがおすすめ。
AWS CloudFormation – テンプレート作成 • AWS コンソール(CloudFormation画面) • CloudFormer •
各種IDE
AWS CloudFormation - テンプレート構成 AWSTemplateFormatVersion: 2010-09-09 Description : sample stack
Parameters: Env: Type: String AllowedValues: - “prd” - “stg” - “dev” Resources: VPC: Type: AWS::EC2::VPC ・・・・ Outputs: OutVPC: Value: !Ref VPC Parameters: スタック作成時のパラメータ Resources: 作成対象のリソース Outputs: テンプレート間で共有する値 他にもあるが、大きく3つの構成となる
AWS CloudFormation - テンプレート構成 AWSTemplateFormatVersion: 2010-09-09 Description : sample stack
Parameters: Env: Type: String AllowedValues: - “prd” - “stg” - “dev” Resources: VPC: Type: AWS::EC2::VPC ・・・・ Outputs: OutVPC: Value: !Ref VPC パラメータ値の指定 Typeに型を定義 AllowedValuesで選択項目を設定することで実行時に選択させること ができる
スタック作成時のパラメータ指定の画面イメージ
AWS CloudFormation - テンプレート構成 AWSTemplateFormatVersion: 2010-09-09 Description : sample stack
Parameters: Env: Type: String AllowedValues: - “prd” - “stg” - “dev” Resources: VPC: Type: AWS::EC2::VPC ・・・・ Outputs: OutVPC: Value: !Ref VPC リソースタイプを指定 下に各種設定のパラメータを指定する
AWS CloudFormation - テンプレート構成 AWSTemplateFormatVersion: 2010-09-09 Description : sample stack
Parameters: Env: Type: String AllowedValues: - “prd” - “stg” - “dev” Resources: VPC: Type: AWS::EC2::VPC ・・・・ Outputs: OutVPC: Value: !Ref VPC Resourcesで作成した情報を他のテンプレートから 参照できるようにするための出力
AWS CloudFormation – デプロイ • AWS コンソール:CloudFormationスタック作成画面 • AWS CLI
デプロイ方法 デプロイの特徴 • エラーを検出するとロールバックされる • 変更分だけを適用できる
実演 - 今回作るもの VPC Availability Zone 1a Private subnet EC2
Instance Availability Zone 1c Private subnet EC2 Instance Auto Scaling group SQS DynamoDB S3 SNS IAM • VPC×1 • ルートテーブル×1 • プライベートサブネット×2 • EC2×2 • セキュリティグループ×1 • AutoScaling×1 • セキュリティポリシー • IAMロール×1 • 各VPCエンドポイント • その他各サービス情報
実演 – スタック作成 1.テンプレート指定 2.スタック詳細の指定(パラメータなど) 3.スタックオプションの指定 4.実行
実演 – スタック変更 1.変更セットの作成 2.差分確認 3.実行
実演 – ドリフト 1.コンソールから設定を直接変更 2.ドリフト検出 3.ドリフト結果を表示
実演 – スタック削除 1.削除する 2.削除確認
1. IaC(Infrastructure as Code)とは 2. プロビジョニングについて 3. AWS CloudFormationのご紹介と実演 4.今後やりたいこと
5. 困ったこと、注意点
今後やりたいこと バージョン管理 CI/CDツール AWS環境 コミット webhook スタック 作成・更新 AWS CLI
ジョブ実行 テンプレート アプリケーションと同じように人の手ではなくCI/CDを通してデプロイしたい。
1. IaC(Infrastructure as Code)とは 2. プロビジョニングについて 3. AWS CloudFormationのご紹介と実演 4.
今後やりたいこと 5.困ったこと、注意点
困ったこと • 学習コストが少々高め ドキュメントに頼るしかなく、慣れるまでが大変。 • 可読性、効率性が悪い YAML、JSONで記述するため、ループが使えない。同じような構成を複製する場 合は行数が多くなるため工夫が必要。 • デバッグが大変
プログラムのようにデバッグできない。エラー内容がわかりずらいというか、出ない場合 さえある。
注意点 • 直接サーバの構成を変えない 必ずコードを直して、コードからデプロイする! ⇒ もし変えてしまった場合は、ドリフト検出して差分をコードに適用して再デプロイする • 他で使用していないか確認してから削除する テンプレート=スタック内であれば依存関係がわかりやすいが、アプリケーションからS3の バケットを利用しているかどうかは調べないとわからない。
他の選択肢 AWS CDK(Cloud Development Kit) プログラム言語(JavaScript, TypeScript, Python, Java, .NETなど)を使ってスタック
作成を実現できる。 もちろんifやループが自由に使える。効率よく実装可能。 CloudFormationができることはほとんどできる。 最近正式リリースされたばかりであるため、実現できないこともあるよう・・ 今後はこちらにシフトしていきたい。 https://github.com/aws/aws-cdk
まとめ • コード化するデメリットも多いですが、それ以上にメリットが高い
本日実演で利用したサンプルコードは、GitHubで公開しています。 https://github.com/kenzy0727/aws-cf-sample