Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
第5回 雲勉LT【オンライン:初心者向け】 GCのサービスだけでCI/CDを構築してみよう 2022.12.13 アイレット株式会社 クラウドインテグレーション事業部
Slide 2
Slide 2 text
目次 2 • 自己紹介 • はじめに • 本日の主役Cloud Buildとは? • 実際に作ってみましょう! • Cloud Buildを実務で使ってみて、とくに困った・気づいたこと • まとめ
Slide 3
Slide 3 text
3 自己紹介
Slide 4
Slide 4 text
自己紹介 4 小林 千紘 クラウドインテグレーション事業部 開発第二セクション 第一グループ 前職では、主にPythonを使ったweb開発をしており、 現在も、かちゃかちゃ開発をしています。コードはごはん。アルゴリズム体操すき。 アイレットに転職し、クラウドをガッツリ触り始めました。 推し言語はRustとGo、 最近嬉しいことは、GCプロフェッショナルパーカーがやっと届いたこと。 どんな人間なの?
Slide 5
Slide 5 text
5 はじめに
Slide 6
Slide 6 text
はじめに 6 このLTの対象者は? • GCのCI/CDの全容をざっくり知りたい方 • ポートフォリオを作っているけどGCを取り入れてみたい方
Slide 7
Slide 7 text
今回のアーキテクチャ図 7 本日の主役
Slide 8
Slide 8 text
使用技術 8 Google Cloud • Cloud Build • Source Repositories • Artifact Registry • Cloud Run • Pub/Sub • Cloud Storage その他 • FastAPI • Terraform
Slide 9
Slide 9 text
9 本日の主役Cloud Buildとは?
Slide 10
Slide 10 text
本日の主役Cloud Buildとは? 10 なんかすごい
Slide 11
Slide 11 text
本日の主役Cloud Buildとは? 11 Cloud Buildってなに? Google CloudのCI/CDサービスです。 CI/CDがあると、何がうれしいの? 今まで、テスト・デプロイなど手動でやっていたことを自動化することによって、 もっとアプリの開発に集中できたり、人的ミスを減らしたり、その分人的コストの軽減など... 恩恵はたくさんあります。 (山盛りコードが書けますね。) GCの他サービスGKEやCloud Runなどとの連携がしやすく、一元管理ができる なおかつ、GCサービス内部で完結できれば安全性も高くなったりなど... Cloud Buildならではの嬉しいこと
Slide 12
Slide 12 text
本日の主役Cloud Buildとは? 12 Cloud Buildってどうやって使うの? Cloud Buildは、大きく分けて ビルドトリガー と Cloud Build構成ファイル という主に2つのモノを作成します。 ビルドトリガー Cloud Build構成ファイル (cloudbuild.yaml)
Slide 13
Slide 13 text
本日の主役Cloud Buildとは? 13 ビルドトリガーとは? 何かの監視対象に対してアクションをトリガーするものです。 例えば、mainブランチにコミットされたら、トリガーを引く、という部分になります。 Source Repositories以外にも、GitHubやBitbucketなどもトリガーにできます。 コミットなど、 変化を加える ビルドトリガーが気づく cloudbuild.yamlを 元にテスト・デプロイな どしてくれる ビルドトリガー Cloud Build周辺の流れ
Slide 14
Slide 14 text
本日の主役Cloud Buildとは? 14 Cloud Build構成ファイルとは? ビルドトリガーが引かれた後に、どんなテストをするのか、どのコンテナを使用するのか、 ビルドの設定など、詳細について記載したファイルです。 yamlとjsonで作成できます。 コミットなど、 変化を加える ビルドトリガーが気づく cloudbuild.yamlを 元にテスト・デプロイな どしてくれる Cloud Build構成ファイル Cloud Build周辺の流れ
Slide 15
Slide 15 text
15 実際に作ってみましょう!
Slide 16
Slide 16 text
まずは、全体の流れ 16 1. FastAPIとDockerfile準備する 2. Source Repositoriesを作成&プッシュ 3. Artifact Registryのリポジトリを作る 4. Cloud Buildでトリガーを作る 5. Cloud Runにデプロイされていることを確認してみる ここを作成します
Slide 17
Slide 17 text
使用するサービスのかるい説明 17 Source Repositoriesとは? ソースコードを保管しておくサービスです。 GitHubのリポジトリとミラーリングなどもできます。 Artifact Registryとは? コンテナのイメージを保管しておくサービスです。 ちなみに、Container Registryというサービスとややこしくなりがちですが、 現在は、Artifact Registryの使用が推奨されています。 言わずと知れた、サーバレスでコンテナを動かすサービスです。 柔軟なオートスケーリングなど魅力が盛りだくさん、かつ、活発にプレビュー版機能が追加されていて まさに、Google Cloudの推しサービス?ですよね。 Cloud Runとは?
Slide 18
Slide 18 text
使用するサービスのかるい説明 18 FastAPIとは? PythonのAPIフレームワークです。 他のフレームワークより高速、OpenAPIがデフォルトで組み込まれているので、 リファレンスも自動で生成できたり、など... とても便利かつ簡単に使用できるフレームワーク。 UberやNetflixなども使用しているようです。 FastAPI日本語公式サイト https://fastapi.tiangolo.com/ja/
Slide 19
Slide 19 text
1.FastAPIとDockerfile準備する 19 1. FastAPIとDockerfile準備する 2. Source Repositoriesを作成&プッシュ 3. Artifact Registryのリポジトリを作る 4. Cloud Buildでトリガーを作る 5. Cloud Runにデプロイされていることを確認してみる ここを準備します
Slide 20
Slide 20 text
1.FastAPIとDockerfile準備する前の情報 20 ディレクトリ構成 使用言語とバージョン情報 • Python (ver.3.10) • FastAPI (ver.0.85)
Slide 21
Slide 21 text
1-1.FastAPIのプロジェクトなど作る 21 1.FastAPIをインストールする 3.main.pyの中身を作成する 2.プロジェクトディレクトリなど諸々作成する
Slide 22
Slide 22 text
1-2.Dockerfile作る 22 1.Dockerfileを作成する 2.Dockerfileの中身を作成する
Slide 23
Slide 23 text
2.Source Repositoriesを作成&プッシュ 23 1. FastAPIとDockerfile準備する 2. Source Repositoriesを作成&プッシュ 3. Artifact Registryのリポジトリを作る 4. Cloud Buildでトリガーを作る 5. Cloud Runにデプロイされていることを確認してみる ここを作成します
Slide 24
Slide 24 text
2-1.Source Repositoriesを作成 24 1.リポジトリを追加 2.新しいリポジトリを作成を選択 3.リポジトリ名とプロジェクトIDなど入力する
Slide 25
Slide 25 text
2-2.Source Repositoriesにプッシュ 25 1.ローカルからリポジトリにプッシュする 書いてあるとおり、gitコマンドでプッシュする
Slide 26
Slide 26 text
2-2.Source Repositoriesにプッシュ 26 2.ブラウザを更新して、選択すると... 3.無事プッシュされています!
Slide 27
Slide 27 text
3.Artifact Registryのリポジトリを作る 27 1. FastAPIとDockerfile準備する 2. Source Repositoriesを作成&プッシュ 3. Artifact Registryのリポジトリを作る 4. Cloud Buildでトリガーを作る 5. Cloud Runにデプロイされていることを確認してみる ここを作成します
Slide 28
Slide 28 text
3.Artifact Registryのリポジトリを作る 28 1.リポジトリを作成クリックする 2.リポジトリ名とリージョンなど設定する 3.作成されました!
Slide 29
Slide 29 text
4.Cloud Buildでトリガーを作る 29 1. FastAPIとDockerfile準備する 2. Source Repositoriesを作成&プッシュ 3. Artifact Registryのリポジトリを作る 4. Cloud Buildでトリガーを作る 5. Cloud Runにデプロイされていることを確認してみる ここを作成します
Slide 30
Slide 30 text
4-1.cloudbuild.yamlを作成する 30 前提として Cloud Buildは、ステップというタスクを実行していく構造になっています。 ステップごとに、コンテナを作成→タスクを実行→コンテナを破壊 しています。 そのため、次のステップで使用したいデータなどがある場合は注意が必要です。 (/workspaceに書き込むと後続で使用できるようになります。) 詳しくはこちらをご覧ください。 https://cloud.google.com/build/docs/configuring-builds/pass-data-between-steps Cloud Build構成ファイル (cloudbuild.yaml)
Slide 31
Slide 31 text
4-1.cloudbuild.yamlを作成する 31 cloudbuild.yamlファイルの構造は? 前述のテストやビルドなどの指示をするのが、stepsプロパティです。必須項目です。 他によく使うプロパティは、images, substitutions, availableSecrets 辺りが多いかと思います。 必須!
Slide 32
Slide 32 text
4-1.cloudbuild.yamlを作成する 32 stepsプロパティはこんな感じになっています ステップ1 ステップ2 ステップ3 name部分で、使用するコンテナを指定します。 あらかじめGC側でイメージを色々用意してくれていますが、自作のイメージをArtifact Registryから使用 することもできます。
Slide 33
Slide 33 text
4-1.cloudbuild.yamlを作成する 33 imagesプロパティとは? ビルドしたイメージをArtifact Registry(or Container Registry)に保存することができます。 ただし、処理の流れとして、stepsが終わった後にimagesでイメージが保存されるので、 トリガーを分割せず、後続のステップで、 直接Artifact Registryのイメージを使用する場合は注意が必要です。 ここでCloud Runにデプロイ しているステップがあるので ... steps内で、Artifact Registryに pushするコマンドが必須になり ます。
Slide 34
Slide 34 text
4-1.cloudbuild.yamlを作成する 34 substitutionsプロパティとは? 環境変数などを指定できます。 設定側は、_から始まるように指定します。使用側は、$_から指定します。 ただし、シークレット情報は、availableSecretsプロパティに指定してください。 availableSecretsプロパティとは? シークレット情報を使用するためのものです。 Secret Managerにシークレット情報を保存して、Cloud Buildから取得します。 他にも色々プロパティがあるので詳しくはこちらをご覧ください。 https://cloud.google.com/build/docs/build-config-file-schema
Slide 35
Slide 35 text
4-1.cloudbuild.yamlを作成する 35 ということで、今回使うcloudbuild.yaml ルートディレクトリの直下にcloudbuild.yamlを作成し、Source Repositoriesにプッシュします。
Slide 36
Slide 36 text
4-2.ビルドトリガーを作る 36 1.トリガーを作成クリックする 3.ソースは先ほど作成した Source Repositoriesのリポジトリを選択 4.cloudbuild.yamlのロケーションは ルートディレクトリの直下を指定 2.トリガー名、リージョン、イベントを設定する
Slide 37
Slide 37 text
4-2.ビルドトリガーを作る 37 5.作成をクリック 6.無事作成されました!
Slide 38
Slide 38 text
5.Cloud Runにデプロイされていることを確認してみる 38 1. FastAPIとDockerfile準備する 2. Source Repositoriesを作成&プッシュ 3. Artifact Registryのリポジトリを作る 4. Cloud Buildでトリガーを作る 5. Cloud Runにデプロイされていることを確認してみる ここを確認します
Slide 39
Slide 39 text
39 1.適当な変更をプッシュするか、 トリガー一覧画面から手動で実行してみる 3.ビルドトリガーは無事完了したので Cloud Runのエンドポイントにアクセスしてみる 2.トリガーが実行されダッシュボードに表示されます 5.Cloud Runにデプロイされていることを確認してみる
Slide 40
Slide 40 text
40 4.無事Cloud Runに、Hello Worldされました! 5.Cloud Runにデプロイされていることを確認してみる
Slide 41
Slide 41 text
41 Cloud Buildを実務で使ってみて、 とくに困った・気づいたこと
Slide 42
Slide 42 text
Cloud Buildを使ってみて、とくに困った・気づいたこと 42 • Slack通知を飛ばしたい時 • Source Repositoriesとの併用の注意点 • 別プロジェクトにデプロイするには
Slide 43
Slide 43 text
Slack通知を飛ばしたい時 43 やりたいこと テストやビルドが走った時に、失敗したのか、成功したのか... 通知を受け取りたい! そわそわ、終わったかな〜とGCコンソールで、ブラウザ更新する機械になりたくないですよね...? ビルド、マダカナ...
Slide 44
Slide 44 text
Slack通知を飛ばしたい時 44 結論 Cloud Buildには通知機能はデフォルトで組み込まれていません。 ただし、GC側で通知用コンテナを用意してくれてます。 通知用コンテナの公式GitHub https://github.com/GoogleCloudPlatform/cloud-build-notifiers/tree/master/slack
Slide 45
Slide 45 text
Slack通知を飛ばしたい時 45 Slack通知部分の大まかな流れ 1. Slackアプリを作成する 2. 通知用のyamlファイルをCloud Storageに保存する 3. Cloud Runで通知用コンテナをデプロイする 4. Pub/Subのトピック&サブスクライバーの設定をする https://cloud.google.com/build/docs/configuring-notifications/configure-slack
Slide 46
Slide 46 text
Slack通知を飛ばしたい時 46 毎回作成するのは大変なので、Terraformにしておくのがオススメです ※以下参考まで Cloud Storage 通知用のyamlファイルのバケット作成など
Slide 47
Slide 47 text
Slack通知を飛ばしたい時 47 Cloud Run 通知用コンテナのデプロイなど Pub/Sub トピック・サブスクリプションなど
Slide 48
Slide 48 text
Source Repositoriesとの併用の注意点 48 やりたいこと develop, staging, productionなどそれぞれの環境に切り分けたい イメージとしては、こう考えてました
Slide 49
Slide 49 text
Source Repositoriesとの併用の注意点 49 結論 自動化する場合、Source RepositoriesとCloud Buildは切り離せません。 なぜなら • GCコンソールでCloud Buildトリガー作成時に、同じプロジェクトのSource Repositoriesしか表示さ れません。 • CLIでトリガー作成した場合、手動でのみトリガーできるため、コミットしても自動でトリガーされ ません。(トリガー作成は、gcloud alphaを使用します)
Slide 50
Slide 50 text
GCコンソールでの、Source Repositories選択のようす 50 my-testレポジトリを 別プロジェクトでトリガーしたいのに... どんなに権限を与えても表示されない...
Slide 51
Slide 51 text
CLIで作成した、手動トリガーの挙動のようす 51 1.CLIでトリガー作成する 3.手動でトリガーした場合のみビルドできる 2.上手く接続できていても、 このようにエラーが出ている... 4.なんとかビルドはできている
Slide 52
Slide 52 text
Source Repositoriesとの併用の注意点 52 公式からのお言葉 https://cloud.google.com/build/docs/automating-builds/create-manage-triggers とあるので、そもそもプロジェクトを切り離す作りでは無いようです。 ※今回はあくまでも、検証のために無理矢理CLIで切り離したので、個人的にもおすすめはしません。
Slide 53
Slide 53 text
ということで、CI/CDアーキテクチャ案 53 環境ごとにデプロイするならCDをCloud Deploy構築しても良さそうです。※ただしCloud Runはプレビュー版
Slide 54
Slide 54 text
別プロジェクトにデプロイするには 54 結論 --projectフラグで指定できます。 Google公式ドキュメントより引用 https://cloud.google.com/sdk/gcloud/reference/run/deploy ページの隅にあるので、見落とさないようご注意ください...
Slide 55
Slide 55 text
55 まとめ
Slide 56
Slide 56 text
まとめ 56 まとめ&感想 実際に作成してみていかがだったでしょうか? GCのサービスは、開発エンジニアでも簡単にデプロイできて便利かつ楽しいですよね。 また、今回メインの方のCI/CD部分は、Terraformにしていないので、Terraformで作成してみても理解が 深まって面白かもしれません、ね? 他にも、どんどんCloud Buildの新しい機能を追加されていますので ワクワクしながら、公式リファレンスを見ていただければいいのではないかと思います。
Slide 57
Slide 57 text
まとめ 57 色々読み物まとめ Cloud Build公式リファレンス https://cloud.google.com/build/docs/overview Cloud Build Slack通知を構成する https://cloud.google.com/build/docs/configuring-notifications/configure-slack Terrafrom公式リファレンス GoogleCloud https://registry.terraform.io/providers/hashicorp/google/latest/docs Slack API日本語版公式 https://api.slack.com/lang/ja-jp gcloudコマンド公式リファレンス https://cloud.google.com/sdk/gcloud/reference FastAPI日本語公式サイト https://fastapi.tiangolo.com/ja/
Slide 58
Slide 58 text
58 ご視聴ありがとうございました!