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
810
1
Share
Terraform ですべてを管理するのに疲れた😭
社内LTなのでちょいちょい雑です
Hasegawa Takuya
December 14, 2021
More Decks by Hasegawa Takuya
See All by Hasegawa Takuya
1014-AWS-EC2-Graviton2
rluisr
0
950
Other Decks in Programming
See All in Programming
JavaDoc 再入門
nagise
0
280
ユニットテストの先へ:テスト技法で要求・仕様を整理するJava開発実践 / Beyond_Unit_Testing_Practical_Java_Development_Techniques_for_Organizing_Requirements_and_Specifications
shimashima35
0
350
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
2.3k
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
740
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.2k
技術記事、AIに書かせるか、自分で書くか? 〜それでも私が自分の手で書く理由〜 / #QiitaConference
jnchito
2
1.3k
AIチームを指揮するOSS「TAKT」活用術 / How to Use “TAKT,” an OSS Tool for Orchestrating AI Teams
nrslib
6
820
LLM本来の能力を解き放つサンドボックス技術とAI民主化への適用
yukukotani
3
2.7k
ビジネスモデルから紐解く、AI+型駆動開発
hirokiomote
2
5.2k
Javaの型とAI時代に型が大事な理由 / java types and type in AI era
kishida
2
100
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
620
Spring Security 実践 ─ GraphQL APIで実務に役立つ 認証・認可 を学ぶ
wagyu
0
110
Featured
See All Featured
Docker and Python
trallard
47
3.9k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.3k
Navigating Team Friction
lara
192
16k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
590
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.7k
The agentic SEO stack - context over prompts
schlessera
0
790
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
140
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
280
Leo the Paperboy
mayatellez
7
1.8k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
410
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 でガチガチならあえてやる必要性もない