Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Amazon CodeCatalyst で実現!開発環境とCI/CDパイプライン

Genki
October 07, 2023
6.9k

Amazon CodeCatalyst で実現!開発環境とCI/CDパイプライン

Genki

October 07, 2023
Tweet

More Decks by Genki

Transcript

  1. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. 自己紹介 Genki

    (小笠原 元気) 北海道ガス株式会社(2017〜) ・Job, Role  フロントエンド・バックエンド両方やる人  開発チーム(4人)の技術突っ走る担当 趣味:旅行・筋トレ 最近興味があること:DevOps, SRE ・好きな AWS サービス  Amazon CodeCatalyst, AWS CDK @geivk
  2. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. 北海道ガス株式会社
 主要事業内容


    本社所在地
 従業員数
 沿革
 1911年 設立
 ガス事業
 電気供給業
 ガス機器販売
 907名
 札幌市東区北7条東2丁目1-1
 売上高
 1,748億円(連結)
 2023年10月7日時点 お客さま 件数
 ガス:600,882件
 電力:234,083件
 会社概要

  3. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. Agenda ・Amazon

    CodeCatalyst とは ・開発環境 ・CI / CD パイプラインの構築 ・チーム開発における用途とプラクティス ・採用した背景、解決した課題 ・バックエンドとフロントエンドの CI/CD
  4. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. Amazon CodeCatalyst

    が提供するサービス 引用:https://aws.amazon.com/jp/codecatalyst/ ソースコードからサービス 設定まで、必要なものをほ ぼすべて備えたブループリ ントを使用して、新しいプロ ジェクトを数分で開始できま す。
 プロジェクト用に完全に構 成されたクラウドベースで 個人用の開発環境をすば やく作成し、一般的な統合 開発環境 (IDE) と連携でき ます。
 継続的インテグレーション およびデリバリー (CI/CD) パイプラインを簡単に定義 し、スケーラブルなマネージ ドコンピューティング環境で 自動的に実行できます。 統合されたアクティビティ フィード、リアルタイム通 知、および共有開発リソー スを使用して、効率的にコ ラボレーションできます。
 プロジェクト管理 IDE コラボレーション CI / CD
  5. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. Amazon CodeCatalyst

    が提供するサービス Issue管理 Slack統合 ソースコードからサービス 設定まで、必要なものをほ ぼすべて備えたブループリ ントを使用して、新しいプロ ジェクトを数分で開始できま す。
 プロジェクト用に完全に構 成されたクラウドベースで 個人用の開発環境をすば やく作成し、一般的な統合 開発環境 (IDE) と連携でき ます。
 継続的インテグレーション およびデリバリー (CI/CD) パイプラインを簡単に定義 し、スケーラブルなマネージ ドコンピューティング環境で 自動的に実行できます。 統合されたアクティビティ フィード、リアルタイム通 知、および共有開発リソー スを使用して、効率的にコ ラボレーションできます。
 プロジェクト管理 IDE コラボレーション CI / CD 引用:https://aws.amazon.com/jp/codecatalyst/
  6. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. CodeCatalyst を利用するにあたって

    ・AWS Builders ID (≠ AWS マネジメントコンソール) ・AWS アカウントは Space の作成時に紐付けが必要になる Space≒組織 Project Project ・Repository ・Workflow ・Dev Enviroments ・AWS Enviroment ・Repository ・Workflow ・Dev Enviroments ・AWS Enviroment
  7. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. AWS アカウント周りの注意点

    ・デプロイ先の指定で紐付けが必要 ・デプロイ用の IAM ロールの作成も必要 ・CodeCatalyst の利用は us-east-2, eu-west-1 ・他リージョン、アカウントへのデプロイも可能 BluePrint からの作成例↓
  8. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. BluePrint or

    not ? ・とりあえず試してみるには BluePrint が良い ・ボタンクリックだけで Workflow, Deploy まで実行できる ・チーム開発の時は from Scratch から作成するのがおすすめ ・Workflow(後述)の YAML ファイルの参考で使うのもアリ
  9. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. 他の人に開発環境を渡す時の悩み Python

    入れてください! Python をパッケージマネージャーで・・・ パッケージマネージャがダメならバイナリファイルを・・・ Docker と git と CDK と・・・ Node.js もお願いします main ブランチから git clone してださい 何言ってるかわからないしうまく動かない・・・ 開発にJoin したメンバー (初心者)
  10. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. Dev Enviroments

    の素晴らしいところ ・数クリックでほぼ全部入りの開発環境が立ち上がる - Docker, Helm, AWS CLI, SAM CLI, CDK CLI - Node.js, Python, Go, Ruby, Java, PHP ・指定のブランチから git clone もしてくれる ・ネットワークが爆速(npm install とか特に) ・localhost もちゃんと繋がる! ・ローカルマシンのグローバル環境が汚れない
  11. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. VSCode +

    Remote SSH 2 vCPU, 4GB RAM 16GB Storage VSCode Extention Remote-SSH ローカルマシン Small, Medium, Large, XLarge ・vCPU: 2-16 ・RAM: 4-32GB ・Storage: 16-64GB
  12. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. バックエンド+フロントエンドの開発 Dev

    Environments VSCode Extention Remote-SSH ローカルマシン Dev Environments ・開発用コンテナのように使い捨てもできる ・環境が独立しているので重くなりづらい
  13. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. Workflow 機能

    ・CI/CD パイプラインを簡単に作れる 実態は .codecatalyst/workflow.yaml ・よく使う Actions は GUI で設定可 Build, Test, CDK Deploy など ・カスタムアクションも作れるらしい
  14. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. 例:CDK の

    Workflow ・Trigger: main ブランチにマージされた時 ・CI: Linter, Formatter, テストの実行 ・CD: CDK Bootstrap, CDK Deploy
  15. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. 例:CDK の

    Workflow - トリガーの設定 Triggers: - Type: PULLREQUEST Events: - OPEN - REVISION Branches: - .* FilesChanged: - filename.txt - src\/.* Type: PUSH, PULLREQUEST Events: OPEN, REVISION Branches: 正規表現可能 例: features\/.* FilesChanged: ファイル指定可能 workflow.yaml
  16. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. 例:CDK の

    Workflow - CI workflow.yaml Test: Identifier: aws/[email protected] Inputs: Sources: - WorkflowSource Outputs: AutoDiscoverReports: Enabled: true ReportNamePrefix: rpt Configuration: Steps: - Run: run-tests -h ・定型 Actions と GUI から設定するだけ! ・デフォルトのテストコマンドから変更する必要 はあり ・テストレポートも作成できる作成できる
  17. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. 例:CDK の

    Workflow - CD AWSCDKDeploy: Identifier: aws/[email protected] Environment: Connections: - Role: RoleName Name: "888899998888" Name: development Inputs: Sources: - WorkflowSource Compute: Type: EC2 Configuration: StackName: StackName ・デプロイ先の AWS アカウント ・Role ・StackName を設定する必要あり workflow.yaml
  18. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. 継続的インテグレーション -

    テストピラミッド 引用:継続的インテグレーションと継続的デリバリーにおけるテストステージ https://docs.aws.amazon.com/whitepapers/latest/practicing-continuous-integration-continuous-delivery/testing-stages-in-continuous-integration-and-continuous-delivery.html
  19. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. なぜテストが必要か? ・ソフトウェアの品質を担保できる

    少人数でやるからこそ必要 → ブランチをマージした時に既存の機能が担保できない ・工数は1.5倍〜2倍かかる 限られたリソース(人的資源)のなかで、どこまでやるか → フロントエンドは少なめ、バックエンドは重めの比重に 開発プロセス上、変更時にテストが通っているか確認が必要
  20. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. CodeCatalyst におけるテスト統合

    - Report ・JUnit のレポート出力ができる UnitTest, CoverageTest, BranchTest ・Criteria の設定もできる SuccessCriteria, PassRate, Vulnerabilities… - ESLint の静的解析の結果 → StaticAnalysisBug - Amazon CodeGuru との統合 → StaticAnalysisSecurity
  21. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. 自動デプロイの Pros.

    / Cons. ・Pros. - オペミスの可能性を防げる - あの人(デプロイ職人)がいないとデプロイできない!がなくなる ・Cons. - 自動ロールバックどうするか? - デプロイ戦略はどうするか? → 考えることが多くなる(システム要件とエラーの許容度合による) SRE などの観点からもどこまで自動化するかはケースバイケース 自動化実装する労力とのトレードオフになる → CodeCatalyst で省力化
  22. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. 業務用省エネサービス「Mys3(ミース)」 •

    多額の初期投資が必要 • 既設設備の停止期間や大掛かりな工事が必要 • 中小規模向けの選択肢(少機能・低価格)が少ない。 Make your smart solution service Mys(ミース): スウェーデン語で“楽しい・心地よい” の意 最新の技術を活用した多様なサービスで、お客さまの楽しい・心地よ いを創造する意図を込めている。 業務用のお客さまで省エネ設備を導入する際の課題 こうしたお客さまの課題を、デジタル技術を用いて解決 北ガスグループ 独自開発
  23. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. 当社の開発のカルチャー ・エンジニア4人,

    デザイナー1人+新人, PdO 1人(制約条件多数) 運用もエンジニア4人 DevOps, SRE, Feature 開発... 内製プロダクトで PoC → 商用リリースに昇華 ・Git-Flow を採用 ・IaC (Infrastructure as Code) として AWS CDK を採用 ・Linter, Formatter, テストは最近導入した 人が少ない中で、できるだけプロダクトの信頼性を上げたい 人に依存しがちなため、最大限自動化したい
  24. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. Issue 機能もあるし新しいサービス

    使うの楽しそうだからやりましょう! CodeCatalyst の採用に至った経緯 本番リリースの1ヶ月前に CodeCatalyst 導入を決定(←!?) ・CodeCommit で Issue 機能が欲しい ・CodePipeline でマルチアカウントのデプロイ管理をするのがつらい ・Github はシステム管理部門との調整ですんなりは使えなさそう CodeCatalyst というサービスがありまして … AWS SA 飯田さん Genki (CDK for Python から Typescript に書き換える作業中)
  25. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. アーキテクチャ 運用監視


    可視化画面
 
 運用管理画面
 お客さま画面
 データ連携
 分析
 保存
  状態管理
 収集・処理
 ネットワーク
 機器接続
 AWS IoT Core
 Lambda function DyanmoDB IoT Shadow
 Amazon 
 API Gateway
 AWS Amplify 認証・認可
 Amazon Timestream クエリ
 遠隔指令
 お客さま
 管理者
 Amazon Kinesis Data Firehose S3
 VPC
 AWS Fargate 外部連携
 
 
 
 
 ゲートウェ イ
 生データ
 センサー値
 Cognito Aurora Serverless 4G/LTE
 連携
 SORACOM APIなど
 インターネット
 設定値
 AWS CDK 制御対象 デバイス QuickSight 短期データ
 中長期データ
 AWS X-Ray
  26. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. デプロイ先の各環境の役割 dev

    (開発環境) stage (テスト環境) prod (本番環境) dev (開発環境) prod (本番環境) IoT 側の要件と予算の区別の関係から1:1の関係にはできなかった
  27. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. バックエンドの CI/CD

    の問題点 dev (開発環境) stage (テスト環境) 開発者 git push プルリク 作成・承認 cdk deploy(手動) prod (本番環境) CodeCommit Cloud9 Cloud9 cdk deploy Stage 環境のデプロイ用 ロールに Switch Role Cloud9 cdk deploy prod 環境のデプロイ用 ロールに Switch Role AWS CLI で Switch Role するのがちょっと面倒 承認とデプロイが同期されていないためデプロイ忘れが多発 オペレーションミスで本番環境にデプロイしてしまったことも・・・
  28. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. バックエンド -

    CI/CD パイプライン with CodeCatalyst dev (開発環境) stage (テスト環境) 開発者 Repo git push Workflow Repo/ Issue プルリク 作成 Workflow 承認 デプロイ デプロイ prod (本番環境) 手動テスト (デバイス) Workflow Repo デプロイ プルリク 作成 承認 CodeCatalyst
  29. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. バックエンド -

    CI/CD パイプライン with CodeCatalyst dev (開発環境) stage (テスト環境) 開発者 Repo git push Workflow Repo/ Issue プルリク 作成 Workflow 承認 デプロイ デプロイ prod (本番環境) 手動テスト (デバイス) Workflow Repo デプロイ プルリク 作成 承認 CodeCatalyst Linter, Fomatter 単体テスト, 結合テスト Linter, Fomatter 単体テスト, 結合テスト (重複するがプルリクから直接 参照できるので実施) E2E テスト Device Simulator (Feature Works)
  30. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. フロントエンドの CI/CD

    の問題点 dev (開発環境) stage (テスト環境) prod (本番環境) 開発者 CodeCommit CodePipeline CodeBuild git push ビルド デプロイ 手動承認 CodeBuild ビルド デプロイ Amplify Cloudfront Cloudfront CodeCommit プルリク作 成 承認 CI/CDは問題ないがローカルの yarn dev で2〜3分待たされるのがストレス
  31. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. フロントエンド -

    CI/CD パイプライン with CodeCatalyst dev (開発環境) stage (テスト環境) prod (本番環境) 開発者 Amplify Cloudfront Cloudfront CodeCatalyst Repo git push Workflow Issue プルリク 作成 Workflow 承認 デプロイ Workflow Repo プルリク 作成 承認 Dev Environments 快適に yarn dev
  32. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. チームコラボレーション -

    Issue の管理 ・Backlog から移行 ・開発のタスクはページがまたぐのが少し ストレスになっていた ・プルリクに紐づけられる ・フィルターとビューの機能が便利 https://codecatalyst.aws/explore より引用
  33. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. 開発者体験の向上 ・バックエンド

    - Cloud9 / Local から cdk deploy → git push するだけでデプロイ - プルリクの時に自動テスト、Reviewer, Reviewee どちらも安心 - プルリクベースでの承認に変更 ・フロントエンド - ローカルでの開発用サーバーが格段に早くなった ・チームコラボレーション - 直接プルリクに紐づけられるので可視性が高くなった - タスク管理がより楽になった
  34. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. アーキテクチャの変遷 -

    2020年 PoC 段階 引用:ユーティリティにおける AWS IoTを用いた分析・可視化(北海道ガス株式会社の事例) https://aws.amazon.com/jp/blogs/news/analytics-and-visualization-with-aws-iot-in-utilities/ 1アカウント運用、お客さま提供機能もなく考えることも少なかった
  35. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. アーキテクチャの変遷 -

    現在(商用リリース版) 運用監視
 可視化画面
 
 運用管理画面
 お客さま画面
 データ連携
 分析
 保存
  状態管理
 収集・処理
 ネットワーク
 機器接続
 AWS IoT Core
 Lambda function DyanmoDB IoT Shadow
 Amazon 
 API Gateway
 AWS Amplify 認証・認可
 Amazon Timestream クエリ
 遠隔指令
 お客さま
 管理者
 Amazon Kinesis Data Firehose S3
 VPC
 AWS Fargate 外部連携
 
 
 
 
 ゲートウェ イ
 生データ
 センサー値
 Cognito Aurora Serverless 4G/LTE
 連携
 SORACOM APIなど
 インターネット
 設定値
 AWS CDK 制御対象 デバイス QuickSight 短期データ
 中長期データ
 AWS X-Ray
  36. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. アーキテクチャの変遷 -

    DevOps + SRE ・商用リリース後の複雑さ - 人数が少ない制約条件の中、CI/CD によって自動化が必須 - デバイスのキッティング、疎通テスト、OTA アップデートのプロセス ・技術的負債の解消 - CDK for Python を TypeScript に移行 - Vue.js を React.js に移行 ・SRE の第一歩 - そもそも SRE を考え出したのも半年前 - テストの導入 - 今ある機能を正常に動かしつつ、新しい機能を開発しなければいけない
  37. Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. まとめ ・CodeCatalyst

    で開発者体験が格段に上がった ・AWS アカウントの連携が楽でマルチアカウントへのデプロイも簡単 ・DevOps や SRE の観点でも省力化できた ・少人数でやりきるために必要なツールが揃っている