社内LTなのでちょいちょい雑です
Terraform ですべてを管理するのは疲れた😭 SRG 長谷川
View Slide
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 もゼロから書くのは辛い
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 でガチガチならあえてやる必要性もない