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.4k
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
170
self-hosted runnersでAWSコスト削減?
saramune
0
160
業務効率向上としての分割キーボード
saramune
0
200
インフラ観点で見るセキュリティ〜4Cモデルに倣って〜
saramune
0
130
適材適所
saramune
1
120
ChatworkのSRE部って実は 半分くらいPlatform Engineering部かもしれない
saramune
0
720
週刊AWSキャッチアップ(2024/03/25週)
saramune
0
150
なんでもかんでもコンテナ化すればいいってもんでもないけど なんでもかんでもコンテナ化したらスッキリしました
saramune
2
450
KubernetesとTerraformのセキュリティ/ガバナンス向上委員会 with OPA
saramune
2
1.7k
Other Decks in Technology
See All in Technology
なぜ あなたはそんなに re:Invent に行くのか?
miu_crescent
PRO
0
230
小さく、早く、可能性を多産する。生成AIプロジェクト / prAIrie-dog
visional_engineering_and_design
0
220
ESXi のAIOps だ!2025冬
unnowataru
0
440
Connection-based OAuthから学ぶOAuth for AI Agents
flatt_security
0
490
日本Rubyの会: これまでとこれから
snoozer05
PRO
6
250
MySQLとPostgreSQLのコレーション / Collation of MySQL and PostgreSQL
tmtms
1
1.4k
「もしもデータ基盤開発で『強くてニューゲーム』ができたなら今の僕はどんなデータ基盤を作っただろう」
aeonpeople
0
270
ペアーズにおけるAIエージェント 基盤とText to SQLツールの紹介
hisamouna
2
1.9k
Bedrock AgentCore Evaluationsで学ぶLLM as a judge入門
shichijoyuhi
2
300
投資戦略を量産せよ 2 - マケデコセミナー(2025/12/26)
gamella
0
540
SES向け、生成AI時代におけるエンジニアリングとセキュリティ
longbowxxx
0
250
Kiro を用いたペアプロのススメ
taikis
4
2.1k
Featured
See All Featured
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
YesSQL, Process and Tooling at Scale
rocio
174
15k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
0
350
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
420
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
79
GraphQLの誤解/rethinking-graphql
sonatard
74
11k
Accessibility Awareness
sabderemane
0
28
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
2.8k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
120
Designing Powerful Visuals for Engaging Learning
tmiket
0
190
The Curse of the Amulet
leimatthew05
0
6.3k
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 で検索!
働くをもっと楽しく、創造的に