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
Terraform ですべてを管理するのに疲れた😭
Search
Hasegawa Takuya
December 14, 2021
Programming
1
560
Terraform ですべてを管理するのに疲れた😭
社内LTなのでちょいちょい雑です
Hasegawa Takuya
December 14, 2021
Tweet
Share
More Decks by Hasegawa Takuya
See All by Hasegawa Takuya
1014-AWS-EC2-Graviton2
rluisr
0
830
Other Decks in Programming
See All in Programming
StarlingMonkeyを触ってみた話 - 2024冬
syumai
3
270
nekko cloudにおけるProxmox VE利用事例
irumaru
3
430
採用事例の少ないSvelteを選んだ理由と それを正解にするためにやっていること
oekazuma
2
1k
競技プログラミングへのお誘い@阪大BOOSTセミナー
kotamanegi
0
360
短期間での新規プロダクト開発における「コスパの良い」Goのテスト戦略」 / kamakura.go
n3xem
2
170
Effective Signals in Angular 19+: Rules and Helpers
manfredsteyer
PRO
0
100
선언형 UI에서의 상태관리
l2hyunwoo
0
160
今年一番支援させていただいたのは認証系サービスでした
satoshi256kbyte
1
250
「Chatwork」Android版アプリを 支える単体テストの現在
okuzawats
0
180
17年周年のWebアプリケーションにTanStack Queryを導入する / Implementing TanStack Query in a 17th Anniversary Web Application
saitolume
0
250
テスト自動化失敗から再挑戦しチームにオーナーシップを委譲した話/STAC2024 macho
ma_cho29
1
1.3k
今年のアップデートで振り返るCDKセキュリティのシフトレフト/2024-cdk-security-shift-left
tomoki10
0
200
Featured
See All Featured
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
32
2.7k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
Building a Scalable Design System with Sketch
lauravandoore
460
33k
Optimising Largest Contentful Paint
csswizardry
33
3k
Building Better People: How to give real-time feedback that sticks.
wjessup
365
19k
BBQ
matthewcrist
85
9.4k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
28
2.1k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
Reflections from 52 weeks, 52 projects
jeffersonlam
347
20k
Typedesign – Prime Four
hannesfritz
40
2.4k
Transcript
Terraform ですべてを管理す るのは疲れた😭 SRG 長谷川
6年間 手入れがされてない サービスがあった。 ※ Disってるわけではない
それはいつしか こっちの持ち物になった
そのコンポーネントは 日々重要度を増していた...
自己紹介 • 長谷川 拓也 ◦ 2018年度新卒入社 ◦ メディア系サービスの横断組織 ◦
サービスリライアビリティグループ(SRG)所属 ◦ 合同会社HCloud の社長でもある • 好きなこと(もの) ◦ 色々
現在の状況 • AWS を利用 • 使ってるサービスはたった2つ • EC2 ◦ m1.small
もいる ◦ 全台に Elasitc IP が付与されている • Classic Load Balancer ◦ Classic !!!
CentOS6 で... Chef で... munin/nagios で... • この EC2 たちの問題点
• EC2 は m1.small • OS は CentOS 6 • Chef は個人的に嫌いだし • アプリログをどこかに送ってるわけでもなく • 監視は munin と nagios • 運用管理を楽にして、監視も Datadog に一元管理したい
どのサービスを利用するか • Fargate vs ECS on EC2 ◦ ECS on
EC2 のメリットは今回は無い ◦ EC2 の管理したくない >< • Fargate vs App Runner ◦ App Runner は VPC 内のリソースにアクセスできない ▪ ref: https://github.com/aws/apprunner-roadmap/issues/1 = Fargate に決定!
で、Chef はどうする? • コンテナ化にするから Chef は不要になる • かといって IaC 環境がないのは心理的安全性に欠ける
• Terraform or Pulumi or CDK ◦ 最初は Terraform を書いていた ▪ 既存のコードのコピペができて楽だった ▪ でもこのコードを環境ごとに追加していくのは辛い ◦ Pulumi は個人的に好きだけどこのためだけにゼロから書くのは辛い ◦ CDK もゼロから書くのは辛い
で、Chef はどうする? • コンテナ化にするから Chef は不要になる • かといって IaC 環境がないのは心理的安全性に欠ける
• Terraform or Pulumi or CDK ◦ 最初は Terraform を書いていた ▪ 既存のコードのコピペができて楽だった ▪ でもこのコードを環境ごとに追加していくのは辛い ◦ Pulumi は個人的に好きだけどこのためだけにゼロから書くのは辛い ◦ CDK もゼロから書くのは辛い
Terraform Workspace • やりたいことは dev, stg, prd と分けて管理したい • Terraform
Workspace でできるんじゃないかと思った • がそのような使い方(分離の度合いが強い)は非推奨とされている ref: https://www.terraform.io/docs/language/state/workspaces.html
IaC のこと考えるの疲れた😭
AWS Copilot • What’s AWS Copilit AWS App Runner、Amazon ECS、AWS
Fargate を活用したプロダクションレディなコ ンテナアプリケーションのビルド、 リリース、運用をかんたんに実現しよう。 GitHub: https://github.com/aws/copilot-cli Document: https://aws.github.io/copilot-cli/ • やりたいことはだいたいできそう!
1. Dockerfile を用意する - EXPOSE は必須 - ENV JAVA_OPTS=”” は
Copilot から変数を注入する - 1.3-labs からヒアドキュメントが 利用できるようになったの便利
2. copilot init • 各質問に答えていくとマニフェストが作成されます
3. copilot env init • dev, stg ごとの環境を用意する • すでにネットワーク周りはあるので
--import を利用する
4. copilot deploy - deploy コマンドがやること - Dockerfile からイメージの作成
- ECR にプッシュ - CFn にパッケージング - ECS タスク定義、Job, Service の作成・更新
5. マニフェストをいじる - init を行うと copilot/service-test/manifest.yml が作成される - copilot はこれを元にリソースを変更したりする
マニフェスト http
マニフェスト image
マニフェスト リソース
マニフェスト 値の上書き • 例 メインコンテナのメモリ量を指定
マニフェスト 環境ごとに • sbx と prd で別の値を使う • 最上位のキーから指定しないと適用されない •
サイドカーパターンももちろん可能 ◦ メインコンテナが これらのサイドカーに依存することも可能
まとめ • Terraform x AWS Copilot の組み合わせで IaC に対するコスト削減 ◦
Fargate 周りは Copilit と割り切る ◦ SecurityGroup や EC2, RDS は Terraform と分ける • AWS Copilot でデプロイ管理もできるため、CI/CD との親和性が高い • かゆいところにも手が届く。Copilot に対するデメリットはない • どんな場合にこの組み合わせがオススメか ◦ 多くの場合にメリットがあると思う ▪ すでに Terraform でガチガチならあえてやる必要性もない