Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Cloud Onr
Cloud OnAir
Cloud OnAir
Cloud Run Deep Dive
GCP で実践するモダンなサーバーレスアプリケーション開発
2019 年 9 月 12 日 放送
Agenda
Cloud OnAir
1
3
2
4
Cloud Run とは?
Cloud Run Technical Tips
他の GCP サーバーレスコンピュートとの使い分け
まとめ
Cloud OnAir
Cloud OnAir
Cloud Run とは?
Cloud OnAir
Cloud Run とは?
Cloud Run
Knative をベースにした
GCP の新しいサーバーレスコンピュート
Beta
Cloud OnAir
GCP のサーバーレスコンピュート
App Engine
Apps
Cloud Functions
Functions
Cloud Run
Containers
NEW!
Cloud OnAir
2 つの Cloud Run
Cloud Run
完全にサーバーレス
管理するクラスタは無し
使った分だけお支払い
Cloud Run on GKE
GKE のクラスタ上でサーバーレス
費用は GKE のクラスタに含まれ...
Cloud OnAir
主な特徴
高速なデプロイ
ステートレスなコンテナ
高速に 0 to N スケール
数秒でデプロイし URL を付与
サーバーレス、ネイティブ
管理するサーバーはなし
コードに集中
言語やライブラリの制約なし
きっちり使っ...
Cloud OnAir
Cloud Run を利用可能なリージョン東京含む、世界 4 リージョンで利用可能
asia-northeast1
europe-west1
us-east1
us-central1
利用可能なリージョン ( 2019....
Cloud OnAir
Cloud OnAir
Demo
サービスのデプロイ
Cloud OnAir
ユースケース
パブリック
• Web App
• API endpoint
プライベート
• マイクロサービス
• 非同期処理のワーカー
• データ処理(軽微な ETL )
• Mobile backend
• Webh...
Cloud OnAir
リソースモデル
Revision A-1
Revision A-2
Revision A-3
Revision B-1
Revision B-2
Container
InstanceContainer
InstanceC...
Cloud OnAir
課金の考え方
Instance
Billable Time
Instance Time
Billable
Non-billable
Request 1
Start
Request 1
End
Request 2
Star...
Cloud OnAir
Cloud OnAir
Cloud Run Technical Tips
Cloud OnAir
Cloud OnAir
Container Runtime Contract
Cloud OnAir
● Linux x86_64 ABI をサポート
● 0.0.0.0 かつ、環境変数 PORT に対してリッスン
● リクエストを受信してから 4 分以内に HTTP サーバーを起動する必要
● レスポンスタイムアウトは...
Cloud OnAir
● CPU
○ デフォルト 1vCPU
○ 変更不可
● メモリ
○ デフォルト 256 MB
○ 変更可、最小 128 MB 〜 最大 2 GB
● ファイルシステム
○ 読み書き可能
○ コンテナインスタンスに割り当...
Cloud OnAir
Cloud Run では各コンテナインスタンスがオートスケーリングにより
増減するため、アプリケーションはステートレスであることが
推奨されている。
アプリケーションはステートレスに
Database
Key Value...
Cloud OnAir
System Call
Cloud Run のコンテナインスタンスは
gVisor によりサンドボックス化されている
ため、コンテナアプリケーションからの
System Call が可能。
ただし一部の System C...
Cloud OnAir
Cloud OnAir
Cloud Run サービスの利用
Cloud OnAir
HTTPS によるアクセス
Service A
https://servicea-q6vo4odwpq-an.a.run.app
サービスを新規デプロイすると
FQDN と SSL 証明書が割り当てられ、HTTPS でア...
Cloud OnAir
IAM による認証
IAM Service A
認証
デフォルトで IAM によるアクセス認証が有効
role: "roles/run.invoker"
member: "cloudtaro@..."
Header:
"...
Cloud OnAir
一般公開する場合
サービスをデプロイする際に、--allow-unauthenticated オプションを
指定し、認証なしアクセスを許可する
$ gcloud beta run deploy servicea 
--i...
Cloud OnAir
メッセージングサービスとの連携
Cloud Pub / Sub から Cloud Run のサービスに対して
イベントのプッシュを行う
IAM Service A
Cloud Pub / Sub
role: "roles...
Cloud OnAir
非同期処理
Cloud Tasks の HTTP タスク ハンドラとして
Cloud Run のサービスを利用する
IAM Service A
Cloud Tasks
role: "roles/run.invoker"
...
Cloud OnAir
定期実行
Cloud Scheduler から定期的に Cloud Run のサービスを呼び出す
IAM Service A
Cloud Scheduler
role: "roles/run.invoker"
membe...
Cloud OnAir
Cloud OnAir
Cloud Run から
他のサービスを利用
Cloud OnAir
サービスアカウントの利用
サービスアカウントを使って他の GCP サービスへアクセス
サービスのデプロイ時に任意のサービスアカウントを指定することが可能
Service A
Container
Instance
App ...
Cloud OnAir
別の Cloud Run サービスへのアクセス
Service A
Cloud Run から他の Cloud Run サービスを呼び出す場合も IAM 認証を利用可能
メタデータサーバーから ID トークンを入手し、ヘッ...
Cloud OnAir
Cloud SQL への接続
Service A
アプリケーションから UNIX ソケット経由で Cloud SQL Proxy へ接続可能
第2世代の MySQL インスタンス or PostgreSQL インスタンス...
Cloud OnAir
シークレット管理
現在 Cloud KMS は Cloud Run を直接的にサポートしていない
予めKMSで暗号化したシークレットを Cloud Storage に保存し、
必要時にダウンロードして復号化する方法がワー...
Cloud OnAir
シークレット管理 ~ Berglas
Berglas を使うことでアプリケーション自体から Cloud Storage や Cloud KMS へ
のアクセスやシークレットのハンドリングロジックを排除し、
シークレット管...
Cloud OnAir
Cloud OnAir
Concurrency と
オートスケーリング
Cloud OnAir
Concurrency
Concurrency とは同時の 1 つの Container Instance に投げられる
リクエストの最大数
Google Cloud Functions など一般的な FaaS は
一度...
Cloud OnAir
オートスケーリング
Cloud Run ではリクエスト数に応じて特に明示的に設定を
していなくてもオートスケーリングを行う
リクエストがしばらく (体感 5 分) 無い場合、コンテナインスタンスが 0 になる
Servi...
Cloud OnAir
コールドスタート
Cloud Run は サービス特性上コールドスタートが多くなる場合がある
コールドスタートとは一からコンテナを起動しリクエストを受けられる
状態になるまでのことを指し、この時間が長いとレスポンスタイム...
Cloud OnAir
Cloud OnAir
Demo
オートスケーリング
Cloud OnAir
Cloud OnAir
カスタムドメイン
Cloud OnAir
Custom Domain
デフォルトでは run.app のサブドメインが割り当てられるが、
お客様自身のドメインを使うことも可能
SSL 証明書は Let’s Encrypt で自動的に払い出される ( 5 ~ 10...
Cloud OnAir
Cloud OnAir
ビルド、デプロイ
Cloud OnAir
Cloud Build
サーバーレスな CI/CD プラットフォーム
お客様が VM を用意したりキャパシティの管理をする必要はない
柔軟なビルドステップ
あらゆるサーバーレス CLI ツールをビルドステップとして組み込...
Cloud OnAir
Cloud Build を利用した CI /CD ワークフロー
Cloud Source
Repositories
Cloud Build Google Container
Registry
Cloud Run開発者
ソ...
Cloud OnAir
Cloud OnAir
モニタリング、ロギング
Cloud OnAir
Stackdriver サポート
Error ReportingLoggingMonitoring
Metric を Revision 単位で
選択可能
CPU/Memory の
Allocaiton や request...
Cloud OnAir
Cloud OnAir
Demo
Stackdriver によるメトリックスとログの確認
Cloud OnAir
Cloud OnAir
他の GCP サーバーレスコンピュートとの
使い分け
Cloud OnAir
各サービスの特徴
● ソースコードベース
● Web / API
● ユーザー数・ナレッジの
多さ
● 1 プロジェクトにつき
1 リージョンの縛り
● ソースコードベース
● イベントドリブン
● あくまで関数
● 最...
Cloud OnAir
公式使い分けチャート
https://cloud.google.com/serverless-options
Cloud OnAir
Cloud OnAir
まとめ
Cloud OnAir
● Cloud Run はコンテナをサーバーレスに使える便利なサービス
● 従来の PaaS / FaaS にあった言語ランタイム及び
ライブラリに制約がない
● 0 to N のスケーリングや小さめのスペックなどの特徴...
Upcoming SlideShare
Loading in …5
×

[Cloud OnAir] Cloud Run Deep Dive ~ GCP で実践するモダンなサーバーレス アプリケーション開発 ~ 2019年9月12日 放送

2019 年 4 月の Google Cloud Next '19 サンフランシスコで Cloud Run が発表されてから数カ月が経ち、検討フェーズから本番環境での利用も視野に入れている方に向けて、この放送では Cloud Run を使ったサーバーレス アプリケーションを開発するための実践的な Tips を解説します。また他のサーバーレス サービスとの連携や使い分けについても説明します。

  • Be the first to comment

[Cloud OnAir] Cloud Run Deep Dive ~ GCP で実践するモダンなサーバーレス アプリケーション開発 ~ 2019年9月12日 放送

  1. 1. Cloud Onr Cloud OnAir Cloud OnAir Cloud Run Deep Dive GCP で実践するモダンなサーバーレスアプリケーション開発 2019 年 9 月 12 日 放送
  2. 2. Agenda Cloud OnAir 1 3 2 4 Cloud Run とは? Cloud Run Technical Tips 他の GCP サーバーレスコンピュートとの使い分け まとめ
  3. 3. Cloud OnAir Cloud OnAir Cloud Run とは?
  4. 4. Cloud OnAir Cloud Run とは? Cloud Run Knative をベースにした GCP の新しいサーバーレスコンピュート Beta
  5. 5. Cloud OnAir GCP のサーバーレスコンピュート App Engine Apps Cloud Functions Functions Cloud Run Containers NEW!
  6. 6. Cloud OnAir 2 つの Cloud Run Cloud Run 完全にサーバーレス 管理するクラスタは無し 使った分だけお支払い Cloud Run on GKE GKE のクラスタ上でサーバーレス 費用は GKE のクラスタに含まれる 本日はこちらを中心に説明
  7. 7. Cloud OnAir 主な特徴 高速なデプロイ ステートレスなコンテナ 高速に 0 to N スケール 数秒でデプロイし URL を付与 サーバーレス、ネイティブ 管理するサーバーはなし コードに集中 言語やライブラリの制約なし きっちり使った分だけお支払い 高いポータビリティ どこでも同じ Developer Experience フルマネージでも GKE のクラスタ上でも Knative API の一貫性 ロックインの排除
  8. 8. Cloud OnAir Cloud Run を利用可能なリージョン東京含む、世界 4 リージョンで利用可能 asia-northeast1 europe-west1 us-east1 us-central1 利用可能なリージョン ( 2019.08.23 時点 )
  9. 9. Cloud OnAir Cloud OnAir Demo サービスのデプロイ
  10. 10. Cloud OnAir ユースケース パブリック • Web App • API endpoint プライベート • マイクロサービス • 非同期処理のワーカー • データ処理(軽微な ETL ) • Mobile backend • Webhook
  11. 11. Cloud OnAir リソースモデル Revision A-1 Revision A-2 Revision A-3 Revision B-1 Revision B-2 Container InstanceContainer InstanceContainer Instance Requests Service A @region A Service B @region B Service Cloud Run の主リソース Service 毎に Endpoint を提供 自動で設定される a.run.app ドメイン、 もしくはカスタム ドメインが選択可能 Revision デプロイするごとに生成される コンテナ イメージとデプロイ時に指定される環境変数 やパラメーターから構成される。 Container Instance 実際にリクエストを受けるコンテナ、requests の数に 応じて自動的にスケール GCP Project X
  12. 12. Cloud OnAir 課金の考え方 Instance Billable Time Instance Time Billable Non-billable Request 1 Start Request 1 End Request 2 Start Request 2 End
  13. 13. Cloud OnAir Cloud OnAir Cloud Run Technical Tips
  14. 14. Cloud OnAir Cloud OnAir Container Runtime Contract
  15. 15. Cloud OnAir ● Linux x86_64 ABI をサポート ● 0.0.0.0 かつ、環境変数 PORT に対してリッスン ● リクエストを受信してから 4 分以内に HTTP サーバーを起動する必要 ● レスポンスタイムアウトはデフォルト 5 分 ( 最大 15 分 ) コンテナに関する決まりごと Container Instance Must listen on 0.0.0.0: $PORT App /HTTP Server Default response timeout: 5 mins Must start within 4 mins once requests come
  16. 16. Cloud OnAir ● CPU ○ デフォルト 1vCPU ○ 変更不可 ● メモリ ○ デフォルト 256 MB ○ 変更可、最小 128 MB 〜 最大 2 GB ● ファイルシステム ○ 読み書き可能 ○ コンテナインスタンスに割り当てられたメモリ上を利用 ○ データの永続性なし コンテナのスペック https://cloud.google.com/run/docs/reference/container-contract
  17. 17. Cloud OnAir Cloud Run では各コンテナインスタンスがオートスケーリングにより 増減するため、アプリケーションはステートレスであることが 推奨されている。 アプリケーションはステートレスに Database Key Value Store OR / AND Container Instance App /HTTP Server セッション情報は DB や KVS に保存
  18. 18. Cloud OnAir System Call Cloud Run のコンテナインスタンスは gVisor によりサンドボックス化されている ため、コンテナアプリケーションからの System Call が可能。 ただし一部の System Call は サポートされていない可能性があるので、 その際はサポートまで。 https://gvisor.dev/docs/user_guide/compati bility/linux/amd64/ Container gVisor Host System calls Limited system calls Secure isolation }
  19. 19. Cloud OnAir Cloud OnAir Cloud Run サービスの利用
  20. 20. Cloud OnAir HTTPS によるアクセス Service A https://servicea-q6vo4odwpq-an.a.run.app サービスを新規デプロイすると FQDN と SSL 証明書が割り当てられ、HTTPS でアクセス可能 $ gcloud beta run deploy servicea --image gcr.io/cloudrun/hello
  21. 21. Cloud OnAir IAM による認証 IAM Service A 認証 デフォルトで IAM によるアクセス認証が有効 role: "roles/run.invoker" member: "cloudtaro@..." Header: "Authorization: bearer ID_TOKEN" $ gcloud beta run deploy servicea --image gcr.io/cloudrun/hello HTTPS
  22. 22. Cloud OnAir 一般公開する場合 サービスをデプロイする際に、--allow-unauthenticated オプションを 指定し、認証なしアクセスを許可する $ gcloud beta run deploy servicea --image gcr.io/cloudrun/hello --allow-unauthenticated IAM Service A role: "roles/run.invoker" member: "allUsers" HTTPS
  23. 23. Cloud OnAir メッセージングサービスとの連携 Cloud Pub / Sub から Cloud Run のサービスに対して イベントのプッシュを行う IAM Service A Cloud Pub / Sub role: "roles/run.invoker" member: "pubsub@..." $ gcloud beta run deploy servicea --image gcr.io/cloudrun/hello 認証 HTTPS
  24. 24. Cloud OnAir 非同期処理 Cloud Tasks の HTTP タスク ハンドラとして Cloud Run のサービスを利用する IAM Service A Cloud Tasks role: "roles/run.invoker" member: "cloudtasks@..." $ gcloud beta run deploy servicea --image gcr.io/cloudrun/hello 認証 HTTPS
  25. 25. Cloud OnAir 定期実行 Cloud Scheduler から定期的に Cloud Run のサービスを呼び出す IAM Service A Cloud Scheduler role: "roles/run.invoker" member: "cloudscheduler@..." $ gcloud beta run deploy servicea --image gcr.io/cloudrun/hello 認証 HTTPS
  26. 26. Cloud OnAir Cloud OnAir Cloud Run から 他のサービスを利用
  27. 27. Cloud OnAir サービスアカウントの利用 サービスアカウントを使って他の GCP サービスへアクセス サービスのデプロイ時に任意のサービスアカウントを指定することが可能 Service A Container Instance App /HTTP Server $ gcloud beta run deploy servicea --image gcr.io/cloudrun/hello --service-account “run-storage@...” from google.cloud import storage storage_client - storage.Client() Bucket = storage_client.get_bucket(BUCKET_NAME) app.py Cloud Storage 等 他の GCP サービス デフォルトのサービスアカウントはCompute Engine のデフォルトサービス アカウント API
  28. 28. Cloud OnAir 別の Cloud Run サービスへのアクセス Service A Cloud Run から他の Cloud Run サービスを呼び出す場合も IAM 認証を利用可能 メタデータサーバーから ID トークンを入手し、ヘッダーに付けてリクエスト Container Instance App /HTTP Server app.py IAM Service B token_response = get(token_request_url,  headers=token_request_headers) jwt = token_response.content.decode("utf-8") receiving_service_headers = {'Authorization': 'bearer {}'.format(jwt)} response = get(receiving_service_url, headers=receiving_service_headers) HTTPS
  29. 29. Cloud OnAir Cloud SQL への接続 Service A アプリケーションから UNIX ソケット経由で Cloud SQL Proxy へ接続可能 第2世代の MySQL インスタンス or PostgreSQL インスタンス を推奨 Container Instance App / HTTP Server import MySQLdb db = MySQLdb.connect(unix_socket=‘/cloudsql /[CONNECTION NAME]’, user=CLOUDSQL_USER, passwd=CLOUDSQL_PASSWD) $ gcloud beta run deploy servicea --image gcr.io/cloudrun/hello --add-cloudsql-instances INSTANCE-ID Cloud SQL app.py
  30. 30. Cloud OnAir シークレット管理 現在 Cloud KMS は Cloud Run を直接的にサポートしていない 予めKMSで暗号化したシークレットを Cloud Storage に保存し、 必要時にダウンロードして復号化する方法がワークアラウンドとして 利用できる。 Cloud Run Cloud Storage Cloud KMS ① 暗号化されたシークレットを取得 ② 暗号化されたシークレットを復号化 ③ App が復号化した シークレットを利用
  31. 31. Cloud OnAir シークレット管理 ~ Berglas Berglas を使うことでアプリケーション自体から Cloud Storage や Cloud KMS へ のアクセスやシークレットのハンドリングロジックを排除し、 シークレット管理をシンプルに行うことが可能に Cloud Run Cloud Storage Cloud KMS ① 暗号化されたシークレットを取得 ② 暗号化されたシークレットを復号化 ③ App が復号化した シークレットを利用 Berglas でラップ
  32. 32. Cloud OnAir Cloud OnAir Concurrency と オートスケーリング
  33. 33. Cloud OnAir Concurrency Concurrency とは同時の 1 つの Container Instance に投げられる リクエストの最大数 Google Cloud Functions など一般的な FaaS は 一度に1つのリクエストしかハンドルできない。 なので "concurrency = 1". Cloud Run の場合、 concurrency の値を 1 から 80 まで設定できる (default: 80) ので、1 つの コンテナインスタンス で同時に 複数のリクエストを処理することが出来る 最適な Concurrency 値は実装に依存するので、 本番利用前に十分に検証し確認する必要がある Service A v1 concurrency = 1 Service A v2 concurrency = 20
  34. 34. Cloud OnAir オートスケーリング Cloud Run ではリクエスト数に応じて特に明示的に設定を していなくてもオートスケーリングを行う リクエストがしばらく (体感 5 分) 無い場合、コンテナインスタンスが 0 になる Service A 繁忙期 Service A リクエストがない時間帯 コンテナインスタンス のデフォルト最大数は 1000
  35. 35. Cloud OnAir コールドスタート Cloud Run は サービス特性上コールドスタートが多くなる場合がある コールドスタートとは一からコンテナを起動しリクエストを受けられる 状態になるまでのことを指し、この時間が長いとレスポンスタイムなどに 影響がある 以下の方法によりコールドスタートによる影響を軽減する 1. Concurrency 数の最適化によるオートスケール時のコールドスタート数削減 2. Cloud Scheduler などを利用して定期的にリクエストを Cloud Run に投げることで コンテナインスタンスが 0 になることを防ぐ 3. コンテナ自体の起動時間を短くする
  36. 36. Cloud OnAir Cloud OnAir Demo オートスケーリング
  37. 37. Cloud OnAir Cloud OnAir カスタムドメイン
  38. 38. Cloud OnAir Custom Domain デフォルトでは run.app のサブドメインが割り当てられるが、 お客様自身のドメインを使うことも可能 SSL 証明書は Let’s Encrypt で自動的に払い出される ( 5 ~ 10分掛かる ) GET https://hwpy.crun.gcpx.org hwpy.crun.gcpx.org IN CNAME ghs.googlehosted.com. DNS resolve 1 つのサービスに対して複数のドメインをマッピングすることが可能 Hostヘッダー毎のリクエストルーティングなどに便利
  39. 39. Cloud OnAir Cloud OnAir ビルド、デプロイ
  40. 40. Cloud OnAir Cloud Build サーバーレスな CI/CD プラットフォーム お客様が VM を用意したりキャパシティの管理をする必要はない 柔軟なビルドステップ あらゆるサーバーレス CLI ツールをビルドステップとして組み込むことが可能 デベロッパーフレンドリー 開発者が使い慣れた Git のイベントに応じたトリガー
  41. 41. Cloud OnAir Cloud Build を利用した CI /CD ワークフロー Cloud Source Repositories Cloud Build Google Container Registry Cloud Run開発者 ソースコード管理に Cloud Source Repositories ビルドとデプロイに Cloud Build コンテナイメージ管理に Google Container Registry を利用し、CI/CD ワークフローをサーバーレスに構築可能 $ git commit $ git push Trigger $ docker push get container image
  42. 42. Cloud OnAir Cloud OnAir モニタリング、ロギング
  43. 43. Cloud OnAir Stackdriver サポート Error ReportingLoggingMonitoring Metric を Revision 単位で 選択可能 CPU/Memory の Allocaiton や request count や request latency など計測可能 Revision 単位で アクセスログや コンテナの終了などの イベントログを 確認可能 Cloud Run で実行されて いるアプリの中で 発生した Exception など を拾いレポート
  44. 44. Cloud OnAir Cloud OnAir Demo Stackdriver によるメトリックスとログの確認
  45. 45. Cloud OnAir Cloud OnAir 他の GCP サーバーレスコンピュートとの 使い分け
  46. 46. Cloud OnAir 各サービスの特徴 ● ソースコードベース ● Web / API ● ユーザー数・ナレッジの 多さ ● 1 プロジェクトにつき 1 リージョンの縛り ● ソースコードベース ● イベントドリブン ● あくまで関数 ● 最大 9 分の実行時間 ● 1 concurrency / instance ● コンテナベース ● Web / API ● ランタイム制約、 ロックインなし ● 最大 15 分 の実行時間 ● 1 プロジェクトで複数リー ジョン利用可能 Cloud Functions Google App Engine Cloud Run
  47. 47. Cloud OnAir 公式使い分けチャート https://cloud.google.com/serverless-options
  48. 48. Cloud OnAir Cloud OnAir まとめ
  49. 49. Cloud OnAir ● Cloud Run はコンテナをサーバーレスに使える便利なサービス ● 従来の PaaS / FaaS にあった言語ランタイム及び ライブラリに制約がない ● 0 to N のスケーリングや小さめのスペックなどの特徴を考慮の上、ご利 用ください ● 今後の機能拡充にご期待ください! まとめ

×