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
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.7k
Google Cloud Next '24 Recap(Cloud Run/k8s)
mokocm
0
1.1k
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
いまさら聞けない「仕様駆動開発入門」 〜AI活用時代の開発プロセスを考える〜
findy_eventslides
2
160
AI時代のコスト管理を考えよう〜明日から使える実践AWSノウハウ~
yoshimi0227
0
270
2026TECHFRESH畢業分享會 - 葬送的通靈師:化系統與用戶雜訊成行動訊號
line_developers_tw
PRO
0
1.3k
自宅LLMの話
jacopen
1
620
SONiCの統計情報を取得したい
sonic
0
230
SteampipeとExcel Power QueryでAWS構成定義書の作成を自動化する
jhashimoto
0
150
人材育成分科会.pdf
_awache
4
300
Claude Codeをどのように キャッチアップしているか
oikon48
13
8.5k
「勝手に広まる」人気 AI エージェントを爆速で作ろう!(AWS Summit Japan 2026講演資料)
minorun365
PRO
5
1.8k
脱SaaS!FDEを支えるプロビジョニングと分離設計
knih
0
240
2026TECHFRESH畢業分享會 - Lightning Talk - 資料也要 CI/CD? 用 Airbyte 自動化資料同步
line_developers_tw
PRO
0
1.3k
10年間のブログ発信を振り返って見えたWebアプリケーションエンジニアとしての軌跡
stefafafan
0
160
Featured
See All Featured
Discover your Explorer Soul
emna__ayadi
2
1.1k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
970
The Invisible Side of Design
smashingmag
302
52k
Faster Mobile Websites
deanohume
310
31k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
490
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
Docker and Python
trallard
47
3.9k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Git: the NoSQL Database
bkeepers
PRO
432
67k
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