$30 off During Our Annual Pro Sale. View Details »

ローカル開発環境をAWSへ移行して爆速にした

yuu26
September 12, 2022

 ローカル開発環境をAWSへ移行して爆速にした

Kyash TechTalk #4 の登壇資料です。
登壇時の動画は YouTube から閲覧できます。

yuu26

September 12, 2022
Tweet

More Decks by yuu26

Other Decks in Technology

Transcript

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

    View Slide

  2. ©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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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



    Editor
    Simulator

    View Slide

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

    View Slide

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



    Editor
    Simulator
    Service A
    Service B
    Service C




    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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




    SSH on SSM

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  17. ©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等)

    View Slide

  18. ©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等)

    View Slide

  19. ©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等)

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide