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
2026-06-18 ecspressoのtfstate参照が便利すぎた話
Search
SUZUKI Masashi
June 19, 2026
Technology
8
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
2026-06-18 ecspressoのtfstate参照が便利すぎた話
社内勉強会の内容
ecspressoが便利すぎて勢い余って、自分もインスパイアされてコードを書いた話
https://github.com/masasuzu/clrnd
SUZUKI Masashi
June 19, 2026
More Decks by SUZUKI Masashi
See All by SUZUKI Masashi
2026-04-14 Jagu'e'r Cloud Native分科会 Terraform Stateにおけるシークレットの平文保存という課題とその解決
masasuzu
1
52
2026-03-27 #terminalnight 変数展開とコマンド展開でターミナル作業をスマートにする方法
masasuzu
0
400
2026-03-23 Ops-JAWS Meetup39 Session Managerを使った セキュアなサーバーアクセス
masasuzu
2
150
2026-03-11 JAWS-UG 茨城 #12 改めてALBを便利に使う
masasuzu
3
470
2026-03-03 Jagu'e'r Tech Writer Meetup #19 登壇のネタ作りについて
masasuzu
0
210
2026-02-24 月末 Tech Lunch Online #10 Cloud Runのデプロイの課題から考えるアプリとインフラの境界線
masasuzu
0
180
2025-11-21 社内エンジニア勉強会 改めて理解するVPC Endpoint
masasuzu
0
420
2025-11-08 Security JAWS TerraformによるIAM Policy記述ガイド
masasuzu
2
1.4k
2025-09-25 SRETT #13 ConftestによるTerraformのPolicy as Codeを試してみる
masasuzu
0
570
Other Decks in Technology
See All in Technology
なぜ Platform Engineering の土台に Kubernetes を選ぶのか
r4ynode
1
560
日本 Fintech 未来予測レポート 2027〜2028年(手動編集版)
8maki
0
1.4k
小さくはじめるSLI/SLO ~育てながら組織に定着させる実践知~ / Starting Small with SLI/SLOs: Building Adoption Through Continuous Growth
nari_ex
2
1.3k
Disciplined Vibes: Scaling AI-Assisted Engineering
sheharyar
0
120
「速く作る」から「正しく作る」へ ─ 生成AI時代の開発フロー改革の ロードマップと実行 ─
starfish719
0
9.7k
攻撃者視点で考えるDetection Engineering
cryptopeg
0
710
10倍の生産性を実現するAI駆動並列エージェントのすべて
kumaiu
4
1.3k
小さく始める AI 活用推進 ― 日経電子版 Web チームの事例/nikkei-tech-talk47
nikkei_engineer_recruiting
0
190
データサイエンスを価値につなげるプロジェクト設計 〜 DS一年目が現場で得た気づき 〜
ysd113
1
130
On-behalf-of Token exchange with AgentCore Identity
hironobuiga
2
140
個人最適 から 全体最適 へ AI情報共有会・AIギルド・AI-DLC で進める カンリーの組織展開
rfdnxbro
0
2.2k
SIer20年! 培ったスキルがスタートアップで輝く時
shucho0103
0
830
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
280
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
160
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
150
Marketing to machines
jonoalderson
1
5.4k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
330
Become a Pro
speakerdeck
PRO
31
6k
A designer walks into a library…
pauljervisheath
211
24k
BBQ
matthewcrist
89
10k
Transcript
ecspressoのtfstate参照が便利すぎてCloud Run版を作ってしまった ついでにインフラとデプロイの境界線 社内 2026-06-19
おまえだれよ 名前: すずきまさし/x:@masasuz/masasuzu 所属: 株式会社スリーシェイク シニアアーキテクト クラウドインフラ何でも屋さん すきなもの: AWS, Google
Cloud, Terraform 2024-2025 AWS Community Builder Cloud Operations 2025 Japan All AWS Certifications Engineers Google Cloud Partner Top Engineer 2026 2
今日のゴール ecspresso の tfstate 参照 が便利すぎる、という話をします IAM Role ARN や
Secrets Manager ARN を ハードコードせず Terraform (tfstate) から引けます 便利すぎたので Cloud Run 版 (clrnd) を作りました (ついで) インフラとデプロイの 境界線 にも軽く触れます 3
目次 1. ecspresso の tfstate 参照が便利 2. なぜインフラに寄せないのか (ついで) 3.
Cloud Run でも同じ体験を 4. clrnd を作った 4
1. ecspresso の tfstate 参照が便利 5
ecspresso とは Amazon ECS デプロイツール (読みは "espresso" と同じ) ECS の
サービス定義 / タスク定義 を JSON / YAML / Jsonnet でコード管理 テンプレートで 環境変数や Terraform state の値 を埋め込める https://github.com/kayac/ecspresso 6
主要サブコマンド (軽く) コマンド 何をする init 稼働中サービスから設定ファイルを生成 diff 現在の定義との差分表示 verify リソースと設定の検証
deploy サービスをデプロイ (ローリング / Blue-Green) render 設定をレンダリングして出力 ほかに rollback / run / register などもあります。 7
tfstate 連携 タスク定義には IAM Role ARN や Secrets Manager ARN
が必要 これらは Terraform で作る → 今まではそれをコピペしてハードコードしていた 最近tfstate参照できることを知った ecspresso.yml の plugins で tfstate を有効化 plugins: - name: tfstate config: url: s3://my-bucket/terraform.tfstate 8
タスク定義テンプレート例 "taskRoleArn": "{{ tfstate `aws_iam_role.ecs_task.arn` }}", "secrets": [ { "name":
"DB_PASSWORD", "valueFrom": "{{ tfstate `aws_secretsmanager_secret.db.arn` }}" } ] ARN を一切ベタ書きしない。Terraform 側の値をそのまま引ける {{ tfstate "addr" }} で属性値に展開、 {{ tfstatef "...%s..." "idx" }} でインデックス指定 env / must_env / json_escape も利用可能 9
流れ (ECS) ecspresso の tfstate 連携 (ECS) Terraform IAM Role
Secrets Manager サブネット / SG ... tfstate s3://.../ terraform.tfstate ecspresso render / deploy テンプレートを展開 タスク定義 ( 展開後) ARN が埋め込まれた task definition JSON Amazon ECS サービス更新 apply 参照 render deploy タスク定義テンプレート ( 書く側) "taskRoleArn": "{{ tfstate `aws_iam_role.ecs_task.arn` }}", "secrets": [{ "name": "DB_PASSWORD", "valueFrom": "{{ tfstate `aws_secretsmanager_secret.db.arn` }}" }] 展開結果 (ecspresso が埋める) "taskRoleArn": "arn:aws:iam::123456789012:role/ecs-task", "secrets": [{ "name": "DB_PASSWORD", "valueFrom": "arn:aws:secretsmanager:ap-northeast-1: 123456789012:secret:db-xxxxxx" }] インフラの値は Terraform がsource of truth。ecspresso は 参照するだけです。 10
2. なぜインフラに寄せないのか (ついで) 11
「全部 Terraform で書けばいいのでは?」 確かに、デプロイ対象 (タスク定義 / Cloud Run サービス) も
Terraform で管理すれば 値は同じ state の中にある → tfstate 参照すらいらない でも、そうはしたくない 過剰: デプロイのためだけに state を増やし、 plan / apply に巻き込まれる 守備範囲: デプロイはアプリ開発者の領域。そこに Terraform を強いたくない → インフラは Terraform、デプロイは ecspresso。tfstate を境界面にして参照だけする 12
境界線のイメージ インフラとデプロイの境界線 境界線 インフラ = Terraform が管理 デプロイ = ecspresso
/ clrnd が管理 変更頻度が低く・影響が⼤きい VPC / ネットワーク IAM Role Secret Manager Cloud SQL / DB terraform apply 出⼒を tfstate に保存 (ARN / Service Account / IP ...) tfstate S3 / GCS = 境界⾯ 変更頻度が⾼く・アプリ開発の領域 タスク定義 / マニフェスト ( テンプレート) taskRoleArn / serviceAccountName: {{ tfstate "...role.arn" }} ecspresso / clrnd deploy → ECS サービス / Cloud Run サービス アプリ開発者は Terraform を触らない 書き込む 参照 ( 読むだけ) 要点 インフラは Terraform 、デプロイは ecspresso / clrnd 。tfstate を境界⾯にし、デプロイ側は値を参照するだけ。アプリ開発者に Terraform を強いない。 13
3. Cloud Run でも同じ体験を 14
Cloud Run のデプロイ手段 gcloud run deploy (イメージ指定) gcloud run services
replace service.yaml (YAML 適用) Terraform ( google_cloud_run_v2_service ) いずれも、ecspressoのようなかゆいところに手が届く感じがないです 15
欲しかったもの Service Account や Secret を tfstate から引いてマニフェストに埋めたい ecspresso と同じような使い勝手のツールがほしい
調べた範囲では Cloud Run 向けの相当ツールが見当たらなかったのでないならつくればいい AI Coding万歳 16
4. clrnd を作った 17
clrnd とは Cloud Run へのデプロイツール。ecspresso をモデルに自作しました Go tfstate 参照は ecspresso
と 同じ tfstate-lookup (fujiwara) を利用 https://github.com/masasuzu/clrnd 18
サブコマンド コマンド 何をする verify マニフェスト検証 (ローカルのみ、認証不要) diff 既存サービスとの差分表示 deploy Cloud
Run に適用 ( --auto-approve / --dry-run ) load 既存サービスを Knative YAML で取得 19
設定ファイル clrnd.yml project: my-project region: asia-northeast1 service: my-svc manifest: manifest.yaml
tfstate: - location: gs://my-tf-state/app/default.tfstate - name: network location: gs://my-tf-state/network/default.tfstate tfstate は複数指定でき、 name 省略で default 扱い location は gs:// / s3:// / ローカルに対応 20
マニフェスト (Knative YAML + Go template) spec: template: spec: serviceAccountName:
'{{ tfstate "output.run_service_account" }}' containers: - image: '{{ must_env "IMAGE" }}' env: - name: DB_HOST value: '{{ tfstate "google_sql_database_instance.main.private_ip_address" }}' - name: LOG_LEVEL value: '{{ env "LOG_LEVEL" "info" }}' 関数: tfstate "addr" / tfstate "name" "addr" / env / must_env ecspresso と同じ書き味で Service Account 等を引ける 21
使い方 # まず検証 (認証不要・tfstate 展開も確認できる) clrnd verify my-svc manifest.yaml #
差分を確認 clrnd diff my-svc manifest.yaml --project p --region r # デプロイ clrnd deploy my-svc manifest.yaml --project p --region r インストール: go install github.com/masasuzu/clrnd@latest 認証: gcloud auth application-default login (ADC) 22
流れ (Cloud Run) clrnd の tfstate 連携 (Cloud Run) —
ecspresso と同じ形 Terraform Service Account Secret Manager Cloud SQL ... tfstate gs://.../ terraform.tfstate clrnd verify / diff / deploy テンプレートを展開 マニフェスト ( 展開後) 値が埋め込まれた Knative Service YAML Cloud Run サービス更新 apply 参照 render deploy マニフェストテンプレート ( 書く側) spec: template: spec: serviceAccountName: '{{ tfstate "output.run_service_account" }}' containers: - image: '{{ must_env "IMAGE" }}' 展開結果 (clrnd が埋める) spec: template: spec: serviceAccountName:
[email protected]
containers: - image: asia-docker.pkg.dev/.../app:abc123 ecspresso と同じ構図で、tfstate を境界面にできました。 23
現状 (正直ベース) ざっくり欲しいものをつくりました。 設定ファイルがmanifestベースでいいのかは正直まだわからない まずは「tfstate を引いて Cloud Run に deploy
できる」ところまで 24
まとめ 25
まとめ ecspresso の tfstate 参照が便利。ARN を ハードコードせず Terraform から引けます 便利すぎたので
Cloud Run 版 clrnd を作りました。似た書き味で Service Account 等を引けます (ついで) インフラ = Terraform / デプロイ = 専用ツール。tfstate が境界面です 26
ありがとうございました 27