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

GitHubで実践するIoT開発のDevOps

 GitHubで実践するIoT開発のDevOps

SORACOM Discovery 2023のCFPセッションの資料です。
GitHubを使って、SORACOM Orbitの開発運用のCI/CDパイプラインを作りました。カスタムアクションを使うことで可読性が高く使い回ししやすいワークフローを作ることができます。

Ken'ichirou Kimura

July 28, 2023
Tweet

More Decks by Ken'ichirou Kimura

Other Decks in Technology

Transcript

  1. 自己紹介 株式会社オルターブース クラウドソリューション部 副部⾧ 木村 健一郎(Kenichiro KIMURA) 大学院在籍中に未踏ソフトウェア創造事業に 採択され、その成果を元に設立したスタート アップに20年在籍。

    2014年頃からクラウドの世界に触れる中で サーバレスとIoTに魅せられ、JAWS-UG福岡 やSORACOM UG九州のコアメンバーとして コミュニティ活動を行っている。 2020年にオルターブースにジョイン。テッ クリードとしてお客様の支援やプロダクトの 開発に従事している。 家に帰ると5歳の娘と戯れる日々。 AWS Samurai2019受賞 SORACOM MVC2020受賞 Twitter: @show_m001(しょーちゃん) Copyright © Alterbooth Inc. All Rights Reserved. 2
  2. Copyright © Alterbooth Inc. All Rights Reserved. 4 株式会社オルターブース 会社名

    〒812-0016 福岡市博多区博多駅南2-1-9 博多筑紫通りセンタービル8F 所在地 2015年3月19日 設立 1億472万5千円 資本金 25人(役員除く) 従業員 代表取締役 CEO 小島 淳 取締役 田中 務 取締役 嘉門 健一郎 監査役 仲田 和正 役員 西日本シティ銀行 みずほ銀行 北九州銀行 取引銀行 (1)クラウドコンピューティングを活用したシステム企画・開 発及び運営 (2)インターネット関連システムの企画・開発及び運用 (3)SaaS、ASPサービス及びIT商品の企画・開発及び運営 (4)前各号に附帯又は関連する一切の事業 事業内容 インフォコム株式会社 主要株主 日本マイクルソフト株式会社オイシックス・ラ・大地株式会社 インフォコム株式会社 株式会社博報堂DYメディアパートナー ズ EYストラテジー・アンド・コンサルティング株式会社 株式 会社エフ・ジェイエンターテイメントワークス その他 主要取引先 2023年7月1日現在 Alterbooth HISTORY 福岡県福岡市中央区にて株式会社オルターブース設立 3月 2015年 福岡県北九州市にて北九州ブランチオフィス開設 5月 2016年 Microsoft Partner Network Cloud Platform Silver Competency 取得 6月 Microsoft Innovation Award サムライインキュベート賞 受賞 3月 2017年 福岡市外提供する官民連携インキュベート施設Fukuoka Growth Nextに天神ブラン チオフィス開設 4月 Japan Microsoft Partner of the Year 2017 OSS on Azure賞 受賞 8月 Microsoft Cloud Solution Indirect Reseller認定 1月 2018年 事業会社よりシードラウンド増資を実施 2月 Microsoft Partner Network Cloud Platform Gold Competency 取得 9月 Japan Microsoft Partner of the Year 2019 特別賞 受賞 8月 2019年 複数VCよりプレシリーズAラウンド増資を実施 9月 2019年 Japan Microsoft Partner of the Year 2020 App Modernization賞 受賞 LINE Biz Partner Program コミュニケーション部門にてTechnology パートナー 認定 8月 2020年 株式会社エフ・ジェイエンターテイメントワークスと事業提携 複合型施設向けLINEモバイルオーダー FooPass を共同リリース 12月 Japan Microsoft Partner of the Year 2021 OSS on Azure賞 受賞 8月 2021年 LINE株式会社、日本マイクロソフト株式会社と小売業のDX支援を目的とした共同プロ ジェクトに参画 10月 2021年 インフォコム株式会社と資本業務提携実施、インフォコムグループに参画する 2月 2022年
  3. Copyright © Alterbooth Inc. All Rights Reserved. 5 株式会社オルターブース 会社名

    〒812-0016 福岡市博多区博多駅南2-1-9 博多筑紫通りセンタービル8F 所在地 2015年3月19日 設立 1億472万5千円 資本金 25人(役員除く) 従業員 代表取締役 CEO 小島 淳 取締役 田中 務 取締役 嘉門 健一郎 監査役 仲田 和正 役員 西日本シティ銀行 みずほ銀行 北九州銀行 取引銀行 (1)クラウドコンピューティングを活用したシステム企画・開 発及び運営 (2)インターネット関連システムの企画・開発及び運用 (3)SaaS、ASPサービス及びIT商品の企画・開発及び運営 (4)前各号に附帯又は関連する一切の事業 事業内容 インフォコム株式会社 主要株主 日本マイクルソフト株式会社オイシックス・ラ・大地株式会社 インフォコム株式会社 株式会社博報堂DYメディアパートナー ズ EYストラテジー・アンド・コンサルティング株式会社 株式 会社エフ・ジェイエンターテイメントワークス その他 主要取引先 2023年7月1日現在 Alterbooth HISTORY 福岡県福岡市中央区にて株式会社オルターブース設立 3月 2015年 福岡県北九州市にて北九州ブランチオフィス開設 5月 2016年 Microsoft Partner Network Cloud Platform Silver Competency 取得 6月 Microsoft Innovation Award サムライインキュベート賞 受賞 3月 2017年 福岡市外提供する官民連携インキュベート施設Fukuoka Growth Nextに天神ブラン チオフィス開設 4月 Japan Microsoft Partner of the Year 2017 OSS on Azure賞 受賞 8月 Microsoft Cloud Solution Indirect Reseller認定 1月 2018年 事業会社よりシードラウンド増資を実施 2月 Microsoft Partner Network Cloud Platform Gold Competency 取得 9月 Japan Microsoft Partner of the Year 2019 特別賞 受賞 8月 2019年 複数VCよりプレシリーズAラウンド増資を実施 9月 2019年 Japan Microsoft Partner of the Year 2020 App Modernization賞 受賞 LINE Biz Partner Program コミュニケーション部門にてTechnology パートナー 認定 8月 2020年 株式会社エフ・ジェイエンターテイメントワークスと事業提携 複合型施設向けLINEモバイルオーダー FooPass を共同リリース 12月 Japan Microsoft Partner of the Year 2021 OSS on Azure賞 受賞 8月 2021年 LINE株式会社、日本マイクロソフト株式会社と小売業のDX支援を目的とした共同プロ ジェクトに参画 10月 2021年 インフォコム株式会社と資本業務提携実施、インフォコムグループに参画する 2月 2022年 2022年 2月 インフォコム株式会社と資本業 務提携実施、インフォコムグループに参画す る
  4. オルターブースの強み Copyright © Alterbooth Inc. All Rights Reserved. 7 オルターブースは創業以来一貫してクラウドに関する課題解決のご支援をしております。

    特にMicrosoft AzureはMicrosoft MVPが多数在籍する当社にとっての強みとなっております。 当社の特徴はレガシーアプリケーションをクラウドへモダナイズすることです。DXを実現するために 必ず必要なもの、それはクラウドです。そのクラウドで実現できるDXを強力にサポートするのがオル ターブースです。 GitHub Services and Channel Partners LINE Technology Partner
  5. • DevOpsを実践することで、より安全に、より短時間でお客様に価値を届けら れるようになります • DevOpsはハードウェアやIoTの現場でも実践可能です • 例として、SORACOM Orbitを使う開発現場で、DevOpsの重要な要素である CI/CDパイプラインを構築した事例を紹介します •

    GitHubカスタムアクションを作成すると、より可読性が高く、メンテナンス しやすく、再利用しやすいワークフローを作成できます • ソースコードは全て公開していますので、ぜひ他のSORACOMプラットフォームを操作する アクションも作ってみてください いきなりですが、本日のまとめです Copyright © Alterbooth Inc. All Rights Reserved. 8
  6. • Dev(開発)とOps(運用)が連 携して協力する開発手法 • DevOps は エンドユーザーに価値を継続的 に提供できるようにするための 人、プロセス、製品の集合 Copyright

    © Alterbooth Inc. All Rights Reserved. DevOps とは? • People. Process. Products. ” Build & Test Continuous Delivery Deploy Operate Monitor & Learn Plan & Track Develop “
  7. DevOpsを成功させるための“パイプライン” Copyright © Alterbooth Inc. All Rights Reserved. 18 •

    開発者がデプロイボタンを押してからサーバー側に反映されるまでの道のりを 可視化したもの • 基本的にすべて自動で進行するようにする • 自動化するためにはAPIで制御できるプラットフォームを利用する • 自動化することでデプロイに関しての制約がほぼなくなり、いつでもリリース できるようになる • いつでも必ず同じ動作をするように自動化する
  8. (前略) この形式の迅速な反復と改善されたフローは、ソフトウェアまたは小規模なアプ リケーションやシステムにのみ適用されるという業界全体の誤解があります。 (中略) DevOpsから学んだ理論と実践を適用することは、複雑なサイバーフィジカルシ ステムの開発を劇的に改善する可能性を秘めています。 Industrial DevOps Applying DevOps

    and Continuous Delivery to Significant Cyber-Physical Systems Suzette Johnson, Harry Koehneman, Diane LaFortune, Dean Leffingwell, Stephen Magill (DevOps Enterprise Forum white paper,2018) https://myresources.itrevolution.com/id006657038/Industrial-DevOps Industrial DevOps: Applying DevOps for Hardware, Firmware, and Software Copyright © Alterbooth Inc. All Rights Reserved. 19
  9. IoTを構成する三要素 Copyright © Alterbooth Inc. All Rights Reserved. 26 センサー/デバイス

    “モノ” ネットワーク クラウド 現場の「モノ」や「コト」をデジタル化し、クラウドで情報を蓄積・処理して価値を生み出す
  10. 各要素のCI/CD Copyright © Alterbooth Inc. All Rights Reserved. 27 センサー/デバイス

    “モノ” ネットワーク クラウド クラウドサービスのCI/CDは多くの実例があり、ツールも充実しています 例) GitHub Actions Azure DevOps AWS CodeBuild/CodeDeploy Jenkins
  11. Copyright © Alterbooth Inc. All Rights Reserved. 28 センサー/デバイス “モノ”

    ネットワーク クラウド エッジデバイスのプログラムのCI/CDは、近年環境が整いつつあります 例)Device Update for Azure IoT Hub AWS IoT Greengrass
  12. Copyright © Alterbooth Inc. All Rights Reserved. 29 センサー/デバイス “モノ”

    ネットワーク クラウド SORACOMサービスを使うと、データをクラウドサービスに届ける処理の 開発・運用が非常に便利になります。 そして、何より重要なこととしてAPIで制御できるという特徴があります。
  13. Copyright © Alterbooth Inc. All Rights Reserved. 30 • DevOpsの中核を担うCI/CDのパイプラインは、「自動化する」ことが重要

    • 自動化のためにはAPIで制御できるプラットフォームが必要 • SORACOMプラットフォームはAPIで制御できる SORACOMプラットフォームを使うことで、 IoTのネットワーク部分も CI/CDパイプラインに含めることが可能
  14. • ビルドやテストが手動 • ブランチにマージされたコードがテストを通ったものかが分からない • テストをしなくてもmasterブランチにコードをマージできてしまう • テスト環境/本番環境へのデプロイが手動 • デプロイ時に誤ったsoraletをアップロードしてしまう

    • SORACOM Orbitにはsoraletのバージョン管理機能はあるが、本番/テスト環境(SIMグルー プ)から参照するsoraletのバージョンの付け替えが手動だと、どのバージョンが正しく動い ているものかの管理が難しい この手順での問題点と起こりうる事故 Copyright © Alterbooth Inc. All Rights Reserved. 34
  15. パイプライン概要 workflow.yml パイプラインの全体象は、こ のようになります。 Copyright © Alterbooth Inc. All Rights

    Reserved. 37 on: push: branches: [master,staging] jobs: build-and-test: steps: - チェックアウト - ビルド - テスト - Artifactにsoraletのバイナリをアップロード deploy: needs: build-and-test steps: - Artifactをダウンロード - soraletをアップロード - ブランチに対応するSIMグループの参照している soraletバージョンを、アップロードしたものに変更
  16. パイプライン概要 workflow.yml on:で、実行の契機を指定し ます Copyright © Alterbooth Inc. All Rights

    Reserved. 38 on: push: branches: [master,staging] jobs: build-and-test: steps: - チェックアウト - ビルド - テスト - Artifactにsoraletのバイナリをアップロード deploy: needs: build-and-test steps: - Artifactをダウンロード - soraletをアップロード - ブランチに対応するSIMグループの参照している soraletバージョンを、アップロードしたものに変更
  17. パイプライン概要 workflow.yml jobs:に実行する処理を書き ます。 ここではbuild-and-testと deployの2つのステージがあ ります。 Copyright © Alterbooth

    Inc. All Rights Reserved. 39 on: push: branches: [master,staging] jobs: build-and-test: steps: - チェックアウト - ビルド - テスト - Artifactにsoraletのバイナリをアップロード deploy: needs: build-and-test steps: - Artifactをダウンロード - soraletをアップロード - ブランチに対応するSIMグループの参照している soraletバージョンを、アップロードしたものに変更
  18. パイプライン概要 workflow.yml on: push: branches: [master,staging] jobs: build-and-test: steps: -

    チェックアウト - ビルド - テスト - Artifactにsoraletのバイナリをアップロード deploy: needs: build-and-test steps: - Artifactをダウンロード - soraletをアップロード - ブランチに対応するSIMグループの参照している soraletバージョンを、アップロードしたものに変更 今回は、この部分を作ります Copyright © Alterbooth Inc. All Rights Reserved. 40
  19. cliコマンドでの記述 アップロード部分のみ抜粋 steps: - Artifactをダウンロード - name: install soracom-cli run:

    curl –fsSL https://url-of-soracom- cli/install.sh | bash - name: upload env: AUTH_KEY: ${{ secrets.AUTH_KEY }} AUTH_KEY_ID: ${{ secrets.AUTH_KEY_ID}} SORALET_ID: ${{ env.SORALET_ID }} run: | /usr/local/bin/soracom --auth-key-id $AUTH_KEY_ID --auth-key $AUTH_KEY soralets upload --soralet-id $SORALET_ID --body @soralet-optimized.wasm GitHub Actionsのワークフ ローには、シェルで実行する コマンドをそのまま記載でき ます。 つまり、ワークフローを実行 する環境(コンテナ)に soracom cliさえインストー ルしてしまえばSORACOMプ ラットフォームの操作は何と かなります。 Copyright © Alterbooth Inc. All Rights Reserved. 41
  20. cliコマンドでの記述 アップロード部分のみ抜粋 steps: - Artifactをダウンロード - name: install soracom-cli run:

    curl –fsSL https://url-of-soracom- cli/install.sh | bash - name: upload env: AUTH_KEY: ${{ secrets.AUTH_KEY }} AUTH_KEY_ID: ${{ secrets.AUTH_KEY_ID}} SORALET_ID: ${{ env.SORALET_ID }} run: | /usr/local/bin/soracom --auth-key-id $AUTH_KEY_ID --auth-key $AUTH_KEY soralets upload --soralet-id $SORALET_ID --body @soralet-optimized.wasm soracom cliのインストーラ をダウンロードし、実行しま す Copyright © Alterbooth Inc. All Rights Reserved. 42
  21. cliコマンドでの記述 アップロード部分のみ抜粋 steps: - Artifactをダウンロード - name: install soracom-cli run:

    curl –fsSL https://url-of-soracom- cli/install.sh | bash - name: upload env: AUTH_KEY: ${{ secrets.AUTH_KEY }} AUTH_KEY_ID: ${{ secrets.AUTH_KEY_ID}} SORALET_ID: ${{ env.SORALET_ID }} run: | /usr/local/bin/soracom --auth-key-id $AUTH_KEY_ID --auth-key $AUTH_KEY soralets upload --soralet-id $SORALET_ID --body @soralet-optimized.wasm soracom cliの実行に必要な シークレット等を定義します Copyright © Alterbooth Inc. All Rights Reserved. 43
  22. cliコマンドでの記述 アップロード部分のみ抜粋 steps: - Artifactをダウンロード - name: install soracom-cli run:

    curl –fsSL https://url-of-soracom- cli/install.sh | bash - name: upload env: AUTH_KEY: ${{ secrets.AUTH_KEY }} AUTH_KEY_ID: ${{ secrets.AUTH_KEY_ID}} SORALET_ID: ${{ env.SORALET_ID }} run: | /usr/local/bin/soracom --auth-key-id $AUTH_KEY_ID --auth-key $AUTH_KEY soralets upload --soralet-id $SORALET_ID --body @soralet-optimized.wasm soracom cliでsoralets uploadコマンドを実行し、 アップロードします。 Copyright © Alterbooth Inc. All Rights Reserved. 44
  23. • 可読性が低い • メンテナンス性が悪い • ここに「アップロードしたsoraletバージョンが多かったら古いものを消す」という処理を 追記するのは辛い • 省略してますが、SIMグループの設定を変える部分を書くのは辛い •

    再利用が困難 この問題を解決するために、2つのカスタムGitHub Actionを作成しました。 GitHub Marketplaceにも公開しています。 cliコマンドで記載することの問題点 Copyright © Alterbooth Inc. All Rights Reserved. 45
  24. カスタムアクションを 利用したアップロード カスタムアクションを利用 - name: upload uses: kenichiro-kimura/action-soracom-upload- [email protected] id:

    upload with: soracom_auth_key: ${{ secrets.AUTH_KEY }} soracom_auth_key_id: ${{ secrets.AUTH_KEY_ID}} soracom_soralet_id: ${{ env.SORALET_ID }} soracom_soralet_filename: soralet-optimized.wasm soracom_delete_old_soralet: true 「Upload soralet」アクショ ンを使うと、アップロード部 分の記載はこのように簡潔に なります。 Copyright © Alterbooth Inc. All Rights Reserved. 47
  25. カスタムアクションを 利用したアップロード カスタムアクションを利用 - name: upload uses: kenichiro-kimura/action-soracom-upload- [email protected] id:

    upload with: soracom_auth_key: ${{ secrets.AUTH_KEY }} soracom_auth_key_id: ${{ secrets.AUTH_KEY_ID}} soracom_soralet_id: ${{ env.SORALET_ID }} soracom_soralet_filename: soralet-optimized.wasm soracom_delete_old_soralet: true カスタムアクションを使うこ とを指定します Copyright © Alterbooth Inc. All Rights Reserved. 48
  26. カスタムアクションを 利用したアップロード カスタムアクションを利用 - name: upload uses: kenichiro-kimura/action-soracom-upload- [email protected] id:

    upload with: soracom_auth_key: ${{ secrets.AUTH_KEY }} soracom_auth_key_id: ${{ secrets.AUTH_KEY_ID}} soracom_soralet_id: ${{ env.SORALET_ID }} soracom_soralet_filename: soralet-optimized.wasm soracom_delete_old_soralet: true カスタムアクションの動作に 必要な変数を指定します。 Copyright © Alterbooth Inc. All Rights Reserved. 49
  27. カスタムアクションを 利用したデプロイ カスタムアクションを利用 - name: deploy production uses: kenichiro-kimura/action-soracom-configure- [email protected]

    if: github.ref == 'refs/heads/master' with: soracom_auth_key: ${{ secrets.AUTH_KEY }} soracom_auth_key_id: ${{ secrets.AUTH_KEY_ID}} soracom_soralet_code_srn: ${{ steps.upload.outputs.soralet_srn }} soracom_group_id: ${{ secrets.SORACOM_GROUP_ID_PROD }} 「Update SORACOM Orbit configuration」アクション を使うと、デプロイ部分の記 載はこのように簡潔になりま す。 Copyright © Alterbooth Inc. All Rights Reserved. 51
  28. カスタムアクションを 利用したデプロイ - name: deploy production uses: kenichiro-kimura/action-soracom-configure- [email protected] if:

    github.ref == 'refs/heads/master' with: soracom_auth_key: ${{ secrets.AUTH_KEY }} soracom_auth_key_id: ${{ secrets.AUTH_KEY_ID}} soracom_soralet_code_srn: ${{ steps.upload.outputs.soralet_srn }} soracom_group_id: ${{ secrets.SORACOM_GROUP_ID_PROD }} カスタムアクションを使うこ とを指定します。 Copyright © Alterbooth Inc. All Rights Reserved. 52
  29. カスタムアクションを 利用したデプロイ - name: deploy production uses: kenichiro-kimura/action-soracom-configure- [email protected] if:

    github.ref == 'refs/heads/master' with: soracom_auth_key: ${{ secrets.AUTH_KEY }} soracom_auth_key_id: ${{ secrets.AUTH_KEY_ID}} soracom_soralet_code_srn: ${{ steps.upload.outputs.soralet_srn }} soracom_group_id: ${{ secrets.SORACOM_GROUP_ID_PROD }} masterブランチへのプッ シュの場合は、本番環境の SIMグループを変更します。 Copyright © Alterbooth Inc. All Rights Reserved. 53
  30. カスタムアクションを 利用したデプロイ カスタムアクションを利用 - name: deploy production uses: kenichiro-kimura/action-soracom-configure- [email protected]

    if: github.ref == 'refs/heads/master' with: soracom_auth_key: ${{ secrets.AUTH_KEY }} soracom_auth_key_id: ${{ secrets.AUTH_KEY_ID}} soracom_soralet_code_srn: ${{ steps.upload.outputs.soralet_srn }} soracom_group_id: ${{ secrets.SORACOM_GROUP_ID_PROD }} アップロードするsoraletの SRNは、先ほどの「Upload Soralet」アクションの実行 結果から取得できます。 Copyright © Alterbooth Inc. All Rights Reserved. 54
  31. • DevOpsを実践することで、より安全に、より短時間でお客様に価値を届けら れるようになります • DevOpsはハードウェアやIoTの現場でも実践可能です • 例として、SORACOM Orbitを使う開発現場で、DevOpsの重要な要素である CI/CDパイプラインを構築した事例を紹介しました •

    GitHubカスタムアクションを作成すると、より可読性が高く、メンテナンス しやすく、再利用しやすいワークフローを作成できます • ソースコードは全て公開していますので、ぜひSORACOMプラットフォームを操作する他の アクションも作ってみてください まとめ Copyright © Alterbooth Inc. All Rights Reserved. 56
  32. • DevOpsとは https://learn.microsoft.com/ja-jp/devops/what-is-devops • [ブログ]SORACOM Orbit向けGitHub Actionを作りました https://zenn.dev/showm001/articles/2023-05-22-01 • [ブログ]GitHubを活用してSORACOM

    Orbitの開発を加速する: CI/CD編 https://aadojo.alterbooth.com/entry/2023/04/28/110621 • GitHub Actionsを理解する https://docs.github.com/ja/actions/learn-github- actions/understanding-github-actions • カスタムアクションについて https://docs.github.com/ja/actions/creating-actions/about-custom- actions 参考URL Copyright © Alterbooth Inc. All Rights Reserved. 57