SlideShare a Scribd company logo
IaC事始め
Infrastructure as Code
やってみる?
AWS Div. Taishi Kajiwara
2Developers.IO 2019 FUKUOKA
この資料は、
■Developers.IO 2019 FUKUOKA
IaC事始め 〜Infrastructure as Codeやってみる?~]
の登壇資料です
スライドは後で入手することが出来ますので
発表中の内容をメモする必要はありません。
写真撮影をする場合は
フラッシュ・シャッター音が出ないようにご配慮ください
自己紹介
• AWS事業本部 コンサルティング部
ソリューションアーキテクト
• 福岡オフィス
• 好きなサービス(Codeシリーズ, DeepRacer)
梶原大使(@ambasad)
本日話すこと 5
IaCって何?
IaCやってみる?
•Cloud Formation
IaCの今後
•AWS CDK
本日話さないこと(ちょっとは話すかも) 6
- Terraform
- CloudFormation
- マクロ
- CDKの詳細解説
7
GOAL 8
IaCって何?
→ IaCをやりたくなる
IaCもうやってるよ!
→ テクニック、ヒント
IaC って何?
Wikipedia 10
Infrastructure as Code(IaC) はコンピューティング・インフラ
(プロセス、ベアメタルサーバー、仮想サーバーなど)の構成管
理・機械処理可能な定義ファイルの設定・プロビジョニングを自動
化するプロセスである。
https://ja.wikipedia.org/wiki/Infrastructure_as_Code
手作業 11
• EC2インスタンスを作成するとき
CLI / Script 12
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpc-subnets-commands-example.html
• AWS CLI を使用して IPv4 VPC とサブネットを作成する
ステップ 1: VPC とサブネットを作成する
$ aws ec2 create-vpc --cidr-block 10.0.0.0/16
ステップ2: サブネットをパブリックにします。
$ aws ec2 create-internet-gateway
$ aws ec2 attach-internet-gateway --vpc-id vpc-2f09a348 --
$ internet-gateway-id igw-1ff7a07b
ステップ 3: サブネット内にインスタンスを起動する
….
課題 13
• 手作業によるヒューマンエラー
• 属人化
• ドキュメント不足
• 再利用できない
• 依存関係がわからない
• 不要になった際のリソースの消し忘れ
ー> 同じ構成のインフラが構築できない
ー> 引き継げない
14
Infrastructure as Code
どこからIaC? 15
Code
•コードの記載
Version
Control
•コードの管理
Code Review
•コードの更新確認
deploy
•リソースの作成、更新
ここまでやれば 16
•自動化(リソース作成)
•レビュー/テストの実施
•再利用可能
•依存関係の明確化
•不要リソースの削除
•コスト減
•構築速度改善
課題解決+α
17
デメリット
デメリット 18
デメリット ツールの習熟が必要 CloudFormation
Terraform
Ansible etc..
ツールがサポートしていな
いリソース、プロパティが
ある
新しいサービス
細かい設定
検証作業が必要
(でもこれはポチポチよりはまし)
プログラムミス
予期しないリソース変更
完全な自動化
まではちょっと大変
自動化環境
の環境構築の自動化
19
IaC 事始め
AWS 20
Code
•コードの記載
Version
Control
•コードの管理
Code Review
•コードのレビュー
Integrage
•リソースの作成(更新)
Code
•CloudFormation
Version
Control
•CodeCommit
•CloudFormation
Code Review
•CodePipeline(確認)
•CloudFormation
Integrage
•CodePipeline/CodeBuild
->CloudFormation
21
AWS CloudFormation
AWS CloudFormation 22
https://d1.awsstatic.com/webinars/jp/pdf/services/20181128-AWS-BlackBelt-CloudFormation.pdf
サポートされている AWS リソースタイプ(一部) 23
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html
Alexa Skill AmazonMQ
Amplify
Console
API Gateway App Mesh
AppStream
2.0
AppSync Athena
AWS Auto
Scaling
Amazon EC2
Auto Scaling
AWS Backup
AWS Batch AWS Budgets
Certificate
Manager
AWS Cloud9
CloudFormatio
n
CloudFront
AWS Cloud
Map
CloudTrail CloudWatch CodeBuild CodeCommit
CodeDeploy CodePipeline CodeStar
Amazon
Cognito
Config
AWS Data
Pipeline
DAX
Directory
Service
DLM DMS
Amazon
DocumentDB
DynamoDB EC2 Amazon ECR ECS EFS EKS ElastiCache Elasticsearch
Elastic
Beanstalk
Elastic Load
Balancing
Amazon EMR
FSx GameLift AWS Glue GuardDuty IAM Inspector IoT
Amazon
Kinesis
KinesisAnalyti
cs
Amazon
Kinesis Data
Firehose
KMS
LakeFormatio
n
Lambda
ManagedBlock
chain
MediaLive MediaStore MSK
Amazon
Neptune
OpsWorks Pinpoint PinpointEmail QLDB
RAM RDS
Amazon
Redshift
RoboMaker Route 53 Amazon S3
Amazon
SageMaker
Secrets
Manager
Service
Catalog
SecurityHub SES
Amazon
SimpleDB
Amazon SNS Amazon SQS
Step
Functions
Systems
Manager
AWS SFTP WAF WorkSpaces
24
https://d1.awsstatic.com/webinars/jp/pdf/services/20181128-AWS-BlackBelt-CloudFormation.pdf
25
Hello CloudFormation
26
やってみる
3行テンプレート 27
Resources:
S3Bucket:
Type: AWS::S3::Bucket
YAML
1行テンプレート 28
{"Resources":{"S3Bucket":{"Type":"AWS::S3::Bucket"}}}
JSON
スタックの作成 29
https://us-west-2.console.aws.amazon.com/cloudformation/home?region=us-west-2#/stacks?filteringText=&filteringStatus=active&viewNested=true&hideStacks=false
スタックの作成 30
デザイナーで表示 31
テンプレートの検証
スタックの作成 32
スタックの作成 33
34
35
スタックの作成 36
スタックの作成 37
スタックの作成 38
スタックの作成 39
スタックの作成 40
IaC事始め Infrastructure as Code やってみる?
IaC事始め Infrastructure as Code やってみる?
IaC事始め Infrastructure as Code やってみる?
44
更新してみる
テンプレート更新 45
Resources:
S3Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: mys3bcuket-q6eqw
VersioningConfiguration:
Status: Suspended
YAML
バケット名
バージョニング:無効
IaC事始め Infrastructure as Code やってみる?
IaC事始め Infrastructure as Code やってみる?
IaC事始め Infrastructure as Code やってみる?
IaC事始め Infrastructure as Code やってみる?
IaC事始め Infrastructure as Code やってみる?
置換がTrue の場合はリソースが置換されます
削除&再作成
IaC事始め Infrastructure as Code やってみる?
IaC事始め Infrastructure as Code やってみる?
54
設定を手で勝手に変えてみた
IaC事始め Infrastructure as Code やってみる?
56
設定変更検出してみた
IaC事始め Infrastructure as Code やってみる?
IaC事始め Infrastructure as Code やってみる?
スタックの作成 59
IaC事始め Infrastructure as Code やってみる?
IaC事始め Infrastructure as Code やってみる?
62
ちょっとコードっぽくしてみる
63
https://d1.awsstatic.com/webinars/jp/pdf/services/20181128-AWS-BlackBelt-CloudFormation.pdf
テンプレート更新 64
AWSTemplateFormatVersion: 2010-09-09
Description: S3 Bucket Create
Parameters:
BucketName:
Type: String
AllowedPattern: "[A-Za-z0-9-]+"
Description: Enter BuckeName
Versioning:
Type: String
Default: "Disabled"
AllowedValues: ["Enabled", "Disabled"]
Description: Enter Versioning Enable
Mappings:
VersioningMap:
"Enabled":
"VersioningStatus": "Enabled"
"Disabled":
"VersioningStatus": "Suspended"
Resources:
S3Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Sub '${BucketName}-${AWS::AccountId}'
VersioningConfiguration:
Status: !FindInMap [ VersioningMap, !Ref Versioning, VersioningStatus]
YAML
テンプレート更新(前半部分) 65
AWSTemplateFormatVersion: 2010-09-09
Description: S3 Bucket Create
Parameters:
BucketName:
Type: String
AllowedPattern: "[A-Za-z0-9-]+"
Description: Enter BuckeName
Versioning:
Type: String
Default: "Disabled"
AllowedValues: ["Enabled", "Disabled"]
Description: Enter Versioning Enable
YAML
バケット名を入力できるように
バージョニング有無を選択でき
るように
テンプレート更新(後半部分) 66
Mappings:
VersioningMap:
"Enabled":
"VersioningStatus": "Enabled"
"Disabled":
"VersioningStatus": "Suspended“
Resources:
S3Bucket:
Type: AWS::S3::Bucket
DeletionPolicy: Retain
Properties:
BucketName: !Sub '${BucketName}-${AWS::AccountId}'
VersioningConfiguration:
Status: !FindInMap [ VersioningMap, !Ref Versioning, VersioningStatus]
YAML
バージョニングの有無を変換
入力した値を使用する
アカウントIDを追加してみる
Mapした値を使用
IaC事始め Infrastructure as Code やってみる?
IaC事始め Infrastructure as Code やってみる?
IaC事始め Infrastructure as Code やってみる?
IaC事始め Infrastructure as Code やってみる?
IaC事始め Infrastructure as Code やってみる?
IaC事始め Infrastructure as Code やってみる?
IaC事始め Infrastructure as Code やってみる?
74
コンソールの手作業もやめたい
コンソールの手作業もやめたい 75
•テンプレートをコードとして扱う
•リポジトリに登録
•コミットを検出
•テンプレートのチェック
•スタックを作成/更新
CI/CDの導入
76
うちのCFnでかいんだけど
うちのCFnでかいんだけど 77
https://d1.awsstatic.com/webinars/jp/pdf/services/20181128-AWS-BlackBelt-CloudFormation.pdf
78
CloudFormationのかゆいところ
かゆいところ 79
- CloudFormation
- ツールがサポートしていないリソースがあるとき
- 外部のリソースを使うとき
- 繰り返し
- 条件分岐
- マルチリージョンで複製したい
80
これはやめとけ
81
- IaCで管理していない既存の環境をCloudFormationで更新する
82
- IaCで管理していない環境をCloudFormationで更新する
のではなく、クラウドの利点を生かして、
サクッと新しい環境を作成して、切り替えましょう
- 既存の環境を参考にCloudFormationで新規作成してIaCで管理する
83
テンプレートサンプル紹介
AWS 公式サンプルテンプレート 84
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest
/UserGuide/cfn-sample-templates.html
awslabs 85
https://github.com/awslabs/aws-cloudformation-templates
Developers.IO CloudFormation 特集 86
https://dev.classmethod.jp/referencecat/aws-cloudformation/
CloudFormation一撃 87
https://dev.classmethod.jp/cloud/aws/
cloudformation-guardduty-lambda-sns-
publish/
https://dev.classmethod.jp/cloud/aws/
codepipeline-s3-deploy-cfn-web/
88
IaCの今後(※願望含む)
IaCのアプローチ (Wikipedia) 89
宣言型プログラミング(機能的)、命令型プログラミング(手続き的)、とインテリジェント(環境
認識)の3つのIaCアプローチがある。それらの違いは「何」「どのように」と「なぜ」の違いと同じ
である。[3]
宣言型プログラミング(機能的)は「何」
最終的なターゲット設定が何であるべきかに焦点を当てている。
•目的の様子(所望の状態?)を定義すると、システムはその様子を達成するために必要な何かを実行
する。
命令型プログラミング(手続き的)は「どのように」
最終的なターゲット設定を満たすために、インフラがどのように変化すべきかに焦点を当てている。
•目的の様子で終了するために、適切な順序で実行する必要があるコマンドを定義する。
インテリジェント(環境認識)は「なぜ」
同じインフラストラクチャで実行されている複数のアプリケーションの全ての相互関係と依存性を考
慮し、最終的なターゲット設定が、特定の方法による理由に焦点を当てている。
•相互依存(共依存)アプリケーションに影響を与えないように、システムは起こる必要がある何かを
処理する前に、目的の状態を決定する。
環境を意識した状態がIaCの次世代である。 https://ja.wikipedia.org/wiki/Infrastructure_as_Code
直近 90
- CloudFormation
- (ここは願望なのでトークオンリー)
- CloudFormer (β)
- Roadmap
https://github.com/aws-cloudformation/aws-cloudformation-coverage-roadmap/projects/1
91
- Roadmap
https://github.com/aws-cloudformation/aws-cloudformation-coverage-roadmap/projects/1
92
- AWS CDK
- AWS CDK自体はTypeScriptで実装
- .Net, Java(β)などで記述、呼び出せる。
- CFnに比べ記述が少なくて済む(デフォルトパターンの充実)
- 条件分岐
- 繰り返し
93
AWS CDK
94
やってみる(本日2度目)
cdk bootstrap 95
TypeScript でCDKを使ってAWS リソースを作成します。
最初にやる事
Bootstrap
VPC
AWS Cloud
Availability Zone 1
Auto Scaling group
Availability Zone 2
NAT Gateway NAT Gateway
Instance InstanceAmazon EC2 Auto Scaling
Application Load Balancer
コードを記述(index.ts)
IaC事始め Infrastructure as Code やってみる?
IaC事始め Infrastructure as Code やってみる?
cdk synth 99
$cdk synth
CDKの内部で使用するCloudFormation
テンプレートの出力/確認
IaC事始め Infrastructure as Code やってみる?
省略… 500行以上あります。
cdk deploy 102
$cdk deploy リソースのデプロイ
cdk destroy 103
$cdk destroy リソースの削除
まとめ
•Infrastructure as Code
•コード化することで、ミスや属人性を排除し、環境構築を自動化する取り組み
IaCってなに?
•AWS CloudFormationの紹介
•コードの管理、デプロイ、差分検出
IaCやってみる
•手続き的なアプローチ、インテリジェント(環境認識)なアプローチ
•AWS CDK 概要
IaCの今後
105
GOAL 106
- IaCってなに?
-> IaCをちょっとやりたくなりました?
- IaCもうやってるよ!
-> なにか1つでもヒントがありましたでしょうか?
- IaCの分野はあまり詳しくはないのですが。
-> Talk to the Speaker!
107
もっといろんなIaCが
やりたい!
We are hiring!
ぜひクラスメソッドへ。
AWS事業本部は
AWSエンジニアを募集しています
ご
清
聴
あ
り
が
と
う
ご
ざ
い
ま
し
た

More Related Content

PDF
実環境にTerraform導入したら驚いた
PDF
AWS Black Belt Online Seminar AWS CloudFormation アップデート
PPTX
分散トレーシングAWS:X-Rayとの上手い付き合い方
PDF
Amazon Kinesis Familyを活用したストリームデータ処理
PDF
AWS Black Belt Online Seminar AWS Direct Connect
PDF
Infrastructure as Code (IaC) 談義 2022
PDF
20200526 AWS Black Belt Online Seminar AWS X-Ray
PDF
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介
実環境にTerraform導入したら驚いた
AWS Black Belt Online Seminar AWS CloudFormation アップデート
分散トレーシングAWS:X-Rayとの上手い付き合い方
Amazon Kinesis Familyを活用したストリームデータ処理
AWS Black Belt Online Seminar AWS Direct Connect
Infrastructure as Code (IaC) 談義 2022
20200526 AWS Black Belt Online Seminar AWS X-Ray
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介

What's hot (20)

PDF
20191029 AWS Black Belt Online Seminar Elastic Load Balancing (ELB)
PDF
20190326 AWS Black Belt Online Seminar Amazon CloudWatch
PDF
20211203 AWS Black Belt Online Seminar AWS re:Invent 2021アップデート速報
PDF
20190731 Black Belt Online Seminar Amazon ECS Deep Dive
PPTX
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
PDF
20191009 AWS Black Belt Online Seminar Amazon GameLift
PDF
マルチテナント化で知っておきたいデータベースのこと
PDF
AWS Black Belt Online Seminar 2017 Amazon DynamoDB
PDF
20190806 AWS Black Belt Online Seminar AWS Glue
PDF
20200826 AWS Black Belt Online Seminar AWS CloudFormation
PDF
PostgreSQLアンチパターン
PDF
20200721 AWS Black Belt Online Seminar AWS App Mesh
PDF
AWS Black Belt Online Seminar 2017 Amazon Kinesis
PDF
20191002 AWS Black Belt Online Seminar Amazon EC2 Auto Scaling and AWS Auto S...
PDF
AWS Black Belt Online Seminar 2018 AWS Well-Architected Framework
PDF
20191105 AWS Black Belt Online Seminar Amazon Route 53 Hosted Zone
PDF
AWS Black Belt Techシリーズ Amazon EBS
PDF
DynamoDBの初心者に伝えたい初めて触るときの勘所
PDF
NetflixにおけるPresto/Spark活用事例
PDF
AWS Black Belt Tech シリーズ 2015 - AWS Data Pipeline
20191029 AWS Black Belt Online Seminar Elastic Load Balancing (ELB)
20190326 AWS Black Belt Online Seminar Amazon CloudWatch
20211203 AWS Black Belt Online Seminar AWS re:Invent 2021アップデート速報
20190731 Black Belt Online Seminar Amazon ECS Deep Dive
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
20191009 AWS Black Belt Online Seminar Amazon GameLift
マルチテナント化で知っておきたいデータベースのこと
AWS Black Belt Online Seminar 2017 Amazon DynamoDB
20190806 AWS Black Belt Online Seminar AWS Glue
20200826 AWS Black Belt Online Seminar AWS CloudFormation
PostgreSQLアンチパターン
20200721 AWS Black Belt Online Seminar AWS App Mesh
AWS Black Belt Online Seminar 2017 Amazon Kinesis
20191002 AWS Black Belt Online Seminar Amazon EC2 Auto Scaling and AWS Auto S...
AWS Black Belt Online Seminar 2018 AWS Well-Architected Framework
20191105 AWS Black Belt Online Seminar Amazon Route 53 Hosted Zone
AWS Black Belt Techシリーズ Amazon EBS
DynamoDBの初心者に伝えたい初めて触るときの勘所
NetflixにおけるPresto/Spark活用事例
AWS Black Belt Tech シリーズ 2015 - AWS Data Pipeline
Ad

Similar to IaC事始め Infrastructure as Code やってみる? (20)

PDF
Spark Streaming on AWS -S3からKinesisへ-
PDF
仮想通貨取引所 bitbank の IaC の導入と実践
PDF
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
PDF
[AKIBA.AWS] VPCをネットワーク図で理解してみる
PDF
AWS CloudFormationによるInfrastructure as Codeの実現
PDF
JAWS DAYS 2015
PDF
サーバーワークス re:invent_2016~新サービス・アップデート紹介~
PDF
AWSクラウドデザインパターン(CDP) - コンテンツ配信編 -
PPTX
Qlik TECHTALK Qlik Cloud 日本リージョン開設!テナント作成と移行方法を解説
PDF
CloudFormation/SAMのススメ
PDF
Develipers.IO 2016 E-1 「AWS Configを使ったAWS環境の見える化」
PDF
JAWSUG20180925
PDF
JAWS-UG静岡 #1 Introduction to AWS SDK for Ruby
PDF
[Microsoft Tech Summit 2018] Azure Machine Learning サービスと Azure Databricks で実...
PDF
de:code 2019 Cloud トラック 総まとめ!
PDF
Azure IaaS update (2018年6月~8月 発表版)
PDF
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
PDF
Developers.IO 2019 Effective Datalake
PDF
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
PPTX
アウトプットはスキルアップもするしトクもする
Spark Streaming on AWS -S3からKinesisへ-
仮想通貨取引所 bitbank の IaC の導入と実践
AngularとSpring Bootで作るSPA + RESTful Web Serviceアプリケーション
[AKIBA.AWS] VPCをネットワーク図で理解してみる
AWS CloudFormationによるInfrastructure as Codeの実現
JAWS DAYS 2015
サーバーワークス re:invent_2016~新サービス・アップデート紹介~
AWSクラウドデザインパターン(CDP) - コンテンツ配信編 -
Qlik TECHTALK Qlik Cloud 日本リージョン開設!テナント作成と移行方法を解説
CloudFormation/SAMのススメ
Develipers.IO 2016 E-1 「AWS Configを使ったAWS環境の見える化」
JAWSUG20180925
JAWS-UG静岡 #1 Introduction to AWS SDK for Ruby
[Microsoft Tech Summit 2018] Azure Machine Learning サービスと Azure Databricks で実...
de:code 2019 Cloud トラック 総まとめ!
Azure IaaS update (2018年6月~8月 発表版)
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Developers.IO 2019 Effective Datalake
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
アウトプットはスキルアップもするしトクもする
Ad

IaC事始め Infrastructure as Code やってみる?