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
ACKを活用して 使い捨てAWS検証環境を構築している話
Search
saramune
September 11, 2023
Technology
0
1.2k
ACKを活用して 使い捨てAWS検証環境を構築している話
https://mixi.connpass.com/event/293351/
こちらの勉強会の資料です。
saramune
September 11, 2023
Tweet
Share
More Decks by saramune
See All by saramune
EKS Auto Modeなにそれおいしいの?
saramune
0
120
self-hosted runnersでAWSコスト削減?
saramune
0
120
業務効率向上としての分割キーボード
saramune
0
150
インフラ観点で見るセキュリティ〜4Cモデルに倣って〜
saramune
0
75
適材適所
saramune
1
97
ChatworkのSRE部って実は 半分くらいPlatform Engineering部かもしれない
saramune
0
610
週刊AWSキャッチアップ(2024/03/25週)
saramune
0
130
なんでもかんでもコンテナ化すればいいってもんでもないけど なんでもかんでもコンテナ化したらスッキリしました
saramune
2
400
KubernetesとTerraformのセキュリティ/ガバナンス向上委員会 with OPA
saramune
2
1.5k
Other Decks in Technology
See All in Technology
“社内”だけで完結していた私が、AWS Community Builder になるまで
nagisa53
1
350
Uniadex__公開版_20250617-AIxIoTビジネス共創ラボ_ツナガルチカラ_.pdf
iotcomjpadmin
0
160
Microsoft Build 2025 技術/製品動向 for Microsoft Startup Tech Community
torumakabe
2
250
Абьюзим random_bytes(). Фёдор Кулаков, разработчик Lamoda Tech
lamodatech
0
330
VISITS_AIIoTビジネス共創ラボ登壇資料.pdf
iotcomjpadmin
0
160
より良いプロダクトの開発を目指して - 情報を中心としたプロダクト開発 #phpcon #phpcon2025
bengo4com
1
3.1k
[TechNight #90-1] 本当に使える?ZDMの新機能を実践検証してみた
oracle4engineer
PRO
3
170
AWS Summit Japan 2025 Community Stage - App workflow automation by AWS Step Functions
matsuihidetoshi
1
230
20250625 Snowflake Summit 2025活用事例 レポート / Nowcast Snowflake Summit 2025 Case Study Report
kkuv
1
290
生成AIでwebアプリケーションを作ってみた
tajimon
2
140
Claude Code Actionを使ったコード品質改善の取り組み
potix2
PRO
6
2.1k
CI/CD/IaC 久々に0から環境を作ったらこうなりました
kaz29
1
160
Featured
See All Featured
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
16
940
For a Future-Friendly Web
brad_frost
179
9.8k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
How to Ace a Technical Interview
jacobian
277
23k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
46
9.6k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
YesSQL, Process and Tooling at Scale
rocio
173
14k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.5k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
GitHub's CSS Performance
jonrohan
1031
460k
Transcript
© Chatwork ACKを活用して 使い捨てAWS検証環境を構築している話 Chatwork株式会社
自己紹介 2 • 古屋 啓介 ◦ Chatwork株式会社 プロダクト本部 SRE部 ◦
AWS Community Builders (container) ◦ JAWS-UG SRE支部運営 ◦ ドラム叩きます
前提と課題 やったこと まとめ 1 2 AGENDA アジェンダ 3
前提と課題 1
(おさらい)前提 5 • Chatworkのインフラ構成 ◦ 大部分のアプリがEKS上で稼働 ◦ その他Aurora、Dynamo DB、SQSあたりがよく使われる
開発環境におけるアプリケーション動作確認用インフラ 6 • ローカル ◦ 手元のマシンでdocker-composeなどを駆使 • 検証環境 ◦ 開発者が自由に使える検証用AWSアカウント(共用)
◦ 本番と同じフロー(Argo CD)でEKSにデプロイ&動作確認
開発検証環境の課題 7 検証用EKSクラスタが1つしかなく、同じアプリを複数起動できない AWS環境で検証したい場合は専有(順番待ち)する必要あり
モチベーション 8 これ、なくしたいな?
機運 9 • Argo CDの統合でApplicationSetが利用可能に ◦ 1つのEKS内でアプリケーションが容易に複製可能 統合Argo CD、できたで さすさか神(さすが坂本さん、神です)
ということで 10 よっしゃ じゃあPR作ったらなんか環境ばーんって できるやつ(流行ってるし)やってみよう!
やったこと 2
• Argo CD ApplicationSet Pull Request Generatorの活用 • AWS Controllers
for Kubernetes(ACK)の活用 やったこと 12
PR Generatorの活用(1/3) 13 • PR Generatorとは? ◦ ApplicationSetで「何をフックにApplicationを作るか」の一種 ◦ 指定したリポジトリのPRを検知してArgo
CD Applicationを作成する apiVersion: argoproj.io/v1alpha1 kind: ApplicationSet metadata: name: myapps spec: generators: - pullRequest: requeueAfterSeconds: 1800 github: # 接続先リポジトリの設定など
PR Generatorの活用(2/3) 14 • つまり? ◦ manifestリポジトリでPR作ったらアプリが自動展開される • 工夫したポイント ◦
アプリ名は一意になるようにPR IDのprefixをつける ▪ test-[PR ID]-web とか ◦ アプリの展開先クラスタ名やエンドポイントはParameter Storeから取得 ▪ Cluster Generatorと異なりアプリの展開先クラスタを明示する必要あり ◦ アプリケーションへのアクセスは一意のドメイン + external-dnsで確保 ▪ PR IDなどを使ってPR環境ごとに異なるドメインをRoute 53に登録
PR Generatorの活用(3/3) 15 • PR Generatorでここまでできた Manifest (helmfile) Charts EKS
(manager) Sync EKS (app) kubectl apply helmfileから生成された Manifest 1. PRを作成する 2. PRを検知して Applicationを作成する 3. アプリがデプロイされる Watch PR
ACKの活用(1/4) 16 • ACKとは? ◦ Kubernetesマニフェスト形式でAWSリソースを管理できる • 何が嬉しいの? ◦ AWSリソースを宣言的に定義
& GitOpsできる ◦ こういうインスタントな利用に向いてそう apiVersion: s3.services.k8s.aws/v1alpha1 kind: Bucket metadata: name: bocchi-the-rock spec: name: bocchi-the-rock S3バケットをKubernetesマニフェストで管理できちゃう!
• どこで使うの? ◦ IRSA ▪ PR Generatorで作ったアプリのNSを分けたく、SAも専用のものが必要 ▪ IAM Role、IAM
Policyも専用にしておきたい = 都度ACKで作成したい ◦ 専用のAWSリソースを作りたいとき ▪ PR番号のprefixをつけた各種AWSリソースを作成し、既存の環境と分離する ▪ DynamoDB、SQSが(現状)対象 ACKの活用(2/4) 17
• どうやって使うの? ◦ 各種Controllerをデプロイする(AWSリソースごとにControllerがある) ▪ IAM、DynamoDB、SQS ▪ 詳しくはドキュメントをどうぞ ◦ 各リソースのマニフェストを用意する
◦ PR環境用なのでACK用のPR Generator ApplicationSetを用意する ACKの活用(3/4) 18
• 工夫したポイント ◦ IRSA用のPR GeneratorだけGithubのポーリング間隔を短めに設定 ▪ アプリケーションより先にSAの作成とIRSA設定をしたい ◦ helmfile +
raw manifests最強 ▪ IRSAに必要なIAM Role, Policy, SA, NSをまとめて宣言 ACKの活用(4/4) 19 apiVersion: v1 kind: Namespace metadata: name: xxx --- apiVersion: iam.services.k8s.aws/v1alpha1 kind: Policy # IAM Policyの定義 — …
• 今までのやつらをどうやって組み合わせるの? ◦ コマンド1つでこれらを作成するようにGitHub Actionsで頑張る ◦ Repository Dispatchを活用 ▪ Debugつらみ
ぐるー(1/2) 20
ぐるー(2/2) 21 開発者 Application PR Manifest (helmfile) Charts ECR EKS
(manager) Sync 1. Comment 2. Build 4. Update & Create PR 3. Push 6. kubectl apply helmfileから生成された Manifest 5. Polling EKS (app)
おかたづけ 22 • 削除方法 ◦ 以下をまたGithub Actionsで頑張る... ▪ アプリ側のPR closeをきっかけにマニフェスト側のPRを閉じる
▪ ArgoCD Applicationを消す(と、諸々のリソースも全部消える) ▪ (マニフェスト側のPRを先に閉じとかないと無限に復活する)
作ってみて、どう? 23 • 坂本さんの名言 • 開発の方からも喜びの声をいただきました
• DBも個別にしたい ◦ 今は全PR環境が共通のAuroraにアクセス ◦ でもAuroraをACKで、は辛そうなのでMySQLコンテナかな... • 細かい改善ポイントもろもろ ◦ manifest側のbranch消えないから消さないと...
◦ 定期的にゴミが残ってないかチェックしたい... 今後 24
まとめ 3
ACKを活用して使い捨てAWS検証環境を構築している話 26 • 「test web使います」をなくしたかった • ACKとPR Generatorを活用してPR環境を作れるようにした • いい感じにできたっぽい!
ブログもさっき公開したよ 27 Chatwork Creator's Note で検索!
働くをもっと楽しく、創造的に