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
IaC運用してみて感じた 素晴らしさとアンチパターン
Search
Yuki_Kurono
September 25, 2022
Programming
850
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
IaC運用してみて感じた 素晴らしさとアンチパターン
Yuki_Kurono
September 25, 2022
More Decks by Yuki_Kurono
See All by Yuki_Kurono
Terraform(IaC)と実環境の乖離どうしていますか?
yuki_kurono
0
62
今年のre:inventから学ぶこと
yuki_kurono
0
120
re_invent 2023事前勉強会
yuki_kurono
0
110
CloudFormationの運用が 辛くならない方法を本気で考えてみた
yuki_kurono
0
390
CloudFormationで登場したForEachをちゃんと理解してみる
yuki_kurono
0
930
Turnstileのウィジェット モードとは何者か
yuki_kurono
0
750
CodeGuru Security ってなんだ?
yuki_kurono
0
1.2k
えるしってるか CloudFrontはWAFがあっても カスタムエラーレスポンスを返せる
yuki_kurono
0
470
Cloudflare初心者がIaCから基本構成を学んでみた
yuki_kurono
1
680
Other Decks in Programming
See All in Programming
DroidKnights 2026 Android A2UI Jetpack Compose 기반의 안전한 AI UI 렌더링 - 박제창
itsmedreamwalker
1
150
複数ドメインを一つのアプリに統合するFlutterの設計と運用_FlutterKaigi2026登壇資料(須永高弘)
takahirosunaga
0
140
学びを記事・スライド・Xへ高速展開する― AI-assisted Learning Loopで回すコンテンツ生成術
ochtum
0
190
우리의 Nitro Modules는 당신의 Turbo Modules보다 아름답다
l2hyunwoo
0
250
TanStack Vue Query と Pinia Colada から学ぶ非同期状態の型設計
aoshi
0
610
선언형 햅틱 라이브러리 진동을 소개합니다
l2hyunwoo
1
280
Performance Optimization With LLMs
xleitix
0
240
Spec-Driven Development - Why Vaadin Is the Perfect Fit
simas
PRO
0
220
エージェントを使い続けるためのメタワーク / Meta-work for keeping using the agent
rkaga
6
2.2k
SODA - FACT BOOK(JP)
sodainc
1
40k
私なりのハーネスエンジニアリング ~独自の言語処理系の開発を通して~
seosoft
0
180
作れる、でも消せるか?──安全に「枯らして消す」機能削除術 / Drain, Then Delete
chobishiba
3
1.4k
Featured
See All Featured
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Tell your own story through comics
letsgokoyo
1
1.1k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
520
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
740
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
77k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
650
From π to Pie charts
rasagy
1
430
Prompt Engineering for Job Search
mfonobong
0
570
Building AI with AI
inesmontani
PRO
1
1.4k
Large-scale JavaScript Application Architecture
addyosmani
516
110k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
480
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
370
Transcript
IaC運用してみて感じた 素晴らしさとアンチパターン 黒野 雄稀 | 2022/9/25 1
自己紹介 黒野 雄稀 Yuki Kurono twitter:@kurono_98 Qiita :@kurono #jawsug #jawsdays
#jawsdays2022 アイレット株式会社 エンタープライズクラウド事業部所属 2020/4 新卒入社 普段はインフラ設計・構築や運用構築に従事 2022 APN ALL AWS Certifications Engineers 2
#jawsug #jawsdays #jawsdays2022 3 豊富な導入実績による、卓越したノウハウ。 確かな信頼。設計・構築から運用保守まで、 AWSにおけるあらゆるニーズに対応するフルマネージド・サービス。 • クラウド導入実績 2,500
社以上 • 年間プロジェクト 4,300 以上 • AWS プレミアティアサービスパートナーの認定を9年連続で保持
今日お話しすること #jawsug #jawsdays #jawsdays2022 • CloudForation • Terraform 4 よく使う以下のIaCツールについて、それぞれの素晴らしさとアンチパターン
についてお話ししていきたいと思います。
#jawsug #jawsdays #jawsdays2022 5 今日お話しないこと https://www.meiji.co.jp/sweets/chocolate/kinotake/
#jawsug #jawsdays #jawsdays2022 6 IaC使ってますか!?
#jawsug #jawsdays #jawsdays2022 7 IaCを使う理由 • 1度作ったリソースは作成が簡単になる • インフラ管理のコスト削減できる •
書いていて楽しい IaC素晴らしいですよね。
#jawsug #jawsdays #jawsdays2022 8 CloudFormationの素晴らしいところ ソフトウェアのインストールが不要で、マネジメントコンソールから デプロイできる。 学習コストが比較的低く、スタートが簡単
#jawsug #jawsdays #jawsdays2022 9 CloudFormationの素晴らしいところ 正規表現やプルダウンなどを指定することができるので、作成の際に 迷うことが減る。 パラメーターの制御が柔軟 DBPassword: Default:
"dbpassword" NoEcho: true Type: String MinLength: 8 MaxLength: 41 AllowedPattern: "[a-zA-Z0-9]*" MultiAZ: Default: "false" Type: String AllowedValues: ["true", "false"]
#jawsug #jawsdays #jawsdays2022 10 Terraformの素晴らしいところ 柔軟なリソース作成制御ができる for_eachなどを用いることにより、同じリソースを複数作成する事が可能 • 複数リソースの作成 ◦
for_each,count,dynamicなど • リソースの作成可否 ◦ count,三項演算子など 個人的にはパラメーターをignoreできるのがイチオシなポイント --targetで分割してデプロイできるのも良い。 resource aws_subnet this { count = local.create_subnet ? 1 : 0 vpc_id = var.vpc_id cidr_block = var.cidr_block availability_zone = var.availability_zone }
#jawsug #jawsdays #jawsdays2022 11 Terraformの素晴らしいところ module機能① リソースが定義されたTFファイルを集約し、moduleという単位に分割する。 vpc.tf よくある構成 ec2.tf
role.tf subnet.tf policy.tf VPC EC2 IAM SG module sg.tf
#jawsug #jawsdays #jawsdays2022 12 Terraformの素晴らしいところ module機能② 分割したmoduleを環境毎のmain.tfなどから呼び出して使用する。 VPC EC2 IAM
SG module main.tf 使うmoduleを指定する パラメーターを渡すだけ . ├── env │ ├── dev │ │ └── main.tf │ └── prod │ └── main.tf └── modules ├── ec2 │ └── ec2.tf ├── rds │ └── rds.tf └── vpc └── vpc.tf
#jawsug #jawsdays #jawsdays2022 13 IaCは銀の弾丸じゃない ということで、ここからアンチパターンについて紹介していきます。 あくまで今から紹介する内容は一部でしかないと思います。
#jawsug #jawsdays #jawsdays2022 14 CloudFormationアンチパターン 手動とCFnの並行管理 CFnで作成したリソースを手動で変更することもできます。 しかし、手動変更部分の管理が発生しコード管理が煩雑になるのでやめよう。 どうしても手動変更したい場合にはCFnを捨てる。 ドリフト発生
#jawsug #jawsdays #jawsdays2022 15 CloudFormationアンチパターン OutPut名を適当につける Outputs: WebSubnet: Description: Web
Public Subnet Value: !Ref WebSubnet Export: Name: "WebSubnet" PrivateSubnet: Description: Private Subnet Value: !Ref PrivateSubnet Export: Name: "PrivateSubnet" クロススタック参照やネストスタックする時に名前が分からず困ることも。 新たにWebSubnetなどが増えた時に困ることも多い。 • 連番を付与する • ${AWS::StackName}をリソース 名のpirefixに付与する
#jawsug #jawsdays #jawsdays2022 16 CloudFormationアンチパターン パラメータを入力させ過ぎる 構成としては同じものが出来上がるかもしれないが、入力を増やすことにより 作業者の労力が増えるのでなるべく可能なものは参照する。 VPCやSubnetのIDを入力させる形式などになっていると、 「手で作った方が楽なんじゃ・・・」と思えてくることも。
#jawsug #jawsdays #jawsdays2022 17 Terraformアンチパターン countを使用しての複数リソース作成 countを使用することで複数のリソースを作成することができるが、 indexがズレて意図しない動作をすることがあるので、for_eachを使用する。 # サブネットを作成する
resource aws_subnet this { count = length(local.subnets_pub) vpc_id = aws_vpc.this.id cidr_block = values(var.subnets)[count.index].cidr_block availability_zone = values(var.subnets)[count.index].availability_zone } locals { subnets_pub = { sntpub1a01 = { name = "sntpub1a01" cidr_block = "192.168.1.0/24" availability_zone = "ap-northeast-1a" } sntpub1c01 = { name = "sntpub1c01" cidr_block = "192.168.2.0/24" availability_zone = "ap-northeast-1c" } sntpub1a01を消した時に配列なのでsntpub1c01が [1]→[0]へ詰められリソースの再作成が発生する。
#jawsug #jawsdays #jawsdays2022 18 Terraformアンチパターン 環境毎にリソースのtfファイルを分ける 本番と検証で同じ構成を作りたい場合にはmoduleにして使用するべき。 tfファイルを分けることで、2重管理が必要となり環境毎の差異が発生する。 . └──
env ├── dev │ ├── ec2.tf │ ├── rds.tf │ └── vpc.tf └── prod ├── ec2.tf ├── rds.tf └── vpc.tf . ├── env │ ├── dev │ │ └── main.tf │ └── prod │ └── main.tf └── modules ├── ec2 │ └── ec2.tf ├── rds │ └── rds.tf └── vpc └── vpc.tf 変更
#jawsug #jawsdays #jawsdays2022 19 まとめ メリット • 1度作ったリソースは作成が簡単になる • インフラ管理のコスト削減できる
• 書いていて楽しい デメリット • 学習コストがある程度必要 • IaC or 手作業のどちらかに寄せる必要がある
#jawsug #jawsdays #jawsdays2022 20 まとめ 今回紹介したアンチパターンはあくまで一部でしか ないと思います。 なので、皆さんの中でより良いIaCを見つけていって ください!
#jawsug #jawsdays #jawsdays2022 21 NO IaC, NO LIFE.