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
Amazon CodeCatalyst で実現!開発環境とCI/CDパイプライン
Search
Genki Ogasawara
October 07, 2023
0
7.7k
Amazon CodeCatalyst で実現!開発環境とCI/CDパイプライン
Genki Ogasawara
October 07, 2023
Tweet
Share
More Decks by Genki Ogasawara
See All by Genki Ogasawara
サーバレスで挑む IoT プロジェクトの現実解 / Real solutions for the IoT project using serverless service
genkiogasawara
1
180
クラウドのスケーリングの力で5時間 かかるバッチジョブを10分に短縮する / Reduce the batch job time by a 36th using the power of scaling in the public cloud
genkiogasawara
1
16
IT知識ゼロからのスタートで、 事業部における内製開発をどうやって 推進してきたか?/How did we promote in-house development by starting from scratch?
genkiogasawara
1
190
クラウドネイティブな省エネサービスの内製開発で、BizDevOpsを実現する / Achieving BizDevOps in in-house development of cloud-native energy-saving services
genkiogasawara
2
810
エンジニアゼロの組織から内製開発の DX をどう実現したのか / How did we achieve DX in in-house development in an organization with zero engineers?
genkiogasawara
9
4.1k
入門 AWS Amplify Gen2 / Introduction to AWS Amplify Gen2
genkiogasawara
1
830
ソフトウェア開発の生産性と信頼性向上に取り組んだ結果、どうなった?/What has changed as a result of efforts to improve software development productivity and reliability?
genkiogasawara
0
85
「魔の川」「死の谷」をクラウド ネイティブなチーム作りで越境する / Crossing the "Devil River" and "Death Valley" by building cloud-native teams
genkiogasawara
2
500
Featured
See All Featured
Designing for humans not robots
tammielis
250
25k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
The Cult of Friendly URLs
andyhume
78
6k
Art, The Web, and Tiny UX
lynnandtonic
297
20k
Become a Pro
speakerdeck
PRO
25
5k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
GitHub's CSS Performance
jonrohan
1030
460k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
28
2k
Fashionably flexible responsive web design (full day workshop)
malarkey
405
65k
We Have a Design System, Now What?
morganepeng
50
7.2k
Making the Leap to Tech Lead
cromwellryan
133
8.9k
Transcript
Amazon CodeCatalyst で実現! 開発環境とCI / CD パイプライン 北海道ガス株式会社 小笠原元気
Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. 自己紹介 Genki
(小笠原 元気) 北海道ガス株式会社(2017〜) ・Job, Role フロントエンド・バックエンド両方やる人 開発チーム(4人)の技術突っ走る担当 趣味:旅行・筋トレ 最近興味があること:DevOps, SRE ・好きな AWS サービス Amazon CodeCatalyst, AWS CDK @geivk
Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. 北海道ガス株式会社 主要事業内容
本社所在地 従業員数 沿革 1911年 設立 ガス事業 電気供給業 ガス機器販売 907名 札幌市東区北7条東2丁目1-1 売上高 1,748億円(連結) 2023年10月7日時点 お客さま 件数 ガス:600,882件 電力:234,083件 会社概要
Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. Agenda ・Amazon
CodeCatalyst とは ・開発環境 ・CI / CD パイプラインの構築 ・チーム開発における用途とプラクティス ・採用した背景、解決した課題 ・バックエンドとフロントエンドの CI/CD
Amazon CodeCatalyst とは
🙅 Amazon Code Catalyst 🙆 Amazon CodeCatalyst
引用:https://aws.amazon.com/jp/about-aws/whats-new/2023/04/general-availability-amazon-codecatalyst/ eu-west-1(アイルランド) でも利用可能になっていました
Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. Amazon CodeCatalyst
が提供するサービス 引用:https://aws.amazon.com/jp/codecatalyst/ ソースコードからサービス 設定まで、必要なものをほ ぼすべて備えたブループリ ントを使用して、新しいプロ ジェクトを数分で開始できま す。 プロジェクト用に完全に構 成されたクラウドベースで 個人用の開発環境をすば やく作成し、一般的な統合 開発環境 (IDE) と連携でき ます。 継続的インテグレーション およびデリバリー (CI/CD) パイプラインを簡単に定義 し、スケーラブルなマネージ ドコンピューティング環境で 自動的に実行できます。 統合されたアクティビティ フィード、リアルタイム通 知、および共有開発リソー スを使用して、効率的にコ ラボレーションできます。 プロジェクト管理 IDE コラボレーション CI / CD
Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. Code シリーズとの比較
CodeCommit CodeBuild CodePipeline Cloud9
Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. Amazon CodeCatalyst
が提供するサービス Issue管理 Slack統合 ソースコードからサービス 設定まで、必要なものをほ ぼすべて備えたブループリ ントを使用して、新しいプロ ジェクトを数分で開始できま す。 プロジェクト用に完全に構 成されたクラウドベースで 個人用の開発環境をすば やく作成し、一般的な統合 開発環境 (IDE) と連携でき ます。 継続的インテグレーション およびデリバリー (CI/CD) パイプラインを簡単に定義 し、スケーラブルなマネージ ドコンピューティング環境で 自動的に実行できます。 統合されたアクティビティ フィード、リアルタイム通 知、および共有開発リソー スを使用して、効率的にコ ラボレーションできます。 プロジェクト管理 IDE コラボレーション CI / CD 引用:https://aws.amazon.com/jp/codecatalyst/
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
Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. AWS アカウント周りの注意点
・デプロイ先の指定で紐付けが必要 ・デプロイ用の IAM ロールの作成も必要 ・CodeCatalyst の利用は us-east-2, eu-west-1 ・他リージョン、アカウントへのデプロイも可能 BluePrint からの作成例↓
BluePrint
None
None
Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. BluePrint or
not ? ・とりあえず試してみるには BluePrint が良い ・ボタンクリックだけで Workflow, Deploy まで実行できる ・チーム開発の時は from Scratch から作成するのがおすすめ ・Workflow(後述)の YAML ファイルの参考で使うのもアリ
開発環境 - Dev Environments (IDE)
Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. 他の人に開発環境を渡す時の悩み Python
入れてください! Python をパッケージマネージャーで・・・ パッケージマネージャがダメならバイナリファイルを・・・ Docker と git と CDK と・・・ Node.js もお願いします main ブランチから git clone してださい 何言ってるかわからないしうまく動かない・・・ 開発にJoin したメンバー (初心者)
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 もちゃんと繋がる! ・ローカルマシンのグローバル環境が汚れない
IDE なに使ってますか?🤔
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
Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. バックエンド+フロントエンドの開発 Dev
Environments VSCode Extention Remote-SSH ローカルマシン Dev Environments ・開発用コンテナのように使い捨てもできる ・環境が独立しているので重くなりづらい
CI/CD パイプライン - Workflow
Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. Workflow 機能
・CI/CD パイプラインを簡単に作れる 実態は .codecatalyst/workflow.yaml ・よく使う Actions は GUI で設定可 Build, Test, CDK Deploy など ・カスタムアクションも作れるらしい
Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. 例:CDK の
Workflow ・Trigger: main ブランチにマージされた時 ・CI: Linter, Formatter, テストの実行 ・CD: CDK Bootstrap, CDK Deploy
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
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 から設定するだけ! ・デフォルトのテストコマンドから変更する必要 はあり ・テストレポートも作成できる作成できる
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
CI / CD
None
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
ちゃんと考え始めたのは実は半年前
Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. なぜテストが必要か? ・ソフトウェアの品質を担保できる
少人数でやるからこそ必要 → ブランチをマージした時に既存の機能が担保できない ・工数は1.5倍〜2倍かかる 限られたリソース(人的資源)のなかで、どこまでやるか → フロントエンドは少なめ、バックエンドは重めの比重に 開発プロセス上、変更時にテストが通っているか確認が必要
Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. CodeCatalyst におけるテスト統合
- Report ・JUnit のレポート出力ができる UnitTest, CoverageTest, BranchTest ・Criteria の設定もできる SuccessCriteria, PassRate, Vulnerabilities… - ESLint の静的解析の結果 → StaticAnalysisBug - Amazon CodeGuru との統合 → StaticAnalysisSecurity
Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. CodeCatalyst におけるテスト統合
- Report
いつまで手動でデプロイ しているんですか? 「継続的デリバリー」 Jez Humble, David Farley 2017 より引用
Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. 自動デプロイの Pros.
/ Cons. ・Pros. - オペミスの可能性を防げる - あの人(デプロイ職人)がいないとデプロイできない!がなくなる ・Cons. - 自動ロールバックどうするか? - デプロイ戦略はどうするか? → 考えることが多くなる(システム要件とエラーの許容度合による) SRE などの観点からもどこまで自動化するかはケースバイケース 自動化実装する労力とのトレードオフになる → CodeCatalyst で省力化
チーム開発における用途とプラクティス
Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. 業務用省エネサービス「Mys3(ミース)」 •
多額の初期投資が必要 • 既設設備の停止期間や大掛かりな工事が必要 • 中小規模向けの選択肢(少機能・低価格)が少ない。 Make your smart solution service Mys(ミース): スウェーデン語で“楽しい・心地よい” の意 最新の技術を活用した多様なサービスで、お客さまの楽しい・心地よ いを創造する意図を込めている。 業務用のお客さまで省エネ設備を導入する際の課題 こうしたお客さまの課題を、デジタル技術を用いて解決 北ガスグループ 独自開発
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, テストは最近導入した 人が少ない中で、できるだけプロダクトの信頼性を上げたい 人に依存しがちなため、最大限自動化したい
Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. Issue 機能もあるし新しいサービス
使うの楽しそうだからやりましょう! CodeCatalyst の採用に至った経緯 本番リリースの1ヶ月前に CodeCatalyst 導入を決定(←!?) ・CodeCommit で Issue 機能が欲しい ・CodePipeline でマルチアカウントのデプロイ管理をするのがつらい ・Github はシステム管理部門との調整ですんなりは使えなさそう CodeCatalyst というサービスがありまして … AWS SA 飯田さん Genki (CDK for Python から Typescript に書き換える作業中)
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
Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. デプロイ先の各環境の役割 dev
(開発環境) stage (テスト環境) prod (本番環境) dev (開発環境) prod (本番環境) IoT 側の要件と予算の区別の関係から1:1の関係にはできなかった
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 するのがちょっと面倒 承認とデプロイが同期されていないためデプロイ忘れが多発 オペレーションミスで本番環境にデプロイしてしまったことも・・・
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
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)
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分待たされるのがストレス
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
Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. チームコラボレーション -
Issue の管理 ・Backlog から移行 ・開発のタスクはページがまたぐのが少し ストレスになっていた ・プルリクに紐づけられる ・フィルターとビューの機能が便利 https://codecatalyst.aws/explore より引用
Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. 開発者体験の向上 ・バックエンド
- Cloud9 / Local から cdk deploy → git push するだけでデプロイ - プルリクの時に自動テスト、Reviewer, Reviewee どちらも安心 - プルリクベースでの承認に変更 ・フロントエンド - ローカルでの開発用サーバーが格段に早くなった ・チームコラボレーション - 直接プルリクに紐づけられるので可視性が高くなった - タスク管理がより楽になった
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アカウント運用、お客さま提供機能もなく考えることも少なかった
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
Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. アーキテクチャの変遷 -
DevOps + SRE ・商用リリース後の複雑さ - 人数が少ない制約条件の中、CI/CD によって自動化が必須 - デバイスのキッティング、疎通テスト、OTA アップデートのプロセス ・技術的負債の解消 - CDK for Python を TypeScript に移行 - Vue.js を React.js に移行 ・SRE の第一歩 - そもそも SRE を考え出したのも半年前 - テストの導入 - 今ある機能を正常に動かしつつ、新しい機能を開発しなければいけない
Copyright Hokkaido Gas Co.,Ltd. - All rights reserved. まとめ ・CodeCatalyst
で開発者体験が格段に上がった ・AWS アカウントの連携が楽でマルチアカウントへのデプロイも簡単 ・DevOps や SRE の観点でも省力化できた ・少人数でやりきるために必要なツールが揃っている
https://pages.awscloud.com/eib-energy-tech-forum-231012-reg.html?trk=aws_event_page&sc_channel=el AWS IoT を活用した業務用分野における エネルギーマネジメントシステムの開発 北海道ガス株式会社 國奥 広伸 10月12日(木) 9:00〜12:00
2023/11/4(日) にやります!!!! @北ガスグループ本社ビル(札幌駅から徒歩10分) https://connpass.com/event/295336/
Thank you !