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
810
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
39
今年のre:inventから学ぶこと
yuki_kurono
0
110
re_invent 2023事前勉強会
yuki_kurono
0
100
CloudFormationの運用が 辛くならない方法を本気で考えてみた
yuki_kurono
0
340
CloudFormationで登場したForEachをちゃんと理解してみる
yuki_kurono
0
890
Turnstileのウィジェット モードとは何者か
yuki_kurono
0
710
CodeGuru Security ってなんだ?
yuki_kurono
0
1.2k
えるしってるか CloudFrontはWAFがあっても カスタムエラーレスポンスを返せる
yuki_kurono
0
450
Cloudflare初心者がIaCから基本構成を学んでみた
yuki_kurono
1
640
Other Decks in Programming
See All in Programming
改善しないと、タスクが回らない。 “てんこ盛りポジション” を引き継いだ情シスの、入社3ヶ月の業務改善録
krm963
0
250
AI時代に設計が 最大の生産性レバーになる 意図駆動開発とデータを消さない設計|Don't Delete Your Data or Your Intent — Design as the Deepest Lever in the AI Era
tomohisa
1
660
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
550
JAWS-UG横浜 #102 AWSサ終供養LT会 成仏できない AWS サービスたち 〜本日、三体供養します〜
maroon1st
0
310
属人化した知識を、 AIが辿れる地図にする
pkshadeck
PRO
1
140
霧の中の代数的エフェクト
funnyycat
1
460
torikago - Ruby::Boxで照らすモジュラモノリスの実行境界
se4weed
1
330
変わらないものが、変わるものを決める — 意図駆動開発 × イベントソーシング × イミュータブル | What Doesn't Change Decides What Can — IDD × Event Sourcing × Immutability
tomohisa
0
1.2k
PHP Application における Kubernetes 内 gRPC 通信
ganchiku
0
580
関東Kaggler会_NVIDIA_Nemotron_コンペ_振り返り
rick_ds
0
140
仕様駆動開発の消費期限
watany
7
3.6k
VibeCodingからAgenticWorkflowへ
starfish719
0
230
Featured
See All Featured
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Heart Work Chapter 1 - Part 1
lfama
PRO
8
36k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
430
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
3
400
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
Leo the Paperboy
mayatellez
8
2.1k
A better future with KSS
kneath
240
18k
sira's awesome portfolio website redesign presentation
elsirapls
0
320
We Have a Design System, Now What?
morganepeng
55
8.2k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
760
Technical Leadership for Architectural Decision Making
baasie
3
460
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.