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
MotokiHabuchi
August 25, 2022
Technology
2
870
コード化できていなかったヤプリをTerraform文化に変えていった話
20220825 HashiTalks: Japan の発表資料です。
https://events.hashicorp.com/hashitalksjapan
MotokiHabuchi
August 25, 2022
Tweet
Share
More Decks by MotokiHabuchi
See All by MotokiHabuchi
開発コンテナを活用し、並列で同じサービスを複数パターン構築 / Leveraging Development Containers for Parallel Deployment of Service Patterns
motokihabuchi
0
29
ヤプリにおけるAWS Control Towerの活用 / Using AWS ControlTower in Yappli
motokihabuchi
0
980
Fargateでサクっとバッチ処理実行してみる/quick-batch-processing-in-Fargate.
motokihabuchi
0
71
re:Inventラスベガスはこうやって楽しむんや / lasvegas-tanoshimu2019
motokihabuchi
0
1.2k
re:Inventはこうやって楽しむんや / reinvent-wa-ko-yatte-tanoshimunnya
motokihabuchi
0
890
ヤプリの完全にモダンとは言いづらいけど、そこそこ攻めてるインフラ環境をもっと良くしたいエンジニアを募集しています。 / Yappli's infrastructure environment
motokihabuchi
0
2.3k
【AWS re:Invent報告会 by Yappli】で、結局re:Inventって何なの? / What is re: Invent?
motokihabuchi
0
1.5k
【YappliMeetup#3】Fargateでサクッと作る開発環境 / Make development environment with Fargate
motokihabuchi
0
450
【JAWS-UGさいたま】20170610_CFnでALBとWAFを連携
motokihabuchi
0
390
Other Decks in Technology
See All in Technology
GISエンジニアよ 現場に行け!
sudataka
1
140
Claude Codeは仕様駆動の夢を見ない
gotalab555
23
7.2k
AIエージェントを現場で使う / 2025.08.07 著者陣に聞く!現場で活用するためのAIエージェント実践入門(Findyランチセッション)
smiyawaki0820
7
1.3k
生成AI活用のROI、どう測る? DMM.com 開発責任者から学ぶ「AI効果検証のノウハウ」 / ROI of AI
i35_267
4
130
Oracle Exadata Database Service on Cloud@Customer X11M (ExaDB-C@C) サービス概要
oracle4engineer
PRO
2
6.4k
Amazon Q と『音楽』-ゲーム音楽もAmazonQで作成してみた感想-
senseofunity129
0
170
自治体職員がガバクラの AWS 閉域ネットワークを理解するのにやって良かった個人検証環境
takeda_h
1
320
20250818_KGX・One Hokkaidoコラボイベント
tohgeyukihiro
0
110
薬屋のひとりごとにみるトラブルシューティング
tomokusaba
0
390
[OCI Technical Deep Dive] OCIで生成AIを活用するためのソリューション解説(2025年8月5日開催)
oracle4engineer
PRO
0
120
会社にデータエンジニアがいることでできるようになること
10xinc
6
730
MCPサーバーを活用したAWSコスト管理
arie0703
0
130
Featured
See All Featured
StorybookのUI Testing Handbookを読んだ
zakiyama
30
6k
jQuery: Nuts, Bolts and Bling
dougneiner
64
7.8k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.8k
The Language of Interfaces
destraynor
159
25k
Become a Pro
speakerdeck
PRO
29
5.5k
GraphQLとの向き合い方2022年版
quramy
49
14k
Agile that works and the tools we love
rasmusluckow
329
21k
Making the Leap to Tech Lead
cromwellryan
134
9.5k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.4k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.6k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
8
460
Site-Speed That Sticks
csswizardry
10
770
Transcript
コード化できていなかったヤプリを Terraform文化に変えていった話 株式会社ヤプリ 羽渕元紀
• 羽渕元紀 / @modokkin • 株式会社ヤプリ • 2018年 インフラエンジニア第一号として入社 • インフラ周りからYoutubeまで
• Terraform歴 4年ちょっと 自己紹介
None
• アプリ開発・運用・分析をノーコードで 提供するアプリプラットフォーム • 年間200以上のアップデート • 導入実績600社以上 • 累計アプリ数1億DL以上 •
2013年創業、2020年上場 Yappli について
Yappli のサービスイメージ
• かっこ悪いかもしれないけど我々の開発フローの改善、 Terraform活用の取り組みをお話します • 同じ轍を踏まないためのヒントをおすそ分け お話すること
• 創業当初は全部CTO1人で開発していた • 開発はスピード重視で新機能、機能改修 • そこにフルスタックなエンジニアが登場 • AWSにリフト&シフト • Rubyベースで当時の開発者と相性の良かったChefを活用
歴史的背景
• サーバーサイドのエンジニアがインフラを管理 • Terraformは実績はあったものの運用できていなかった • php+nginx環境をchef(AWS OpsWorks)で構築、運用 • Vagrantによるローカル環境で開発を行い、リリース前の 動作検証は共通のステージング環境でおこなっていた
私が入社する前の状況
• 複数のAmazon EC2インスタンスで構成されるサービスを 開発用に1つに集約する試みをAnsibleで行っていた • それまでPHPで開発していたが新規開発はGo言語を採用 • AWS上に開発環境のインフラを構築するPythonスクリプ トが誕生 入社直後の状況
構成イメージ Python製スクリプトでAWSインフラを作成し、Ansibleで Amazon EC2に開発環境(ミニヤプリ)を作成
ここからが俺のターン
入社してまずやったこと
課題 • ステージング環境と開発環境が同じVPCに同居していた • 開発環境を量産できるようになったとはいえ、状態がバラ バラで品質の担保が難しかった
• 開発用のAWSアカウントを新設 • 目先で必要なリソースはAWS Cloud Formationを活用 ◦ AWS IAMの一部のIAMロールとIAMグループ (サービスが使うロールは別)
◦ TerrafomのバックエンドAmazon S3バケット 開発環境の見直し
• Terraformに手を付ける前に、手動でAWS VPC、 SecurityGroupなどを作成し、まずは目先の課題を解決 • 長期的には負債になるので、ここからがTerraformの出番 開発環境の作成
Terraform活用のはじまり
• AWS OpsWorksから距離を置きたかった • 統一感のない(浸透しない)コード化を整理したかった • 柔軟性が求められたので AWS CloudFormation もちょっ
と違う • Terraformは参考事例も多く学習コストが低そうだった Why Terraform?
Terraform活用 その1
方針 • まずはAmazon VPC+SecurityGroupから着手 • Moduleを使うぞ • 汎用的に使えるイケてるテンプレート作ったろ!
terraform/ ├── modules │ └─── vpc │ ├── main.tf │
├── output.tf │ └── variable.tf └── dev └── vpc ├── backend.tf ├── main.tf ├── output.tf ├── provider.tf └── variable.tf ディレクトリ構成 module "vpc" { source = "../../modules/vpc" common = "${var.common}" vpc = "${var.vpc}" }
振り返り • 最初から理想が高すぎた • variable.tfであらゆる環境に対応しようとしていた ◦ 本番用VPCと開発用VPCは意外との乖離 ◦ 同じテンプレート郡にSecurityGroupを含めた ◦
独自Moduleはまだ早かった
Terraform活用 その2
• 開発環境(ミニヤプリ)のTerraform化に着手 • Pythonスクリプトの内容を愚直に移植することにした • 前回の反省からModuleを使うのはやめて、できるだけシ ンプルにすることを心がけた 方針
terraform/ └── dev-aws ├── vpc ├── codedeploy │ ├── backend.tf
│ ├── datasource.tf │ ├── main.tf │ ├── output.tf │ ├── provider.tf │ └── variable.tf ➚ ディレクトリ構成 ➘ └── dev ├── backend.tf ├── datasource.tf ├── main.tf ├── output.tf ├── provider.tf └── variable.tf
• Pythonスクリプトからの移植なので、スムーズに移行 • テンプレートはファイルをコピーしていた 振り返り
Terraform活用 その3
• 開発環境を量産する前にTerraformのディレクトリ構成、 命名規則、コピー運用を見直すことに • Templateファイルにシンボリックリンクで参照する方式 を採用 • Workspace機能を使うことに 方針
terraform/ ├── template │ ├── service │ │└── review │
│ ├── serviceA.tf │ │ ├── <一部省略> │ │ ├── provider.tf │ │ └── variable.tf │ └── workspace │ └── base │ ├── main.tf │ ├── <一部省略> │ └── variable.tf 続く ディレクトリ構成
続き └── {workspace名} ├── service │ └── review1 │ ├──
serviceA.tf -> ../../../templates/service/review/serviceA.tf │ ├── backend.tf │ ├── <一部省略> │ ├── provider.tf -> ../../../templates/service/review/provider.tf │ └── variable.tf └── workspace └── base ├── backend.tf ├── main.tf -> ../../../templates/workspace/base/main.tf ├── <一部省略> └── variable.tf ディレクトリ構成
• シンボリックリンク運用にしてみたら考えることがシンプ ルになり効率的に開発できた • Workspace機能は使って良かった ◦ Backendのtfstateディレクトリの切り替えが楽 ◦ terraform.workspace変数が使えるのが何気に便利 だった
振り返り
Terraform導入後の世界
• 新機能開発のインフラは原則Terraformで構築 • メンバーが増えたときにもスムーズに引き継ぐ事が出来た • インフラの変更管理が容易になり、変更をGithubのPRで レビューできるように Terraform後の世界
開発フローがスムーズに 回り始めた
開発フロー 1. 新機能開発時にインフラ構成を検討 2. 既存のパターンなら既存のTerraformテンプレートを流用 3. 新しいパターンならまず手動で構築してみて、方針が固 まったら開発環境にTerraformテンプレートを追加 4. 個別QAが完了したらステージング環境、本番環境に移植
まだまだ課題は山積み
• 50環境あり作成した時期がバラバラ ◦ 機能開発に支障は無いもののインフラ差分が多数発生 • 大規模なリファクタリングを行い、大半を作り直す予定 増えまくる開発環境
• モノレポなterraformディレクトリ配下 ◦ 294 directories, 1597 files • tfstate ◦
開発環境 45~75 resource、11data source ◦ 共通リソース 450 resource、87 data source • 全体的にディレクトリ構成を見直す予定 Terraformもどんどん成長
terraform/ ├── template └── {workspace名} prod/stg/dev ├── service │ └──
review1~50 ←約60リソース×50環境 └── workspace └── base ↓47ファイル ├── serviceA.tf ├── serviceB.tf ├── <一部省略> ├── serviceXY.tf ├── serviceYZ.tf └── variable.tf ディレクトリ構成
• Terraform CloudやGithub Actionsで自動化を検討 ◦ Github ActionsはIAMロールを扱えるのが魅力的 • 人を信頼して強めの権限を利用しているので、権限の見直 しに苦労している
◦ 例えばIAMロール、IAMポリシーを作るところとか ローカルや作業用EC2で実行している
• Terraformを初めて使うときは小さく始める • 当たり前だけど開発環境から手を付けるのが良い • 可能なら早い段階からインフラをコード化しておく • 開発スケジュールを優先するときは一旦手動で構築してあ とからコード化するのもあり まとめ
最後にひとこと
https://open.talentio.com/r/1/c/yappli/homes/3493 https://yappli.co.jp/recruit/