Slide 1

Slide 1 text

©2022 Kyash Inc. ©2022 Kyash Inc. ローカル開発環境を AWSへ移行して爆速にした 2022/09/12 Kyash TechTalk #4

Slide 2

Slide 2 text

©2022 Kyash Inc. 自己紹介 株式会社Kyash SREチーム (Engineering Manager, Tech Lead) SIerでオンプレミスのインフラ構築を経験後、 Webサービス企業2社でのSREを経てKyashへ入社。 副業でECサイトのSREやチャットボット開発など。 最近はスプラトゥーン3で色塗り業をしています。 Kyash: @yuu26 Twitter: @m_on_yu GitHub: @yuu26jp 上原 佑介 2

Slide 3

Slide 3 text

©2022 Kyash Inc. 3 目 次 1. ローカル開発環境の課題 2. AWS開発環境の整備 3. 構築を自動化する 4. 今後の取り組み 5. まとめ Table of contents

Slide 4

Slide 4 text

©2022 Kyash Inc. ©2022 Kyash Inc. 1. ローカル開発環境の課題 4 4

Slide 5

Slide 5 text

©2022 Kyash Inc. 1. ローカル開発環境の課題 マイクロサービス構成でサービス数は30前後 アプリAPI用と決済ネットワーク用でシステムの入口が主に2つある インフラはAWS、コンテナはECS + Fargate 環境は主に以下の4つ ● AWS本番環境 ● AWS検証環境 x2 ● Mac上のローカル開発環境 Kyashのシステム構成 5

Slide 6

Slide 6 text

©2022 Kyash Inc. 1. ローカル開発環境の課題 MacのDocker上で各マイクロサービスのコンテナを起動 一通りの機能を試すには13個ほどのサービス起動が必要 CPUが張り付いたりI/O遅い問題で重すぎる状態に…… さらにiOSやAndroidのシミュレータも起動すると非常につらい ⇒開発に支障が出るため対策を検討することに ローカル開発環境における課題 6 Service A Service B Service C ・ ・ ・ Editor Simulator

Slide 7

Slide 7 text

©2022 Kyash Inc. 7 1. ローカル開発環境の課題 Linuxの開発マシンを用意する ● I/O遅い問題が解決できる ● MDMなどの関係ですぐには導入が難しい ● エンジニア全員のマシンを一度に入れ替えるのは厳しそう クラウド上に開発環境を用意する 【採用】 ● I/O遅い問題が解決できる ● 物理マシンではないのでMDM面での懸念がない ● 平日昼間のみ稼働させることでコストは比較的抑えられる 検討した案

Slide 8

Slide 8 text

©2022 Kyash Inc. 8 1. ローカル開発環境の課題 ローカルで起動するリソースが減ることでMacの負荷が軽減されるはず クラウド上に開発環境を用意する Editor Simulator Service A Service B Service C ・ ・ ・ Editor Simulator Service A Service B Service C ・ ・ ・ +

Slide 9

Slide 9 text

©2022 Kyash Inc. ©2022 Kyash Inc. 2. AWS開発環境の整備 9 9

Slide 10

Slide 10 text

©2022 Kyash Inc. 10 2. AWS開発環境の整備 要件を洗い出すと…… 1. 個人ごとに環境を分離したい 2. サクッと構築したい 3. ローカルでのファイル変更をスムーズに反映したい 4. 維持コストはなるべく抑えたい AWS上でどのように環境を構築するか

Slide 11

Slide 11 text

©2022 Kyash Inc. 11 2. AWS開発環境の整備 要件を洗い出すと…… 1. 個人ごとに環境を分離したい 2. サクッと構築したい 3. ローカルでのファイル変更をスムーズに反映したい 4. 維持コストはなるべく抑えたい FargateではなくEC2を利用する方針に決定 1. インスタンス単位で完全に分離できる 2. EC2イメージから3分で構築可能 3. GoLandやVSCodeのSSHリモートホスト機能が使える 4. Fargateを多数起動するよりEC2の方が安い AWS上でどのように環境を構築するか

Slide 12

Slide 12 text

©2022 Kyash Inc. 12 2. AWS開発環境の整備 ・個人用EC2インスタンス (m5.large)   ⇒ ローカル用の docker-compose.yml を流用 ・個人用ドメイン   ⇒ .kyash-dev.com ・ALB (共有)   ⇒ モバイルアプリのリクエスト受信用   ⇒ サブドメイン名で転送先を振り分け ・WAF (共有) ・ACM (共有) システム構成 ※ドメイン名はダミーです

Slide 13

Slide 13 text

©2022 Kyash Inc. 13 2. AWS開発環境の整備 GoLandやVSCodeのSSHリモートホスト機能を用いて、 ローカルで変更したファイルを即座にリモートホストへ反映できる。 SSH機能でファイル変更を即反映 Editor Simulator Service A Service B Service C ・ ・ ・ + SSH on SSM

Slide 14

Slide 14 text

©2022 Kyash Inc. 14 2. AWS開発環境の整備 ● インスタンスへのSSH直接接続は禁止 ○ 必ずSSM経由のSSHを利用すること ○ SSHポートは開放しない ● インスタンスは毎日22時に自動シャットダウンされる ○ 止め忘れによる費用増加を防ぐ ○ 夜間に検証を走らせたいときは自動シャットダウン自体を止める (余談) クラスメソッド社のopswitchを使うと リソースタグ単位でスケジュールした時刻にEC2やRDSを起動停止できるので便利 運用ルール

Slide 15

Slide 15 text

©2022 Kyash Inc. ©2022 Kyash Inc. 3. 構築を自動化する 15 15

Slide 16

Slide 16 text

©2022 Kyash Inc. 16 3. 構築を自動化する 1. Terraformのworkspaceを作る 2. terraform apply 3. gitconfigやユーザ名の設定を行う 4. 利用可能! 環境を立ち上げるまでの流れ

Slide 17

Slide 17 text

©2022 Kyash Inc. 17 3. 構築を自動化する Terraformの管理イメージ (共有リソース) ※ドメイン名はダミーです terraform ├── README.md ├── modules ├── general  ※Terraform Workspace │ ├── 個人用リソース (EC2, ALBルール等) │ └── _tfvars │ ├── uehara.tfvars │ ├── tanaka.tfvars │ └── .tfvars └── shared └── 共有リソース (ALB本体, ACM, WAF等)

Slide 18

Slide 18 text

©2022 Kyash Inc. 18 3. 構築を自動化する Terraformの管理イメージ (個人用リソース) ※ドメイン名はダミーです terraform ├── README.md ├── modules ├── general  ※Terraform Workspace │ ├── 個人用リソース (EC2, ALBルール等) │ └── _tfvars │ ├── uehara.tfvars │ ├── tanaka.tfvars │ └── .tfvars └── shared └── 共有リソース (ALB本体, ACM, WAF等)

Slide 19

Slide 19 text

©2022 Kyash Inc. 19 3. 構築を自動化する 環境を追加する際は、genaralでWorkspaceを 増やすだけで個人用リソースのみが追加作成される。 【工夫点】 ALBのサブドメイン振り分けを自動化するために、 リスナールールのみ general に配置した。 Terraform上での管理方法 terraform ├── README.md ├── modules ├── general  ※Terraform Workspace │ ├── 個人用リソース (EC2, ALBルール等) │ └── _tfvars │ ├── uehara.tfvars │ ├── tanaka.tfvars │ └── .tfvars └── shared └── 共有リソース (ALB本体, ACM, WAF等)

Slide 20

Slide 20 text

©2022 Kyash Inc. ©2022 Kyash Inc. 4. 導入効果と今後の取り組み 20 20

Slide 21

Slide 21 text

©2022 Kyash Inc. 21 4.導入効果と今後の取り組み 導入効果 ● コンテナリソースがEC2に移ったためMacの高負荷問題が解消! ○ 遅いときは10分ほど掛かっていた起動待ち時間がなくなった ● 環境追加が容易になった ○ 新メンバーのオンボーディングが少し楽になった ○ Mobileチームが自前でサーバサイドの検証環境を追加可能になった 今後の取り組み ● Slackコマンドでインスタンスを起動可能にする ○ マネジメントコンソールやCLIを毎度叩くのは手間なのでSlackでシュッとやりたい ● PRベースの検証環境を自動生成する ○ EC2を1台立ち上げるだけなら現実的な待ち時間で生成できそう

Slide 22

Slide 22 text

©2022 Kyash Inc. ©2022 Kyash Inc. 5. まとめ 22 22

Slide 23

Slide 23 text

©2022 Kyash Inc. 23 5. まとめ ローカル開発環境をAWSへ移行して爆速にした ● マイクロサービス数が30近くありローカルでは限界が来ていた ● Dockerリソースの動作場所をAWSへ移すことで解決した ● 検証環境をスムーズに増やせるようになった Kyashでは各職種にて絶賛採用中! ● エンジニアも、エンジニア以外の方も様々なポジションがあります ● まずは話を聞くだけのカジュアル面談から始められますのでぜひ!