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
27
今年のre:inventから学ぶこと
yuki_kurono
0
110
re_invent 2023事前勉強会
yuki_kurono
0
99
CloudFormationの運用が 辛くならない方法を本気で考えてみた
yuki_kurono
0
320
CloudFormationで登場したForEachをちゃんと理解してみる
yuki_kurono
0
870
Turnstileのウィジェット モードとは何者か
yuki_kurono
0
690
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
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
140
DynamoDBには集計系のクエリがないけどなんとかしたい
musan
1
180
メソッドのジェネリクスでGoの夢は広がるか? / Kyoto.go #65
utgwkk
3
820
Strategic Design in the Frontend: Moduliths & Micro Frontends @DDDEurope
manfredsteyer
PRO
0
110
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.7k
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
880
Java × distroless で 軽量なコンテナイメージを / Java on Distroless
contour_gara
0
550
[2026年度第1回ORセミナー] 計画最適化ベンチャーと競技プログラミング人材
terryu16
0
270
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
260
LLM本来の能力を解き放つサンドボックス技術とAI民主化への適用
yukukotani
3
4.3k
さぁV100、メモリをお食べ・・・
nilpe
0
140
Creating Composable Callables in Contemporary C++
rollbear
0
150
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1370
210k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.3k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
BBQ
matthewcrist
89
10k
Building Adaptive Systems
keathley
44
3.1k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
390
Visualization
eitanlees
152
17k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
150
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
490
How to Ace a Technical Interview
jacobian
281
24k
Raft: Consensus for Rubyists
vanstee
141
7.5k
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.