Kyash TechTalk #4 の登壇資料です。 登壇時の動画は YouTube から閲覧できます。
©2022 Kyash Inc. ©2022 Kyash Inc.ローカル開発環境をAWSへ移行して爆速にした2022/09/12Kyash TechTalk #4
View Slide
©2022 Kyash Inc.自己紹介株式会社Kyash SREチーム(Engineering Manager, Tech Lead)SIerでオンプレミスのインフラ構築を経験後、Webサービス企業2社でのSREを経てKyashへ入社。副業でECサイトのSREやチャットボット開発など。最近はスプラトゥーン3で色塗り業をしています。Kyash: @yuu26Twitter: @m_on_yuGitHub: @yuu26jp上原 佑介2
©2022 Kyash Inc.3目 次1. ローカル開発環境の課題2. AWS開発環境の整備3. 構築を自動化する4. 今後の取り組み5. まとめTable of contents
©2022 Kyash Inc.©2022 Kyash Inc.1. ローカル開発環境の課題44
©2022 Kyash Inc.1. ローカル開発環境の課題マイクロサービス構成でサービス数は30前後アプリAPI用と決済ネットワーク用でシステムの入口が主に2つあるインフラはAWS、コンテナはECS + Fargate環境は主に以下の4つ● AWS本番環境● AWS検証環境 x2● Mac上のローカル開発環境Kyashのシステム構成5
©2022 Kyash Inc.1. ローカル開発環境の課題MacのDocker上で各マイクロサービスのコンテナを起動一通りの機能を試すには13個ほどのサービス起動が必要CPUが張り付いたりI/O遅い問題で重すぎる状態に……さらにiOSやAndroidのシミュレータも起動すると非常につらい⇒開発に支障が出るため対策を検討することにローカル開発環境における課題6Service AService BService C・・・EditorSimulator
©2022 Kyash Inc.71. ローカル開発環境の課題Linuxの開発マシンを用意する● I/O遅い問題が解決できる● MDMなどの関係ですぐには導入が難しい● エンジニア全員のマシンを一度に入れ替えるのは厳しそうクラウド上に開発環境を用意する 【採用】● I/O遅い問題が解決できる● 物理マシンではないのでMDM面での懸念がない● 平日昼間のみ稼働させることでコストは比較的抑えられる検討した案
©2022 Kyash Inc.81. ローカル開発環境の課題ローカルで起動するリソースが減ることでMacの負荷が軽減されるはずクラウド上に開発環境を用意するEditorSimulatorService AService BService C・・・EditorSimulatorService AService BService C・・・+
©2022 Kyash Inc.©2022 Kyash Inc.2. AWS開発環境の整備99
©2022 Kyash Inc.102. AWS開発環境の整備要件を洗い出すと……1. 個人ごとに環境を分離したい2. サクッと構築したい3. ローカルでのファイル変更をスムーズに反映したい4. 維持コストはなるべく抑えたいAWS上でどのように環境を構築するか
©2022 Kyash Inc.112. AWS開発環境の整備要件を洗い出すと……1. 個人ごとに環境を分離したい2. サクッと構築したい3. ローカルでのファイル変更をスムーズに反映したい4. 維持コストはなるべく抑えたいFargateではなくEC2を利用する方針に決定1. インスタンス単位で完全に分離できる2. EC2イメージから3分で構築可能3. GoLandやVSCodeのSSHリモートホスト機能が使える4. Fargateを多数起動するよりEC2の方が安いAWS上でどのように環境を構築するか
©2022 Kyash Inc.122. AWS開発環境の整備・個人用EC2インスタンス (m5.large) ⇒ ローカル用の docker-compose.yml を流用・個人用ドメイン ⇒ .kyash-dev.com・ALB (共有) ⇒ モバイルアプリのリクエスト受信用 ⇒ サブドメイン名で転送先を振り分け・WAF (共有)・ACM (共有)システム構成※ドメイン名はダミーです
©2022 Kyash Inc.132. AWS開発環境の整備GoLandやVSCodeのSSHリモートホスト機能を用いて、ローカルで変更したファイルを即座にリモートホストへ反映できる。SSH機能でファイル変更を即反映EditorSimulatorService AService BService C・・・+SSH on SSM
©2022 Kyash Inc.142. AWS開発環境の整備● インスタンスへのSSH直接接続は禁止○ 必ずSSM経由のSSHを利用すること○ SSHポートは開放しない● インスタンスは毎日22時に自動シャットダウンされる○ 止め忘れによる費用増加を防ぐ○ 夜間に検証を走らせたいときは自動シャットダウン自体を止める(余談)クラスメソッド社のopswitchを使うとリソースタグ単位でスケジュールした時刻にEC2やRDSを起動停止できるので便利運用ルール
©2022 Kyash Inc.©2022 Kyash Inc.3. 構築を自動化する1515
©2022 Kyash Inc.163. 構築を自動化する1. Terraformのworkspaceを作る2. terraform apply3. gitconfigやユーザ名の設定を行う4. 利用可能!環境を立ち上げるまでの流れ
©2022 Kyash Inc.173. 構築を自動化するTerraformの管理イメージ (共有リソース)※ドメイン名はダミーですterraform├── README.md├── modules├── general ※Terraform Workspace│ ├── 個人用リソース (EC2, ALBルール等)│ └── _tfvars│ ├── uehara.tfvars│ ├── tanaka.tfvars│ └── .tfvars└── shared└── 共有リソース (ALB本体, ACM, WAF等)
©2022 Kyash Inc.183. 構築を自動化するTerraformの管理イメージ (個人用リソース)※ドメイン名はダミーですterraform├── README.md├── modules├── general ※Terraform Workspace│ ├── 個人用リソース (EC2, ALBルール等)│ └── _tfvars│ ├── uehara.tfvars│ ├── tanaka.tfvars│ └── .tfvars└── shared└── 共有リソース (ALB本体, ACM, WAF等)
©2022 Kyash Inc.193. 構築を自動化する環境を追加する際は、genaralでWorkspaceを増やすだけで個人用リソースのみが追加作成される。【工夫点】ALBのサブドメイン振り分けを自動化するために、リスナールールのみ general に配置した。Terraform上での管理方法terraform├── README.md├── modules├── general ※Terraform Workspace│ ├── 個人用リソース (EC2, ALBルール等)│ └── _tfvars│ ├── uehara.tfvars│ ├── tanaka.tfvars│ └── .tfvars└── shared└── 共有リソース (ALB本体, ACM, WAF等)
©2022 Kyash Inc.©2022 Kyash Inc.4. 導入効果と今後の取り組み2020
©2022 Kyash Inc.214.導入効果と今後の取り組み導入効果● コンテナリソースがEC2に移ったためMacの高負荷問題が解消!○ 遅いときは10分ほど掛かっていた起動待ち時間がなくなった● 環境追加が容易になった○ 新メンバーのオンボーディングが少し楽になった○ Mobileチームが自前でサーバサイドの検証環境を追加可能になった今後の取り組み● Slackコマンドでインスタンスを起動可能にする○ マネジメントコンソールやCLIを毎度叩くのは手間なのでSlackでシュッとやりたい● PRベースの検証環境を自動生成する○ EC2を1台立ち上げるだけなら現実的な待ち時間で生成できそう
©2022 Kyash Inc.©2022 Kyash Inc.5. まとめ2222
©2022 Kyash Inc.235. まとめローカル開発環境をAWSへ移行して爆速にした● マイクロサービス数が30近くありローカルでは限界が来ていた● Dockerリソースの動作場所をAWSへ移すことで解決した● 検証環境をスムーズに増やせるようになったKyashでは各職種にて絶賛採用中!● エンジニアも、エンジニア以外の方も様々なポジションがあります● まずは話を聞くだけのカジュアル面談から始められますのでぜひ!