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
第5回 雲勉LT【オンライン:初心者向け】GCのサービスだけでCI_CDを構築してみよう
Search
Y.Sumikura
December 12, 2022
Technology
86
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
第5回 雲勉LT【オンライン:初心者向け】GCのサービスだけでCI_CDを構築してみよう
Y.Sumikura
December 12, 2022
More Decks by Y.Sumikura
See All by Y.Sumikura
第103回 雲勉【オンライン】インフラエンジニアにおける ChatGPT の便利な使い方と注意点
sumikurayurie1125
1
330
第101回 雲勉【オンライン】VPC から始めるネットワーク入門
sumikurayurie1125
0
190
第99回 雲勉【オンライン:初心者向け】Infrastructure as Code (IaC) 入門 〜TerraformとAnsibleを使ってみよう〜
sumikurayurie1125
0
270
第96回 雲勉【オンライン:初心者向け】インフラエンジニアのKubernetes入門
sumikurayurie1125
0
270
第8回 雲勉LT【オンライン:中級者向け】AthenaでS3上のデータとDynamoDBのデータを結合する
sumikurayurie1125
0
390
第93回 雲勉【オンライン:初心者向け】CI/CDって結局何なの?インフラエンジニアがCode3兄弟を学ぶ
sumikurayurie1125
13
5.3k
第7回 雲勉LT【オンライン:初心者向け】サーバレスコンテナサービス Lambda, Fargate, App Runnerの特徴、違いを解説
sumikurayurie1125
3
690
第6回 雲勉LT【オンライン:初心者向け】2022年 気になったアップデート情報:「RDSコンソールの、EC2ワンクリック接続オプション」について
sumikurayurie1125
0
200
第90回 雲勉【オンライン:初心者向け】AWS App RunnerにLaravelをデプロイしてLINEBotを作ってみよう
sumikurayurie1125
0
930
Other Decks in Technology
See All in Technology
【CEDEC2026】次世代デジタルカードゲームのサーバー設計と運用 〜『Shadowverse: Worlds Beyond』の舞台裏~
cygames
PRO
1
960
え?フロントエンドエンジニアの ワイがインフラも!?
puku0x
1
410
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
19k
20260801_スクフェス大阪
kgnkhkr
2
1.2k
オートロックマンションなのに、各部屋は施錠なし!? 攻撃者が組織内ネットワークで大暴れする理由 / The Front Door Is Locked, but the Rooms Are Wide Open: Why Attackers Move Freely Inside Enterprise Networks
nttcom
1
1.6k
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1.2k
SmartHR Engineering Team Deck
smarthr
0
750
AIは実装を速くする。では、私たちは何を今作るべきか?-立場を越えてリリースに向き合ったチーム開発の実践 / 20260801 Hiromi Nakaya and Naoki Takahashi
shift_evolve
PRO
3
430
第3回しろおびセキュリティスポンサーセッション
log0417
0
160
Goでデータパイプラインを作ろう
sansantech
PRO
0
350
20分でわかるセキュアAPI
nwiizo
0
180
Forza Horizon 6 のテレメトリ機能で 自動運転に使えそうな学習データを集める話
henjin0
0
140
Featured
See All Featured
AI: The stuff that nobody shows you
jnunemaker
PRO
9
890
Odyssey Design
rkendrick25
PRO
2
750
Visualization
eitanlees
152
17k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
エンジニアに許された特別な時間の終わり
watany
108
250k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
How to train your dragon (web standard)
notwaldorf
97
6.7k
KATA
mclloyd
PRO
35
15k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.7k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
240
Transcript
第5回 雲勉LT【オンライン:初心者向け】 GCのサービスだけでCI/CDを構築してみよう 2022.12.13 アイレット株式会社 クラウドインテグレーション事業部
目次 2 • 自己紹介 • はじめに • 本日の主役Cloud Buildとは? •
実際に作ってみましょう! • Cloud Buildを実務で使ってみて、とくに困った・気づいたこと • まとめ
3 自己紹介
自己紹介 4 小林 千紘 クラウドインテグレーション事業部 開発第二セクション 第一グループ 前職では、主にPythonを使ったweb開発をしており、 現在も、かちゃかちゃ開発をしています。コードはごはん。アルゴリズム体操すき。 アイレットに転職し、クラウドをガッツリ触り始めました。
推し言語はRustとGo、 最近嬉しいことは、GCプロフェッショナルパーカーがやっと届いたこと。 どんな人間なの?
5 はじめに
はじめに 6 このLTの対象者は? • GCのCI/CDの全容をざっくり知りたい方 • ポートフォリオを作っているけどGCを取り入れてみたい方
今回のアーキテクチャ図 7 本日の主役
使用技術 8 Google Cloud • Cloud Build • Source Repositories
• Artifact Registry • Cloud Run • Pub/Sub • Cloud Storage その他 • FastAPI • Terraform
9 本日の主役Cloud Buildとは?
本日の主役Cloud Buildとは? 10 なんかすごい
本日の主役Cloud Buildとは? 11 Cloud Buildってなに? Google CloudのCI/CDサービスです。 CI/CDがあると、何がうれしいの? 今まで、テスト・デプロイなど手動でやっていたことを自動化することによって、 もっとアプリの開発に集中できたり、人的ミスを減らしたり、その分人的コストの軽減など...
恩恵はたくさんあります。 (山盛りコードが書けますね。) GCの他サービスGKEやCloud Runなどとの連携がしやすく、一元管理ができる なおかつ、GCサービス内部で完結できれば安全性も高くなったりなど... Cloud Buildならではの嬉しいこと
本日の主役Cloud Buildとは? 12 Cloud Buildってどうやって使うの? Cloud Buildは、大きく分けて ビルドトリガー と Cloud
Build構成ファイル という主に2つのモノを作成します。 ビルドトリガー Cloud Build構成ファイル (cloudbuild.yaml)
本日の主役Cloud Buildとは? 13 ビルドトリガーとは? 何かの監視対象に対してアクションをトリガーするものです。 例えば、mainブランチにコミットされたら、トリガーを引く、という部分になります。 Source Repositories以外にも、GitHubやBitbucketなどもトリガーにできます。 コミットなど、 変化を加える
ビルドトリガーが気づく cloudbuild.yamlを 元にテスト・デプロイな どしてくれる ビルドトリガー Cloud Build周辺の流れ
本日の主役Cloud Buildとは? 14 Cloud Build構成ファイルとは? ビルドトリガーが引かれた後に、どんなテストをするのか、どのコンテナを使用するのか、 ビルドの設定など、詳細について記載したファイルです。 yamlとjsonで作成できます。 コミットなど、 変化を加える
ビルドトリガーが気づく cloudbuild.yamlを 元にテスト・デプロイな どしてくれる Cloud Build構成ファイル Cloud Build周辺の流れ
15 実際に作ってみましょう!
まずは、全体の流れ 16 1. FastAPIとDockerfile準備する 2. Source Repositoriesを作成&プッシュ 3. Artifact Registryのリポジトリを作る
4. Cloud Buildでトリガーを作る 5. Cloud Runにデプロイされていることを確認してみる ここを作成します
使用するサービスのかるい説明 17 Source Repositoriesとは? ソースコードを保管しておくサービスです。 GitHubのリポジトリとミラーリングなどもできます。 Artifact Registryとは? コンテナのイメージを保管しておくサービスです。 ちなみに、Container
Registryというサービスとややこしくなりがちですが、 現在は、Artifact Registryの使用が推奨されています。 言わずと知れた、サーバレスでコンテナを動かすサービスです。 柔軟なオートスケーリングなど魅力が盛りだくさん、かつ、活発にプレビュー版機能が追加されていて まさに、Google Cloudの推しサービス?ですよね。 Cloud Runとは?
使用するサービスのかるい説明 18 FastAPIとは? PythonのAPIフレームワークです。 他のフレームワークより高速、OpenAPIがデフォルトで組み込まれているので、 リファレンスも自動で生成できたり、など... とても便利かつ簡単に使用できるフレームワーク。 UberやNetflixなども使用しているようです。 FastAPI日本語公式サイト https://fastapi.tiangolo.com/ja/
1.FastAPIとDockerfile準備する 19 1. FastAPIとDockerfile準備する 2. Source Repositoriesを作成&プッシュ 3. Artifact Registryのリポジトリを作る
4. Cloud Buildでトリガーを作る 5. Cloud Runにデプロイされていることを確認してみる ここを準備します
1.FastAPIとDockerfile準備する前の情報 20 ディレクトリ構成 使用言語とバージョン情報 • Python (ver.3.10) • FastAPI (ver.0.85)
1-1.FastAPIのプロジェクトなど作る 21 1.FastAPIをインストールする 3.main.pyの中身を作成する 2.プロジェクトディレクトリなど諸々作成する
1-2.Dockerfile作る 22 1.Dockerfileを作成する 2.Dockerfileの中身を作成する
2.Source Repositoriesを作成&プッシュ 23 1. FastAPIとDockerfile準備する 2. Source Repositoriesを作成&プッシュ 3. Artifact
Registryのリポジトリを作る 4. Cloud Buildでトリガーを作る 5. Cloud Runにデプロイされていることを確認してみる ここを作成します
2-1.Source Repositoriesを作成 24 1.リポジトリを追加 2.新しいリポジトリを作成を選択 3.リポジトリ名とプロジェクトIDなど入力する
2-2.Source Repositoriesにプッシュ 25 1.ローカルからリポジトリにプッシュする 書いてあるとおり、gitコマンドでプッシュする
2-2.Source Repositoriesにプッシュ 26 2.ブラウザを更新して、選択すると... 3.無事プッシュされています!
3.Artifact Registryのリポジトリを作る 27 1. FastAPIとDockerfile準備する 2. Source Repositoriesを作成&プッシュ 3. Artifact
Registryのリポジトリを作る 4. Cloud Buildでトリガーを作る 5. Cloud Runにデプロイされていることを確認してみる ここを作成します
3.Artifact Registryのリポジトリを作る 28 1.リポジトリを作成クリックする 2.リポジトリ名とリージョンなど設定する 3.作成されました!
4.Cloud Buildでトリガーを作る 29 1. FastAPIとDockerfile準備する 2. Source Repositoriesを作成&プッシュ 3. Artifact
Registryのリポジトリを作る 4. Cloud Buildでトリガーを作る 5. Cloud Runにデプロイされていることを確認してみる ここを作成します
4-1.cloudbuild.yamlを作成する 30 前提として Cloud Buildは、ステップというタスクを実行していく構造になっています。 ステップごとに、コンテナを作成→タスクを実行→コンテナを破壊 しています。 そのため、次のステップで使用したいデータなどがある場合は注意が必要です。 (/workspaceに書き込むと後続で使用できるようになります。) 詳しくはこちらをご覧ください。
https://cloud.google.com/build/docs/configuring-builds/pass-data-between-steps Cloud Build構成ファイル (cloudbuild.yaml)
4-1.cloudbuild.yamlを作成する 31 cloudbuild.yamlファイルの構造は? 前述のテストやビルドなどの指示をするのが、stepsプロパティです。必須項目です。 他によく使うプロパティは、images, substitutions, availableSecrets 辺りが多いかと思います。 必須!
4-1.cloudbuild.yamlを作成する 32 stepsプロパティはこんな感じになっています ステップ1 ステップ2 ステップ3 name部分で、使用するコンテナを指定します。 あらかじめGC側でイメージを色々用意してくれていますが、自作のイメージをArtifact Registryから使用 することもできます。
4-1.cloudbuild.yamlを作成する 33 imagesプロパティとは? ビルドしたイメージをArtifact Registry(or Container Registry)に保存することができます。 ただし、処理の流れとして、stepsが終わった後にimagesでイメージが保存されるので、 トリガーを分割せず、後続のステップで、 直接Artifact
Registryのイメージを使用する場合は注意が必要です。 ここでCloud Runにデプロイ しているステップがあるので ... steps内で、Artifact Registryに pushするコマンドが必須になり ます。
4-1.cloudbuild.yamlを作成する 34 substitutionsプロパティとは? 環境変数などを指定できます。 設定側は、_から始まるように指定します。使用側は、$_から指定します。 ただし、シークレット情報は、availableSecretsプロパティに指定してください。 availableSecretsプロパティとは? シークレット情報を使用するためのものです。 Secret Managerにシークレット情報を保存して、Cloud
Buildから取得します。 他にも色々プロパティがあるので詳しくはこちらをご覧ください。 https://cloud.google.com/build/docs/build-config-file-schema
4-1.cloudbuild.yamlを作成する 35 ということで、今回使うcloudbuild.yaml ルートディレクトリの直下にcloudbuild.yamlを作成し、Source Repositoriesにプッシュします。
4-2.ビルドトリガーを作る 36 1.トリガーを作成クリックする 3.ソースは先ほど作成した Source Repositoriesのリポジトリを選択 4.cloudbuild.yamlのロケーションは ルートディレクトリの直下を指定 2.トリガー名、リージョン、イベントを設定する
4-2.ビルドトリガーを作る 37 5.作成をクリック 6.無事作成されました!
5.Cloud Runにデプロイされていることを確認してみる 38 1. FastAPIとDockerfile準備する 2. Source Repositoriesを作成&プッシュ 3. Artifact
Registryのリポジトリを作る 4. Cloud Buildでトリガーを作る 5. Cloud Runにデプロイされていることを確認してみる ここを確認します
39 1.適当な変更をプッシュするか、 トリガー一覧画面から手動で実行してみる 3.ビルドトリガーは無事完了したので Cloud Runのエンドポイントにアクセスしてみる 2.トリガーが実行されダッシュボードに表示されます 5.Cloud Runにデプロイされていることを確認してみる
40 4.無事Cloud Runに、Hello Worldされました! 5.Cloud Runにデプロイされていることを確認してみる
41 Cloud Buildを実務で使ってみて、 とくに困った・気づいたこと
Cloud Buildを使ってみて、とくに困った・気づいたこと 42 • Slack通知を飛ばしたい時 • Source Repositoriesとの併用の注意点 • 別プロジェクトにデプロイするには
Slack通知を飛ばしたい時 43 やりたいこと テストやビルドが走った時に、失敗したのか、成功したのか... 通知を受け取りたい! そわそわ、終わったかな〜とGCコンソールで、ブラウザ更新する機械になりたくないですよね...? ビルド、マダカナ...
Slack通知を飛ばしたい時 44 結論 Cloud Buildには通知機能はデフォルトで組み込まれていません。 ただし、GC側で通知用コンテナを用意してくれてます。 通知用コンテナの公式GitHub https://github.com/GoogleCloudPlatform/cloud-build-notifiers/tree/master/slack
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
Slack通知を飛ばしたい時 46 毎回作成するのは大変なので、Terraformにしておくのがオススメです ※以下参考まで Cloud Storage 通知用のyamlファイルのバケット作成など
Slack通知を飛ばしたい時 47 Cloud Run 通知用コンテナのデプロイなど Pub/Sub トピック・サブスクリプションなど
Source Repositoriesとの併用の注意点 48 やりたいこと develop, staging, productionなどそれぞれの環境に切り分けたい イメージとしては、こう考えてました
Source Repositoriesとの併用の注意点 49 結論 自動化する場合、Source RepositoriesとCloud Buildは切り離せません。 なぜなら • GCコンソールでCloud
Buildトリガー作成時に、同じプロジェクトのSource Repositoriesしか表示さ れません。 • CLIでトリガー作成した場合、手動でのみトリガーできるため、コミットしても自動でトリガーされ ません。(トリガー作成は、gcloud alphaを使用します)
GCコンソールでの、Source Repositories選択のようす 50 my-testレポジトリを 別プロジェクトでトリガーしたいのに... どんなに権限を与えても表示されない...
CLIで作成した、手動トリガーの挙動のようす 51 1.CLIでトリガー作成する 3.手動でトリガーした場合のみビルドできる 2.上手く接続できていても、 このようにエラーが出ている... 4.なんとかビルドはできている
Source Repositoriesとの併用の注意点 52 公式からのお言葉 https://cloud.google.com/build/docs/automating-builds/create-manage-triggers とあるので、そもそもプロジェクトを切り離す作りでは無いようです。 ※今回はあくまでも、検証のために無理矢理CLIで切り離したので、個人的にもおすすめはしません。
ということで、CI/CDアーキテクチャ案 53 環境ごとにデプロイするならCDをCloud Deploy構築しても良さそうです。※ただしCloud Runはプレビュー版
別プロジェクトにデプロイするには 54 結論 --projectフラグで指定できます。 Google公式ドキュメントより引用 https://cloud.google.com/sdk/gcloud/reference/run/deploy ページの隅にあるので、見落とさないようご注意ください...
55 まとめ
まとめ 56 まとめ&感想 実際に作成してみていかがだったでしょうか? GCのサービスは、開発エンジニアでも簡単にデプロイできて便利かつ楽しいですよね。 また、今回メインの方のCI/CD部分は、Terraformにしていないので、Terraformで作成してみても理解が 深まって面白かもしれません、ね? 他にも、どんどんCloud Buildの新しい機能を追加されていますので ワクワクしながら、公式リファレンスを見ていただければいいのではないかと思います。
まとめ 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/
58 ご視聴ありがとうございました!