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
IaC運用してみて感じた 素晴らしさとアンチパターン
Search
Yuki_Kurono
September 25, 2022
Programming
800
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
33
今年のre:inventから学ぶこと
yuki_kurono
0
110
re_invent 2023事前勉強会
yuki_kurono
0
100
CloudFormationの運用が 辛くならない方法を本気で考えてみた
yuki_kurono
0
330
CloudFormationで登場したForEachをちゃんと理解してみる
yuki_kurono
0
870
Turnstileのウィジェット モードとは何者か
yuki_kurono
0
700
CodeGuru Security ってなんだ?
yuki_kurono
0
1.2k
えるしってるか CloudFrontはWAFがあっても カスタムエラーレスポンスを返せる
yuki_kurono
0
440
Cloudflare初心者がIaCから基本構成を学んでみた
yuki_kurono
1
630
Other Decks in Programming
See All in Programming
任せる範囲はこう広がった / How the Scope of AI Delegation Has Expanded
nrslib
1
250
Go1.27で導入されるジェネリクスメソッドでできること
mackee
0
280
Vite+ Unified Toolchain for the Web
naokihaba
0
740
ECSアプリログをFireLensでコスト削減しようとしたけど諦めた話 in Fargate×Node.js
akihisaikeda
2
4.2k
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
1
160
The Bowling Game- From Imperative to Functional Programming - Part 1
philipschwarz
PRO
0
310
【SRE NEXT 2026 Lunch Session】一人目専任SREの立ち上げを加速する ― AIと進めたオンボーディングで2分を0.04秒にした話
pkshadeck
PRO
0
2.3k
音楽のための関数型プログラミング言語mimiumにおける多段階計算の活用
tomoyanonymous
1
310
Hatena Engineer Seminar #37「言語モデルの活用に関する研究」
slashnephy
0
510
【やさしく解説 設計編 #1】「ドメイン駆動」と「実装駆動」ってなに? 〜設計の考え方を、たとえ話で学ぼう〜
panda728
PRO
1
110
OS アップデート対応の取り組み方がもっと共有されてほしい
andpad
0
110
信頼性について考えてみる(SRE NEXT 2026 miniLT)
hayama17
0
160
Featured
See All Featured
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
410
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
420
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
55k
We Have a Design System, Now What?
morganepeng
55
8.2k
Between Models and Reality
mayunak
4
370
GitHub's CSS Performance
jonrohan
1033
470k
Mobile First: as difficult as doing things right
swwweet
225
10k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Designing for Performance
lara
611
70k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.3k
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.