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環境でIaCを使い始めて運用するためのメリットデメリットと注意点
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
mokonist
June 26, 2020
Technology
3.7k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
AWS環境でIaCを使い始めて運用するためのメリットデメリットと注意点
mokonist
June 26, 2020
More Decks by mokonist
See All by mokonist
devio-2024-Introduction-golang-backend
mokocm
7
4.8k
Google Cloud Next '24 Recap(Cloud Run/k8s)
mokocm
0
1.2k
1年間モダンなアプリへの移行支援をやってみて分かった、モダナイズの重要性と難しさ
mokocm
1
1.6k
レガシーシステム、モダナイズへの道筋
mokocm
0
1.8k
Application Composerのすすめ
mokocm
0
1.5k
devio-2022-sapporo-moko.pdf
mokocm
2
170
DeepDive into Modern Development with AWS
mokocm
1
1.4k
IaCで全てが上手くいくと思うなよ_失敗事例のご紹介.pdf
mokocm
0
9.7k
re:Growth infra 2020
mokocm
0
4.8k
Other Decks in Technology
See All in Technology
Microsoft のサポートとフィードバック総まとめ
murachiakira
PRO
0
140
AI・ロボティクスと自動化社会 / AI, Robotics, and the Automated Society
ks91
PRO
0
140
“詰む”前に仕組みを作れ 〜技術の波に溺れないためのキャッチアップ術〜
takasyou
8
5k
小さいから、全部わかる。— 常駐AI "xangi" のすすめ
sugupoko
0
220
Tech-Verse 2026_Keynote
lycorptech_jp
PRO
0
120
金融の未来を考える / Thinking About the Future of Finance
ks91
PRO
0
110
AIに障害切り分けを全部やってもらった。 。 。 。
estie
0
330
AWS Summit Japan 2026の振り返りと2027へ向けて / AWS Summit Japan 2026 Recap and Prospects for 2027
kaminashi
1
180
AWS Blocks を触ってみた/first-tach-aws-blocks
fossamagna
2
120
感情と身体を置き去りにしない、エンジニアの生きのこり方 ──いまから、ここから「自分の状態」を扱うという選択
saorimurooka
1
450
Hatena Engineer Seminar 37 jj1uzh
jj1uzh
0
410
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
11k
Featured
See All Featured
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
880
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
410
Rails Girls Zürich Keynote
gr2m
96
14k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Evolving SEO for Evolving Search Engines
ryanjones
0
230
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
400
Exploring anti-patterns in Rails
aemeredith
3
430
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
220
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
350
Transcript
AWS環境でIaCを使い始めて運⽤するための メリットデメリットと注意点 クラスメソッド株式会社 AWS事業本部 コンサルティング部 moko (@mokocm ) 2020/06/26
2 ⾃⼰紹介 もこ クラスメソッド株式会社 AWS事業本部 コンサルティング部ソリューションアーキテクト 2020 APN AWS Top
Engineers 現職: Terraform/CDKでAWS環境の構築 前職: ECサイトのSREっぽい事 好き: アプリとインフラの中間、TypeScript 好きなAWSサービス: ECS/Amplify/CDK Twitter/GitHub: mokocm
3 本⽇お話しすること ・IaC(Infrastructure as Code)の利点、⽋点 ・Terraform/CloudFormation/CDKの紹介 ・IaCの運⽤⽅法(例) ・まとめ
4 今回持って帰って欲しい事 Infrastructure as Codeを利点と⽋点を理解して、 本番環境でも利⽤出来るかを判断出来るようになり、 運⽤が苦じゃなくなる
5 対象 = 既にAWS環境でゴリゴリIaCとかCI/CDをしてる ⽅は物⾜りないかもしれません。
6 ・IaCの利点、⽋点 ・Terraform/CloudFormation/CDKの紹介 ・IaCの運⽤⽅法(例) ・まとめ
IaCとは︖ Infrastructure as Code(IaC) AWS環境やOSなどの構成をコードベースで 記述、更新を⾏うツール、サービス AWSだとTerraform/CloudFormation/CDK/OpsWorks など
8 利点 ・環境の変更をコードベースでレビュー出来る ・⼿動での適⽤が無くなるため、ミスが少なくなる ・GitHubなどと連携してIssue/PRでトラッキングできる ・最新の環境をコードベースで管理出来るため、管理が楽 ※AWS環境を⼿で触らないようしている場合に限る ・楽しい←重要
9 IaCを導⼊することで幸せになる例 ・⼤規模(20台〜)かつAutoScaling Groupが複数環境ある ・構成変更を⾏う時に⼤量の環境に対してマネコンから⼿動で 更新しないといけない ・同じような構成で複数の環境を⽤意する必要がある
10 IaCを導⼊することで幸せになる例 ・⼤規模(20台〜)かつAutoScaling Groupが複数環境ある →複数の環境に対してアップデートが出来る ・構成変更を⾏う時に⼤量の環境に対してマネコンから⼿動で 更新しないといけない ・同じような構成で複数の環境を⽤意する必要がある
11 IaCを導⼊することで幸せになる例 ・⼤規模(20台〜)かつAutoScaling Groupが複数環境ある →複数の環境に対してアップデートが出来る ・構成変更を⾏う時に⼤量の環境に対してマネコンから⼿動で 更新しないといけない →コードベースで管理出来るため、ミスを少なくして時間を節約 ・同じような構成で複数の環境を⽤意する必要がある
12 IaCを導⼊することで幸せになる例 ・⼤規模(20台〜)かつAutoScaling Groupが複数環境ある →複数の環境に対してアップデートが出来る ・構成変更を⾏う時に⼤量の環境に対してマネコンから⼿動で 更新しないといけない →コードベースで管理出来るため、ミスを少なくして時間を節約 ・同じような構成で複数の環境を⽤意する必要がある →コードを使い回すことで同じ環境を簡単に早く⽤意出来る
13 ⽋点 ・Terraform/CloudFormation/CDKなど、ツールに依存するため 学習コストが増える ・暗黙的なデフォルト値がAWSマネコンのデフォルト値と違う場合 がある ・IaC管理外でAWS環境を更新すると対応が⼤変になる ・ツール固有のバグを踏むことがある ・時間がかかる
14 ⽋点 ・Terraform/CloudFormation/CDKなど、ツールに依存するため 学習コストが増える ・暗黙的なデフォルト値がAWSマネコンのデフォルト値と違う場合 がある ・IaC管理外でAWS環境を更新すると対応が⼤変になる ・ツール固有のバグを踏むことがある ・時間がかかる
15 ツール固有のバグを踏むことがある TerraformのSecurity Group Cycle Error… Applyしても出続ける謎の差分… 実⾏中に切れるセッション… エラーログにGitHubのIssueのリンク… 環境とコード上の差分を全て⾒てくれない…
16 時間がかかる マネコンからポチポチしたほうが早い場合もある
17 AWSの知識に加えてIaCの学習コストが掛かることを妥協できますか︖ ⼤量の差分を⽬の前にして、諦めずにやっていけますか︖ IaCに掛けるコストと規模が⾒合っていますか︖
18 そもそもIaCを導⼊する必要が本当にあるのか︖
19 ・・・とは⾔っても 導⼊した⽅が良かったり、後々楽だったりする場合がある。 IaCを使い始めて運⽤をするなら、マネコンで触らない⽅が良い 構築だけで、運⽤はIaCを離れるなら
20 ・IaCの利点、⽋点 ・Terraform/CloudFormation/CDKの紹介 ・IaCの運⽤⽅法(例) ・まとめ
21 Terraform HashiCorpが⼿がける クラウドの構成管理ツール AWS以外にもGCP/Azure/DigitalOcean/CloudFlareなどが対応 Providerを独⾃で⽤意することが出来る。 HCL(HashiCorp Configuration Language)でインフラを記述 様々なサービスで対応、とても書きやすい
22 Terraform // vpc resource "aws_vpc" "vpc" { cidr_block =
"10.0.0.0/16" } // igw resource "aws_internet_gateway" "igw" { vpc_id = aws_vpc.vpc.id } // subnet (a) resource "aws_subnet" "subnet_a" { cidr_block = "10.0.0.0/24" vpc_id = aws_vpc.vpc.id availability_zone = "ap-northeast-1a" } // subnet (c) resource "aws_subnet" "subnet_c" { cidr_block = "10.0.0.1/24" vpc_id = aws_vpc.vpc.id availability_zone = "ap-northeast-1c" }
23 Terraform // Route Table(0.0.0.0/0 igw) resource "aws_route_table" "public" {
vpc_id = aws_vpc.vpc.id route { cidr_block = "0.0.0.0/0" gateway_id = aws_internet_gateway.igw.id } } // RouteTableにAssociation resource "aws_route_table_association” "subnet_a" { route_table_id = aws_route_table.public.id subnet_id = aws_subnet.subnet_a.id } resource "aws_route_table_association" "subnet_c" { route_table_id = aws_route_table.public.id subnet_id = aws_subnet.subnet_c.id }
24 CloudFormation AWSが提供するIaCツール リソースをJSON/YAMLで記述 ・Stackset機能でリージョン、 AWSアカウントに⼀括実⾏が可能 ・プログラミングが書けなくても 良い感じに書ける
25 CDK 使い慣れたプログラミング⾔語から CloudFormationを出⼒ ⼀般的なCloudFormationのように明⽰的に全てのリソースを 記述出来るほか、数⾏で複数のリソースを作れるモジュールが提供 JavaScript/TypeScript/Python/Java/C#で利⽤可能 今激アツなIaCツール
26 CDK import { Stack, Construct, StackProps, Duration } from
'@aws-cdk/core'; import { Vpc } from '@aws-cdk/aws-ec2’ export class SlackTranslateBotStack extends Stack { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props); const vpc = new Vpc(this, 'TheVPC', { cidr: "10.0.0.0/16" }) } }
27 CDK Ref: h'ps://dev.classmethod.jp/ar6cles/aws-cdk-intro-nw/
28 CDK https://dev.classmethod.jp/articles/aws-cdk-serverless-develop/ CDK + Lambdaで開発がめちゃめちゃ捗る︕ constructor(scope: Construct, id: string,props?:StackProps)
{ super(scope, id, props); const lambda = new NodejsFunction(this, 'lambda', { entry: 'lambda/app.ts’, handler: 'handler’, runtime: Runtime.NODEJS_12_X, timeout: Duration.minutes(5) }); const api = new LambdaRestApi(this, 'api', { handler: lambda }); }
29 その他 | Serverless ・AWS SAM(Serverless Application Model) ・CLIとCloudFormationの拡張、デプロイが楽 ・実態はCloudFormationのTransform
・Serverless Framework ・ymlでサーバーレス環境を簡単に設定
30 ・IaCの利点、⽋点 ・Terraform/CloudFormation/CDKの紹介 ・IaCの運⽤⽅法(例) ・まとめ
31 IaCの運⽤⽅法 ・Gitで管理して、開発者がトピックブランチからmasterブランチに Pull Requestを出し、CIで現環境との差分、コードのレビューを受ける ・もちろんmasterブランチは保護して、承認なく直接Push出来ないように ・masterブランチにマージされたら環境に適⽤する ・Terraformの場合はS3にtfstateを保存する terraform {
backend "s3" { bucket = "bucket-name-here" key = "terraform.tfstate" encrypt = ture region = "ap-northeast-1" } }
32 運⽤⽅法 | GitHub
33 運⽤⽅法 | GitHub
34 運⽤⽅法 | GitHub
35 運⽤⽅法 | Terraform Cloud Terraform Cloudを使うのもあり。 https://dev.classmethod.jp/articles/terraform-cloud/
36 運⽤⽅法 | Terraform Cloud
37 IaCの運⽤⽅法 ・IaCの実⾏に使うIAM UserにのみAWS環境の編集権限を与える ・普段マネコンを使うユーザーにはReadOnlyAccessポリシーを付与 ・本当に⼿動での対応が必要な場合にのみ⼀時的に権限を付与するなど ・AWS環境を⼿で触らない
38 AWS環境を素⼿で触らない強い意志
39 AWS環境を素⼿で触らない強い意思 ・IaCで管理、運⽤するならAWS環境を直接触らない強い意志が必要 ・環境の変更はGitHub上で承認を受けてmasterにマージする =masterブランチが最新である⽅が整合性が取れて管理しやすい ・出来るならば、OSレイヤーは簡潔にして極⼒触らずに、 使い捨て出来るように
40 IaCの運⽤⽅法 Q. それって「Immutable Infrastructure」では︖
41 IaCの運⽤⽅法 Q. それって「Immutable Infrastructure」では︖ A. はい。
42 IaCの運⽤⽅法 Q. それって「Immutable Infrastructure」では︖ A. はい。 // あくまで個⼈的感想であり理想論で、今⽇⼀番伝えたかった事 開発者はインフラを積極的に世話したいとは思わないし
アプリケーション開発に集中したい
43 IaCの運⽤⽅法 Q. それって「Immutable Infrastructure」では︖ A. はい。 // あくまで個⼈的感想であり理想論で、今⽇⼀番伝えたかった事 開発者はインフラを積極的に世話したいとは思わないし
アプリケーション開発に集中したい せっかくクラウドにリフトするなら、インフラを極⼒世話しない環境に しませんか︖
44 ・IaCの利点、⽋点 ・Terraform/CloudFormation/CDKの紹介 ・IaCの運⽤⽅法(例) ・まとめ
45 まとめ ・Infrastructure as Codeで運⽤する場合環境を素⼿で 触らないようにする ・これからオンプレミスからクラウドに移⾏する⽅は、 Immutable Infrastructureの考え⽅を再認識する ・チームや組織でIaCツールを使っていけるモチベーションが
あるのかを確認する
46