SlideShare a Scribd company logo
1 of 54
Download to read offline
Flutter Dart でサーバレス サービス
Cloud Run + Google API で REST API を作る
GDG DevFest Osaka 2019 - Lightning Talk -
1
自己紹介
名前
robo (兼高理恵)
好きなもの
モバイル端末
おしごと
アプリの設計から実装まで
所属
GDG Kyoto(staff) WTM Kyoto(staff) Flutter Osaka
2
この Lightning Talk は、
Free your Google Sheets data: build a REST API with Cloud Run
https://www.youtube.com/watch?v=V1Fqv8sGqWk&list=PLIivdWyY5sqKiWvnaA5A8F3UQ0Xu5i49U&index=2
…の基本情報を元に、
fully managed Cloud Run で、
 Dart言語から Google API を使った
  ステートレスな REST API サービスの作り方
の初歩についての説明です。
3
Introduction
4
Flutter アプリ開発で、ちょっとした WEB API が必要な時
ステートレスなサービスであれば、          
Firebase Cloud Functions を使いたいところです…が、
    現時点では、dart で実行させることはできません。
Firebase チームでは、          
Cloud Run を使うことを勧めています。
5
Q. when will dart officially be supported for writing Cloud Functions?
Cloud Functions で dart が正式にサポートされるのはいつですか?
A. So at the moment, you can't run dart on functions,
現時点では、Cloud Functions で dart を実行することはできません。
6
APIs for Firebase console, Dart in Cloud Run, & more! #AskFirebase
https://www.youtube.com/watch?v=2hcHQtuR6l0&feature=youtu.be&t=233
A. but what you might be interested in is something called Cloud Run.
ですが、Cloud Run と呼ばれるものに、惹きつけられるかもしれませんね。
7
Firebase チームは、Cloud Run を使うことを勧めています。
Cloud Run は、先月から一般提供開始 (BETAが外れた)
Cloud Run ( https://cloud.google.com/run/ )は、
サーバレス・コンピューティングの Knative 互換機能を提供してくるサービス
● REST アクセスにより実行される、
ステートレスな HTTP駆動型アプリケーションの開発&運用が、
セットアップ済のコンテナ(独自カスタマイズ版でもOK)を使って、
開発者が自由に言語やフレームワーク(開発環境)を選択できる。
● コンテナのビルドやデプロイまで、GCP環境内で一括管理(fully managed)
8
マネージド Knative サービスの Cloud Run を一般提供開始 (2019/11/20) 
https://cloud.google.com/blog/ja/products/serverless/knative-based-cloud-run-services-are-ga
Cloud Run は、2タイプあることに注意
● fully managed Cloud Run
Cloud Run から実行されるサービスのコンテナは、
Google が暗黙で提供する Knative 互換環境のクラスタにデプロイされます。
Knative の存在を意識しなくて済むよう隠してくれます。
● Cloud Run for Anthos / Cloud Run on GKE
コンテナは、自分が管理するオンプレミス、または GCP 上の
Anthos GKE クラスタにデプロイすることになります。
カスタマイズ性は高いが、Knative の存在を意識する必要があります。
9
Differences between Cloud Run and Cloud Run on GKE
https://www.youtube.com/watch?v=RVdhyprptTQ
Cloud Run / Quickstart (dart 版 注意事項)
Dart版 サンプルは、Cloud Run for Anthos になっています
fully managed 版は、Steve Hamblett さんのブログが参考になります。
10
Dart on Googles Cloud Run platform, an introduction (2019/05/19)
https://medium.com/@stevehamblett/dart-on-googles-cloud-run-platform-an-introduction-346feb49cbbb
shamblett/cloudruntest Hello World - Dar sample (fully managed 版)
https://github.com/shamblett/cloudruntest
Quickstart: Build and Deploy (Cloud Run 公式の Hello-World チュートリアル)
https://cloud.google.com/run/docs/quickstarts/build-and-deploy
Hello World - Dart sample (Cloud Run on GKE 版)
https://github.com/knative/docs/tree/master/community/samples/serving/helloworld-dart
https://github.com/knative/docs/tree/175313457f94baa036b400f12d162157edef70a7/community/samples/serving/helloworld-dart
Cloud Run で、REST API を作る入門動画
11
Serverless Toolbox
https://www.youtube.com/playlist?list=PLIivdWyY5sqKiWvnaA5A8F3UQ0Xu5i49U
Serverless Toolbox 動画リストの
Free your Google Sheets data では、
Google API を使った REST API 作成
の基本が説明されています。
…が、dart 対応に必要な知見は未提供です。
Free your Google Sheets data: build a REST API with Cloud Run
https://www.youtube.com/watch?v=V1Fqv8sGqWk&list=PLIivdWyY5sqKiWvnaA5A8F3UQ0Xu5i49U&index=2
serverlesstoolbox/rest-api-sheet/
https://github.com/momander/serverlesstoolbox/tree/master/rest-api-sheet
Node.js 版なので、 dart に応用するには、独自調査と確認が必要なことに注意
Cloud Run with Google API
at the dart language
fully managed Cloud Run での
dart言語で Google API を使った REST API の作り方
12
Free your Google Sheets data でのキーポイント
● Google API を利用するための資格証明(認証)を簡便にするため、
Cloud Run デフォルトのサービスアカウントの資格証明情報を暗黙的に
使う簡易な手法を用いて、HTTP Client オブジェクトを取得している。
● 取得した HTTP Client から、
Google API Client ⇒ Google Sheets v4 API Client を生成している。
● SlipSlap warehouse スプレッドシート ID を指定して、
指定 Range(タブ名+A1:E21などの範囲)のセルデータを取得している。
SlipSlap warehouse は、 共有 設定で誰でも閲覧可能になっているので、
シート共有への サービスアカウントID (メールアドレス)の登録は不要です。
スプレッドシート ID ⇒ 1rcj3SbeK_VcMOBrwwdAksJXQVoHTZHRzVOBO8A3X148
13
SlipSlap warehouse スプレッドシート(Ingredients タブ)
https://docs.google.com/spreadsheets/d/1rcj3SbeK_VcMOBrwwdAksJXQVoHTZHRzVOBO8A3X148/edit#gid=0
Cloud Run デフォルト サービスアカウント
● Cloud Run で実行されるサービスアプリは、
サービスアカウントID ⇒ PROJECT_NUMBER-compute@developer.gserviceaccount.com の
GCP プロジェクトの Compute Engine default service account が紐付き、
GCP プロジェクトの全リソースへの Read/Write のアクセス権限を持つ。
● Google Cloud Platform API や Google API は、
利用元が許可を与えたアカウントと認証できなければ利用させません。
ですが、GCP API client library や Google API client library では、
簡便化のため、デフォルトのサービスアカウント暗黙的に使った、
暗黙的認証を利用する(認証を隠蔽化する)こともできます。
14
Service identity
https://cloud.google.com/run/docs/securing/service-identity
作業手順概要   
1. GCP プロジェクトを作成する。(課金が有効になっていること!)
2. GCP プロジェクトの Cloud Run を有効にする。
Cloud Build API Cloud Run API のアプリケーションを登録…を行います。
3. GCP プロジェクトの API と サービス > ライブラリ > Google Sheets API を有効にする。
4. dart プロジェクト(PJ)をローカルに作成する。
pubspec.yaml と Dockerfile および サーバ起動 と ロジック の テンプレート追加
5. Cloud Run デフォルトのサービスアカウントを利用した、
暗黙的な資格証明(認証)から HTTP Client を取得するコードをPJに追加。
6. HTTP Client から、Google sheets v4 API クライアントを作成して、
シートアクセス結果を返すコードをPJに追加。
7. gcloud ビルド&デプロイコマンド で、Cloud Run ビルドとデプロイを行う。
gcloud コマンドのインストールやコンポーネントアップデートも忘れずに。
15参照 Quickstart: Build and Deploy ⇒ https://cloud.google.com/run/docs/quickstarts/build-and-deploy#follow-cloud-run
dart プロジェクト構成例
16
cloud_run_sheets ⇒ dart プロジェクトディレクトリ
 pubspec.yaml ⇒ dart 構成ファイル
 Dockerfile ⇒ コンテナ環境構成ファイル
 bin/
   server.dart ⇒ サーバ起動+サービス実行ファイル
 lib/
   service.dart ⇒ サービス・ロジックのファイル
pubspec.yaml 構成例
17
name: cloud_run_sheets
description: A Cloud Run with Google API example by Dart language.
version: 1.0.0+1
environment:
sdk: ">=2.1.0 <3.0.0"
dependencies:
# google api client library
googleapis: ^0.54.0
# google auth client library (for google api credential certification)
googleapis_auth: ^0.2.11
# dart http server
shelf: ^0.7.5
dependencies で導入するパッケージ
● googleapis 0.54.0 ⇒ https://pub.dev/packages/googleapis
Google API クライアントを提供する、公式 Dart クライアントライブラリ。
Google Sheet v4 を含む、各種 Google API クライアントオブジェクトは、
Google API 資格証明(認証)で取得した HTTP Client を使って生成します。
● googleapis_auth 0.2.11 ⇒ https://pub.dev/packages/googleapis_auth
公式 Dart 用の Google API OAuth2 クライアントライブラリ。
Dart で、クライアントの Google API 資格証明(認証)を行い、
OAuth2 認証に成功すれば、HTTP Client オブジェクトを返します。
● shelf 0.7.5 ⇒ https://pub.dev/packages/shelf
Dartチームが開発している、Webサーバ・ミドルウェア。
Webサーバとしてだけでなく、Webサーバ部分機能のみの提供も可能。
18
Dockerfile 構成例
19
# Use Google's official Dart image.
# https://hub.docker.com/r/google/dart-runtime/
FROM google/dart-runtime
# Service must listen to $PORT environment variable.
# This default value facilitates local development.
ENV PORT 8080
bin/server.dart コード例(1/2)
20
import 'dart:io';
// HTTP Server shelf ユーティリティ・メソッド関連パッケージ
import 'package:shelf/shelf_io.dart' as shelf;
// HTTP Server shelf クラス関連パッケージ
import 'package:shelf/shelf.dart';
import 'package:cloud_run_sheets/service.dart';
/// Google Sheets データ取得サービス・サーバ起動
///
/// 【参考元】
/// Cloud Run
/// Quickstart: Build and Deploy より、OTHER > Dart サンプル・リポジトリ
/// https://github.com/knative/docs/blob/master/community/samples/serving/helloworld-dart/bin/server.dart
bin/server.dart コード例(2/2)
21
void main() async {
var port = int.tryParse(Platform.environment['PORT']) ?? 8080;
Future<Response> Function(Request) service = (Request request) async {
// Google Sheet v4 API で、指定スプレッドシートのデータを JSON 文字列形式で取得する。
String response = await new SheetsService().doService();
return Response.ok(response);
};
Handler handler = Pipeline().addMiddleware(logRequests()).addHandler(service);
HttpServer server = await shelf.serve(handler, InternetAddress.anyIPv4, port);
print('Serving at http://${server.address.host}:${server.port}');
}
server.dart 処理概要
1. server.dart の main() 関数
2〜4をデプロイ時や REST リクエスト時に実行
2. Future<Response> Function(Request) service 関数の生成
Request からパラメータを取得してサービスロジックを呼び出し、
Response のボディとして、実行結果を返す、サービス関数を生成
3. Handler handler オブジェクトの生成
Request を引数にサービス関数を実行させ Response を受け取る、
サービスハンドラを生成   
4. HttpServer server オブジェクトの生成
サービスハンドラ、IPアドレス、Port 番号 を引数に、HTTPサーバを生成
22
lib/service.dart コード例(1/7)
23
import 'dart:convert';
// Google Sheets v4 API クラス関連パッケージ
import 'package:googleapis/sheets/v4.dart';
// Google API Auth Client 生成ユーティリティ・メソッド関連パッケージ
import 'package:googleapis_auth/auth_io.dart' as auth;
// Google API Auth Client クラス関連パッケージ
import 'package:googleapis_auth/auth.dart';
/// Google Sheets からデータを取得するサンプル
class SheetsService {
lib/service.dart コード例(2/7)
24
/// 資格証明認証済 HTTP Client
AutoRefreshingAuthClient httpClient;
/// Google Sheet v4 API で、指定スプレッドシートのデータを JSON 文字列形式で取得する。
Future<String> doService() async {
SheetsApi api = await createFromDefaultServiceAccountCredentials();
String jsonString = await getSheetValues(api);
httpClient.close();
return jsonString;
}
lib/service.dart コード例(3/7)
25
/// Google Sheets v4 API クライアント生成(暗黙的サービスアカウント利用) <br/>
/// 暗黙的にデフォルト・サービスアカウントの資格証明情報を利用するファクトリメソッドで、
/// 引数無しで HTTP Client オブジェクトを取得して、 Google Sheets API クライアントを生成します。
Future<SheetsApi> createFromDefaultServiceAccountCredentials() async {
httpClient = await auth.clientViaMetadataServer();
// Google Sheets のアクセススコープは、デフォルト・サービスアカウントに従うことに注意!
SheetsApi api = new SheetsApi(httpClient);
return api;
}
lib/service.dart コード例(4/7)
26
/// Google Sheets API クライアントを使って、指定スプレッドシートの指定範囲からデータを取得する。
static Future<String> getSheetValues(SheetsApi api) async {
// SlipSlap warehouse のプロパティ
// https://docs.google.com/spreadsheets/d/1rcj3SbeK_VcMOBrwwdAksJXQVoHTZHRzVOBO8A3X148/edit#gid=0
String spreadsheetId = "1rcj3SbeK_VcMOBrwwdAksJXQVoHTZHRzVOBO8A3X148";
String sheetTitle = "Ingredients";
String sheetRange = "A1:E21";
String range = '$sheetTitle!$sheetRange';
// スプレッドシートから取得した範囲データを JSON 形式(文字列)で返却する。
ValueRange readValueRange =
await api.spreadsheets.values.get(spreadsheetId, range);
String jsonString = json.encode(readValueRange.toJson());
return jsonString;
}
Google API 関連(資料先)
● googleapis 0.54.0 パッケージ
https://pub.dev/packages/googleapis
リポジトリ dart-lang/googleapis
https://github.com/dart-lang/googleapis
各種 Google API リファレンス
https://pub.dev/documentation/googleapis/latest/
googleapis.sheets.v4 リファレンス
https://pub.dev/documentation/googleapis/latest/googleapis.sheets.v4/googleapis.sheets.v4-library.html
● googleapis_auth 0.2.11 パッケージ
https://pub.dev/packages/googleapis_auth
リポジトリ dart-lang/googleapis_auth
https://github.com/dart-lang/googleapis_auth
27
Google Sheets v4 (資料先)
● Google Sheets v4 API 一覧
サンプルでは、指定範囲のセル値を取得する get しか使っていませんが、
指定範囲をクリアする clear や、セルを追加する append などもあります。
Google Sheets API
https://developers.google.com/sheets/api/reference/rest?apix=true
● 任意のシート+セル範囲のデータを取得したい場合は、
スプレッドシートID と レンジ (シート名(省略可)! セル範囲)で指定します。
スプレッドシート URL、シート名 Ingredients、セル範囲 A1〜E21 を表す例
URL ⇒ https://docs.google.com/spreadsheets/d/1rcj3SbeK_VcMOBrwwdAksJXQVoHTZHRzVOBO8A3X148/edit#gid=0
スプレッドシートID ⇒ "1rcj3SbeK_VcMOBrwwdAksJXQVoHTZHRzVOBO8A3X148"
シート名 / タブ名 ⇒ "Ingredients"、 シート範囲 ⇒ "A1:E21"
レンジ ⇒ シート名!シート範囲 ⇒ "Ingredients!A1:E21" 28
Google Sheets v4 (資料先)
● スプレッドシートには、スコープによりアクセス制限が指定できます。
SCOPES アクセス制限種別
 SheetsApi.SpreadsheetsReadonlyScope Google Drive 全スプレッドシートに Read Only
 SheetsApi.SpreadsheetsScope Google Drive 全スプレッドシートに Read/Write
 SheetsApi.DriveReadonlyScope Google Drive 全ファイルに Read/Download
 SheetsApi.DriveFileScope Google Drive 全ファイルとフォルダに Read/Write
 SheetsApi.DriveScope Google Drive 全ファイルに Read/Write/Download
29
Authorize Requests # Authorizing requests with OAuth 2.0
https://developers.google.com/sheets/api/guides/authorizing#AboutAuthorization
lib/service.dart コード例(5/7)
30
/// Google Sheets v4 API クライアント生成(明示的サービスアカウント利用) <br/>
/// 明示的に独自サービスアカウントの資格証明情報を利用するファクトリメソッドで、
/// GCP プロジェクトのサービスアカウントより、 ダウンロードした資格証明情報 JSON データを使って、
/// HTTP Client オブジェクトを取得して、 Google Sheets API クライアントを生成します。
static Future<SheetsApi> createFromServiceAccountCredentials() async {
// TODO 独自作成した サービスアカウント+秘密鍵&公開鍵ペアの 資格証明 JSON データを適用してください。
// サービスアカウントの資格証明 JSON データから、サービスアカウント資格証明オブジェクトを生成する。
// 【参考元】
// DazWilkin/main.dart
// https://gist.github.com/DazWilkin/34d628b998b4266be818ffb3efd688aa
final ServiceAccountCredentials _credentials =
lib/service.dart コード例(6/7)
31
new ServiceAccountCredentials.fromJson(r'''
{
"type": "service_account",
"project_id": "",
"private_key_id": "",
"private_key": "",
"client_email": "",
"client_id": "",
"auth_uri": "",
"token_uri": "",
"auth_provider_x509_cert_url": "",
"client_x509_cert_url": ""
}
''');
lib/service.dart コード例(7/7)
32
// Google Sheets のアクセススコープ指定
const List<String> _scopes = const [SheetsApi.SpreadsheetsReadonlyScope];
// 明示的に独自サービスアカウントの資格証明情報を利用するファクトリメソッドで、
// 引数の資格証明情報 JSON データを使って、 HTTP Client オブジェクトを取得します。
httpClient =
await auth.clientViaServiceAccount(_credentials, _scopes);
SheetsApi api = new SheetsApi(httpClient);
return api;
}
}
注)暗黙的認証のみを利用する場合、5〜7の
  createFromServiceAccountCredentials( ) メソッド は不要です。
コンテナビルド
● Cloud Run ビルドコマンド例
$ cd cloud_run_sheets
$ gcloud builds submit --tag gcr.io/project-123ab/cloud_run_sheets
gcloud builds submit --tag gcr.io/PROJECT-ID/IMAGE名 で、
Cloud Build で、docker image ビルドを行って アーティファクトを作成し、
Cloud Storage に コンテナイメージを .tgz ファイルで保管します。
dart プロジェクトを Cloud にアップロードしてからビルドするので、
     ローカルに docker をインストールしておく必要はありません。
33
コンテナビルド(資料先)
● Building Containers
https://cloud.google.com/run/docs/building/containers
● gcloud builds submit (コマンドリファレンス)
https://cloud.google.com/sdk/gcloud/reference/builds/submit
34
コンテナデプロイ
● Cloud Run デプロイコマンド例
$ gcloud run deploy hello-sheets 
--image gcr.io/project-123ab/cloud_run_sheets 
--platform managed --region asia-northeast1 --allow-unauthenticated
gcloud run deploy SERVICE名 --platform managed --region REGION名 で、
アーティファクト指定された docker image を Container Registry の
REGION 指定されたプライベートレジストリに管理(保管/読出)させて、
Google が暗黙で提供する Knative 互換環境のクラスタにデプロイします。
--allow-unauthenticated 指定により、URLアクセス元認証を不要にします。
35
コンテナデプロイ(資料先)
● Deploying container images
https://cloud.google.com/run/docs/deploying
● Allowing public (unauthenticated) access
https://cloud.google.com/run/docs/authenticating/public
● gcloud run deploy (コマンドリファレンス)
https://cloud.google.com/sdk/gcloud/reference/run/deploy
36
デプロイ実行時出力例
37
      注意)プロジェクトID や、サービス URL は、ダミーの値です。
$ gcloud run deploy hello-sheets --image gcr.io/project-123ab/cloud_run_sheets --platform managed
--region asia-northeast1 --allow-unauthenticated
Deploying container to Cloud Run service [hello-sheets] in project [project-123ab] region [asia-northeast1]
✓ Deploying new service... Done.
✓ Creating Revision... Revision deployment finished. Waiting for health check
to begin.
✓ Routing traffic...
✓ Setting IAM Policy...
Done.
Service [hello-sheets] revision [hello-sheets-00001-kit] has been deployed and is serving 100 percent of
traffic at https://hello-sheets-3fooo3barr-an.a.run.app
        サービスURLは、メモしておきます。
Cloud Run 実行
メモしておいたサービスURL をブラウザに貼り付ければ、
Ingredients シートの A1:E21 セル値が JSON 出力されます。
38
SlipSlap warehouse スプレッドシート(Ingredients タブ)
https://docs.google.com/spreadsheets/d/1rcj3SbeK_VcMOBrwwdAksJXQVoHTZHRzVOBO8A3X148/edit#gid=0
{
"majorDimension":"ROWS","range":"Ingredients!A1:E21","values":[
["id","name","amount","unit","warehouse-location"],
["6486","Fairy dust","21","kg","A-4"],
〜 省略 〜
["3084","Rainbow sprinkles","11","sacks","H-5"],
["1272","Pixie sparkles","2","kg","J-6"]
]
}
自分でも動かしてみたい方へ
サンプルプロジェクト cloud_run_sheets.zip
https://drive.google.com/open?id=1Vb-AIPF9rJ7c54FKLDEh3m9Kjn4Uk40M
P.15 の作業手順概要に従って、GCP プロジェクトの設定を行い、
zip ファイルを伸長して展開された cloud_run_sheets ディレクトリで、
下記のビルドとデプロイのコマンドを実行すれば、動作確認ができます。
39
$ gcloud builds submit --tag gcr.io/プロジェクトID/cloud_run_sheets
$ gcloud run deploy hello-sheets --image gcr.io/プロジェクトID/cloud_run_sheets 
--platform managed --region asia-northeast1 --allow-unauthenticated
Free your Google Sheets data ビデオの中では、
1ヶ月の課金は、1ドルにも満たないとのことですよ。
Cloud Run で Dart を使って
指定された Google Spreadsheets から、
指定範囲のセル値を取得するだけのサンプルですが、
この情報が、なんらかのお役に立てば幸いです。
40
41
ご清聴、
ありがとうございました。
情報修正があれば更新します
最新版スライドはこちらから
Appendix
42
その他 (GCP + Dart 関連資料)
● googleapis と googleapis_auth を使った、
Speech API や Sheets API の利用方法について説明しています。
Cloud Run を使っていませんが、
Google Auth API クライアントを使った明示的認証や、
Google API クライアントやライブラリについての情報があります。
43
Google Sheets API v4 for Flutter/Dart 
https://stackoverflow.com/questions/46466410/google-sheets-api-v4-for-flutter-dart
Getting Started w/ Dart on GCP (2019/04/04)     
https://medium.com/google-cloud/getting-started-with-dart-on-gcp-ffc49165d181
Cloud Run ( https://cloud.google.com/run/ )は、
サーバレス・コンピューティングの Knative 互換機能を提供してくるサービス
● REST アクセスにより実行される、
ステートレスな HTTP駆動型アプリケーションの開発&運用が、
セットアップ済のコンテナ(独自カスタマイズ版でもOK)を使って、
開発者が自由に言語やフレームワーク(開発環境)を選択できる。
● コンテナのビルドやデプロイまで、GCP環境内で一括管理(fully managed)
● Knative は、Kubernetes 上で Serverlessを実現するプラットフォーム。
Kubernetes は、細かく設定できますが、複雑になってしまう反面、
Knative は、コンテナビルド、Event トリガー、Serving(リソースやライフサイクル管理)を抽象化し
て、開発者をサービスの実行(アプリ開発)に集中させます。
44
最強のServerlessプラットフォーム? Knative登場
http://jaco.udcp.info/entry/2018/07/25/043415
Cloud Run は、2タイプあることに注意
● fully managed Cloud Run
Cloud Run から実行されるサービスのコンテナは、
Google が暗黙で提供する Knative 互換環境のクラスタにデプロイされます。
Knative の存在を意識しなくて済むよう隠してくれます。
● Cloud Run for Anthos / Cloud Run on GKE
コンテナは、自分が管理するオンプレミス、または GCP 上の
Anthos GKE クラスタにデプロイすることになります。
カスタマイズ性は高いが、Knative の存在を意識する必要があります。
45
Differences between Cloud Run and Cloud Run on GKE
https://www.youtube.com/watch?v=RVdhyprptTQ
Cloud Run におけるサーバレスとは
● Cloud Run におけるサーバレスとは、
コンテナを使い、様々な言語やフレームワークが使える
セットアップ済の環境を利用できることで、   
サーバの環境設定や管理に悩まされず、
単一でステートレスな HTTP駆動型アプリケーション/
マイクロサービスの開発のみに専念できることを示します。
補足:独自カスタマイズした環境を作るコンテナも利用できます。
46
Cloud Run におけるフルマネージドとは
● Cloud Run におけるフルマネージドとは、
コンテナ・イメージのビルドとレジストリ登録およびデプロイが、
GCP 環境内で完結できることを示します。  
Cloud Build サービスによる、
コンテナのビルド docker image 作成+Cloud Storage への保管
+コンテナ・アーティファクトの管理と、  
Container Registry サービスによる、
アップロードされたコンテナ・アーティファクトを管理する
プライベート・レジストリの提供と、  
コンテナを GCP が管理する
Cloud Run 用の Knative 互換クラスタにデプロイして、
REST アクセスによるサービスの起動&実行&破棄を提供します。
47
Cloud Run の効能
● Cloud Run の効能
HTTP駆動のマイクロサービスの開発&実行環境が提供されることで、
1つの小さなアプリケーション・サービスの開発が迅速化するだけでなく、
1つの大きなアプリケーション・サービスの開発が、
HTTP通信を介した複数の独立した小さな機能/マイクロサービス開発へと
分割できることも示します。
48
Cloud Run の限界
● 各コンテナが完全に独立しているわけでなく、
コンテナ間での協調(コンテナ・オーケストレーション)が必要な
大きなアプリケーションの場合、   
協調し合うコンテナ群がクラスタとして管理できなければ、
1つの大きなアプリケーション・サービスとして成り立ちません。
Cloud Run は、各コンテナを HTTP 通信を介した疎結合にできますが、
コンテナ間を協調させるには、クラスタ管理が別途必要です。
換言すれば大きなアプリ・サービスであっても、
コンテナ間が独立していて協調が不要なら Cloud Run で完結します。
49
GKE と Cloud Run、どう使い分けるべきか
https://cloud.google.com/blog/ja/products/containers-kubernetes/when-to-use-google-kubernetes-engine-vs-cloud-run-for-containers
gcloud コマンド
● gcloud コマンドライン ツールの概要
https://cloud.google.com/sdk/gcloud/?hl=ja
● gcloud (コマンドリファレンス)
https://cloud.google.com/sdk/gcloud/reference/?hl=ja
50
gcloud コマンド一覧(一般的なもの)
$ gcloud components list ⇒ インストール済コンポーネント一覧表示
$ gcloud components update ⇒ インストール済コンポーネント更新
$ gcloud components install COMPONENT-IDS(例:kubectl) ⇒ コンポーネント追加インストール
$ gcloud auth list ⇒ ログイン済アカウント一覧表示
$ gcloud auth login ⇒ Webブラウザを介して、任意アカウントで GCP にログインする
$ gcloud auth revoke アカウント(例:hoge@gmail.com など) ⇒ アカウントの保管済トークンを削除します。
※ アカウントは、revoke しても再ログインすれば、ログイン済アカウント一覧に復帰します。
$ gcloud config list ⇒ 設定済プロパティの設定状況一覧を表示します。
$ gcloud config list --all ⇒ 全プロパティの設定状況一覧を表示します。
$ gcloud config get-value プロパティ(例:accountやproject) ⇒ 指定プロパティの設定値を表示します。
$ gcloud config set プロパティ(例:account) 値(例:hogo@gmail.com) ⇒ 指定プロパティに値を設定します。
$ gcloud config configurations list ⇒ 個別設定状況名の一覧を表示します。
$ gcloud config configurations create 個別設定状況名 ⇒ 個別設定状況名(ファイル)を新規作成します。
$ gcloud config configurations delete 個別設定状況名 ⇒ 個別設定状況名(ファイル)を削除します。
$ gcloud config configurations activate 個別設定状況名 ⇒ 設定内容を個別設定状況名(ファイル)に切替ます。
51
Cloud Run 起動アカウントを追加する
● Cloud Run 起動元として許可するアカウントの追加
Cloud Run ⇒ フィルタサービスでサービスにチェックを入れる ⇒
サービスのパネルが右ペインで開く ⇒ 権限 / Authentication タブに切替 ⇒
フィルタツリーから Cloud Run 起動元 / Cloud Run Invoker を開き ⇒
メンバーを追加 フィールドで Google アカウントのメールアドレスを追加 ⇒
役割 / Roll で Cloud Run 起動元 / Cloud Run Invoker を選択 ⇒
保存 / Save ボタンを押下する。
gcloud run deploy での --allow-unauthenticated 指定の実体は、
権限の役割 ⇒ Cloud Run 起動元、アカウント ⇒ allUsers への設定です。
52
Cloud Run 起動アカウントを制限する
● Cloud Run 起動元 役割の権限を与えたアカウントの認証情報(トークン)を
Authorizationヘッダーに設定して、URL アクセスを行なわせることで、
許可アカウントからのアクセス時のみサービスが起動します。
具体的には、Cloud Run 起動アカウント追加に倣い、
Cloud Run 起動元 役割の権限は、特定アカウントだけに割り当て、
下記のコマンドで、認証とサービス URL アクセスを行なわせます。
$ gcloud auth login ⇒ ブラウザを介して、GCP に許可アカウントでログインする。
$ curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" SERVICE_URL
不許可アカウントで GCPログインしていた場合、403 Forbidden が返ります。
53
Authenticating developers ⇒ https://cloud.google.com/run/docs/authenticating/developers
Authenticating end users ⇒ https://cloud.google.com/run/docs/authenticating/end-users
デフォルト サービスアカウント注意事項
デフォルトのサービスアカウントは権限範囲が拡すぎます。
このため公式には独自にサービスアカウントを作成して、
権限範囲を限定することが推奨されています。
独自サービスアカウントを利用する手順
1. 独自のサービスアカウント作成
2. Google API 設定へのサービスアカウント登録 (証明書作成)
3. サービスアプリへの証明書の組み込み
4. 証明書を使った許諾先認証を行うコードの追加
5. Google API 認証を経た HTTP Client オブジェクト取得
6. Google API クライアント生成
7. Google API の利用
8. 利用後の Google API クライアント破棄 54

More Related Content

What's hot

What's hot (20)

今改めて学ぶ Microsoft Azure 基礎知識
今改めて学ぶ Microsoft Azure 基礎知識今改めて学ぶ Microsoft Azure 基礎知識
今改めて学ぶ Microsoft Azure 基礎知識
 
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
 
Azure Log Analytics 概要
Azure Log Analytics 概要Azure Log Analytics 概要
Azure Log Analytics 概要
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
(SDD415) NEW LAUNCH: Amazon Aurora: Amazon’s New Relational Database Engine |...
(SDD415) NEW LAUNCH: Amazon Aurora: Amazon’s New Relational Database Engine |...(SDD415) NEW LAUNCH: Amazon Aurora: Amazon’s New Relational Database Engine |...
(SDD415) NEW LAUNCH: Amazon Aurora: Amazon’s New Relational Database Engine |...
 
Google Cloud で実践する SRE
Google Cloud で実践する SRE  Google Cloud で実践する SRE
Google Cloud で実践する SRE
 
エラー・バジェットによるリスク管理 Managing risk with error budgets
エラー・バジェットによるリスク管理 Managing risk with error budgetsエラー・バジェットによるリスク管理 Managing risk with error budgets
エラー・バジェットによるリスク管理 Managing risk with error budgets
 
GitLab から GitLab に移行したときの思い出
GitLab から GitLab に移行したときの思い出GitLab から GitLab に移行したときの思い出
GitLab から GitLab に移行したときの思い出
 
Edge Computing と k8s でなんか話すよ
Edge Computing と k8s でなんか話すよEdge Computing と k8s でなんか話すよ
Edge Computing と k8s でなんか話すよ
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver
 
「おうちクラウド」が今熱い!
「おうちクラウド」が今熱い!「おうちクラウド」が今熱い!
「おうちクラウド」が今熱い!
 
IDaaS を正しく活用するための認証基盤設計 ~Azure Active Directory の構成パターン詳細~
IDaaS を正しく活用するための認証基盤設計 ~Azure Active Directory の構成パターン詳細~IDaaS を正しく活用するための認証基盤設計 ~Azure Active Directory の構成パターン詳細~
IDaaS を正しく活用するための認証基盤設計 ~Azure Active Directory の構成パターン詳細~
 
OpenMPI入門
OpenMPI入門OpenMPI入門
OpenMPI入門
 
GraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ることGraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ること
 
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
INF-018_OS の中で SDN 抗争勃発!? ~主役を争う VXLAN vs NVGRE~
INF-018_OS の中で SDN 抗争勃発!? ~主役を争う VXLAN vs NVGRE~INF-018_OS の中で SDN 抗争勃発!? ~主役を争う VXLAN vs NVGRE~
INF-018_OS の中で SDN 抗争勃発!? ~主役を争う VXLAN vs NVGRE~
 
OpenVRやOpenXRの基本的なことを調べてみた
OpenVRやOpenXRの基本的なことを調べてみたOpenVRやOpenXRの基本的なことを調べてみた
OpenVRやOpenXRの基本的なことを調べてみた
 

Similar to Dartでサーバレスサービス

[External] 2021.12.15 コンテナ移行の前に知っておきたいこと @ gcpug 湘南
[External] 2021.12.15 コンテナ移行の前に知っておきたいこと  @ gcpug 湘南[External] 2021.12.15 コンテナ移行の前に知っておきたいこと  @ gcpug 湘南
[External] 2021.12.15 コンテナ移行の前に知っておきたいこと @ gcpug 湘南
Google Cloud Platform - Japan
 

Similar to Dartでサーバレスサービス (20)

GDG Shikoku 2013
GDG Shikoku 2013GDG Shikoku 2013
GDG Shikoku 2013
 
Airflowを広告データのワークフローエンジンとして運用してみた話
Airflowを広告データのワークフローエンジンとして運用してみた話Airflowを広告データのワークフローエンジンとして運用してみた話
Airflowを広告データのワークフローエンジンとして運用してみた話
 
[External] 2021.12.15 コンテナ移行の前に知っておきたいこと @ gcpug 湘南
[External] 2021.12.15 コンテナ移行の前に知っておきたいこと  @ gcpug 湘南[External] 2021.12.15 コンテナ移行の前に知っておきたいこと  @ gcpug 湘南
[External] 2021.12.15 コンテナ移行の前に知っておきたいこと @ gcpug 湘南
 
Server side Swift & Photo Booth
Server side Swift & Photo Booth Server side Swift & Photo Booth
Server side Swift & Photo Booth
 
Open Source x AI
Open Source x AIOpen Source x AI
Open Source x AI
 
Osc fukuoka xAI Meetup
Osc fukuoka xAI MeetupOsc fukuoka xAI Meetup
Osc fukuoka xAI Meetup
 
GitHub Actions + Cloudflare API
GitHub Actions + Cloudflare APIGitHub Actions + Cloudflare API
GitHub Actions + Cloudflare API
 
Azureをフル活用したサーバーレスの潮流について
Azureをフル活用したサーバーレスの潮流についてAzureをフル活用したサーバーレスの潮流について
Azureをフル活用したサーバーレスの潮流について
 
Tekton 入門
Tekton 入門Tekton 入門
Tekton 入門
 
Azure Functions と Serverless - 概要と企業向け Tips
Azure Functions と Serverless - 概要と企業向け TipsAzure Functions と Serverless - 概要と企業向け Tips
Azure Functions と Serverless - 概要と企業向け Tips
 
GAS + SaaS時々 AWSで自動化
GAS + SaaS時々 AWSで自動化GAS + SaaS時々 AWSで自動化
GAS + SaaS時々 AWSで自動化
 
The Twelve-Factor App (2017)
The Twelve-Factor App (2017)The Twelve-Factor App (2017)
The Twelve-Factor App (2017)
 
【初心者向け】API を使ってクラウドの管理を自動化しよう
【初心者向け】API を使ってクラウドの管理を自動化しよう【初心者向け】API を使ってクラウドの管理を自動化しよう
【初心者向け】API を使ってクラウドの管理を自動化しよう
 
Goで作って配布するAzureコマンドラインユーティリティ
Goで作って配布するAzureコマンドラインユーティリティGoで作って配布するAzureコマンドラインユーティリティ
Goで作って配布するAzureコマンドラインユーティリティ
 
GCP でも Serverless!!
GCP でも Serverless!!GCP でも Serverless!!
GCP でも Serverless!!
 
SendGrid SDKを捨てた話
SendGrid SDKを捨てた話SendGrid SDKを捨てた話
SendGrid SDKを捨てた話
 
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
OpenLineage による Airflow のデータ来歴の収集と可視化(Airflow Meetup Tokyo #3 発表資料)
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
 
2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化
 
CEDEC 2015: Google スケールで実現する!ゲーム&分析基盤
CEDEC 2015: Google スケールで実現する!ゲーム&分析基盤CEDEC 2015: Google スケールで実現する!ゲーム&分析基盤
CEDEC 2015: Google スケールで実現する!ゲーム&分析基盤
 

More from cch-robo

Loose and fluffy_ddd_intro
Loose and fluffy_ddd_introLoose and fluffy_ddd_intro
Loose and fluffy_ddd_intro
cch-robo
 

More from cch-robo (19)

Flutter_Forward_Extended_Kyoto-Keynote_Summary
Flutter_Forward_Extended_Kyoto-Keynote_SummaryFlutter_Forward_Extended_Kyoto-Keynote_Summary
Flutter_Forward_Extended_Kyoto-Keynote_Summary
 
go_router が隠してくれるもの
go_router が隠してくれるものgo_router が隠してくれるもの
go_router が隠してくれるもの
 
Introduction_on_designing_test_in_flutter
Introduction_on_designing_test_in_flutterIntroduction_on_designing_test_in_flutter
Introduction_on_designing_test_in_flutter
 
Google I/O 2021 Flutter 全体報告
Google I/O 2021 Flutter 全体報告Google I/O 2021 Flutter 全体報告
Google I/O 2021 Flutter 全体報告
 
Dart / Flutter コードファイルジェネレート入門
Dart / Flutter コードファイルジェネレート入門Dart / Flutter コードファイルジェネレート入門
Dart / Flutter コードファイルジェネレート入門
 
フラッター開発におけるシークレット情報取扱考察
フラッター開発におけるシークレット情報取扱考察フラッター開発におけるシークレット情報取扱考察
フラッター開発におけるシークレット情報取扱考察
 
Flutterを体験してみませんか
Flutterを体験してみませんかFlutterを体験してみませんか
Flutterを体験してみませんか
 
Dart言語の進化状況
Dart言語の進化状況Dart言語の進化状況
Dart言語の進化状況
 
明示的アニメで、Flutterアニメーション入門
明示的アニメで、Flutterアニメーション入門明示的アニメで、Flutterアニメーション入門
明示的アニメで、Flutterアニメーション入門
 
DartPad+CodePenで、Flutterを体験してみよう
DartPad+CodePenで、Flutterを体験してみようDartPad+CodePenで、Flutterを体験してみよう
DartPad+CodePenで、Flutterを体験してみよう
 
Pin-point rebuildable and non-rebuild custom widget
Pin-point rebuildable and non-rebuild custom widgetPin-point rebuildable and non-rebuild custom widget
Pin-point rebuildable and non-rebuild custom widget
 
FlutterでのWidgetツリーへの状態伝播とアクセス制限の基本戦略
FlutterでのWidgetツリーへの状態伝播とアクセス制限の基本戦略FlutterでのWidgetツリーへの状態伝播とアクセス制限の基本戦略
FlutterでのWidgetツリーへの状態伝播とアクセス制限の基本戦略
 
Before lunch オプションを使って Flutterでstaging/release環境を切り替える
Before lunch オプションを使って Flutterでstaging/release環境を切り替えるBefore lunch オプションを使って Flutterでstaging/release環境を切り替える
Before lunch オプションを使って Flutterでstaging/release環境を切り替える
 
Flutter のリアクティブ戦略 set state 〜 redux まで
Flutter のリアクティブ戦略 set state 〜 redux までFlutter のリアクティブ戦略 set state 〜 redux まで
Flutter のリアクティブ戦略 set state 〜 redux まで
 
Android lint-srp-practice
Android lint-srp-practiceAndroid lint-srp-practice
Android lint-srp-practice
 
Loose and fluffy_ddd_intro
Loose and fluffy_ddd_introLoose and fluffy_ddd_intro
Loose and fluffy_ddd_intro
 
Firebase Test Lab 無料枠を使ってみました。
Firebase Test Lab 無料枠を使ってみました。Firebase Test Lab 無料枠を使ってみました。
Firebase Test Lab 無料枠を使ってみました。
 
ZTE OPEN を日本語化(バージョンアップ)してみる
ZTE OPEN を日本語化(バージョンアップ)してみるZTE OPEN を日本語化(バージョンアップ)してみる
ZTE OPEN を日本語化(バージョンアップ)してみる
 
FirefoxOSで学ぶJavaScript作法
FirefoxOSで学ぶJavaScript作法FirefoxOSで学ぶJavaScript作法
FirefoxOSで学ぶJavaScript作法
 

Recently uploaded

Recently uploaded (11)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 

Dartでサーバレスサービス

  • 1. Flutter Dart でサーバレス サービス Cloud Run + Google API で REST API を作る GDG DevFest Osaka 2019 - Lightning Talk - 1
  • 3. この Lightning Talk は、 Free your Google Sheets data: build a REST API with Cloud Run https://www.youtube.com/watch?v=V1Fqv8sGqWk&list=PLIivdWyY5sqKiWvnaA5A8F3UQ0Xu5i49U&index=2 …の基本情報を元に、 fully managed Cloud Run で、  Dart言語から Google API を使った   ステートレスな REST API サービスの作り方 の初歩についての説明です。 3
  • 5. Flutter アプリ開発で、ちょっとした WEB API が必要な時 ステートレスなサービスであれば、           Firebase Cloud Functions を使いたいところです…が、     現時点では、dart で実行させることはできません。 Firebase チームでは、           Cloud Run を使うことを勧めています。 5
  • 6. Q. when will dart officially be supported for writing Cloud Functions? Cloud Functions で dart が正式にサポートされるのはいつですか? A. So at the moment, you can't run dart on functions, 現時点では、Cloud Functions で dart を実行することはできません。 6 APIs for Firebase console, Dart in Cloud Run, & more! #AskFirebase https://www.youtube.com/watch?v=2hcHQtuR6l0&feature=youtu.be&t=233
  • 7. A. but what you might be interested in is something called Cloud Run. ですが、Cloud Run と呼ばれるものに、惹きつけられるかもしれませんね。 7 Firebase チームは、Cloud Run を使うことを勧めています。
  • 8. Cloud Run は、先月から一般提供開始 (BETAが外れた) Cloud Run ( https://cloud.google.com/run/ )は、 サーバレス・コンピューティングの Knative 互換機能を提供してくるサービス ● REST アクセスにより実行される、 ステートレスな HTTP駆動型アプリケーションの開発&運用が、 セットアップ済のコンテナ(独自カスタマイズ版でもOK)を使って、 開発者が自由に言語やフレームワーク(開発環境)を選択できる。 ● コンテナのビルドやデプロイまで、GCP環境内で一括管理(fully managed) 8 マネージド Knative サービスの Cloud Run を一般提供開始 (2019/11/20)  https://cloud.google.com/blog/ja/products/serverless/knative-based-cloud-run-services-are-ga
  • 9. Cloud Run は、2タイプあることに注意 ● fully managed Cloud Run Cloud Run から実行されるサービスのコンテナは、 Google が暗黙で提供する Knative 互換環境のクラスタにデプロイされます。 Knative の存在を意識しなくて済むよう隠してくれます。 ● Cloud Run for Anthos / Cloud Run on GKE コンテナは、自分が管理するオンプレミス、または GCP 上の Anthos GKE クラスタにデプロイすることになります。 カスタマイズ性は高いが、Knative の存在を意識する必要があります。 9 Differences between Cloud Run and Cloud Run on GKE https://www.youtube.com/watch?v=RVdhyprptTQ
  • 10. Cloud Run / Quickstart (dart 版 注意事項) Dart版 サンプルは、Cloud Run for Anthos になっています fully managed 版は、Steve Hamblett さんのブログが参考になります。 10 Dart on Googles Cloud Run platform, an introduction (2019/05/19) https://medium.com/@stevehamblett/dart-on-googles-cloud-run-platform-an-introduction-346feb49cbbb shamblett/cloudruntest Hello World - Dar sample (fully managed 版) https://github.com/shamblett/cloudruntest Quickstart: Build and Deploy (Cloud Run 公式の Hello-World チュートリアル) https://cloud.google.com/run/docs/quickstarts/build-and-deploy Hello World - Dart sample (Cloud Run on GKE 版) https://github.com/knative/docs/tree/master/community/samples/serving/helloworld-dart https://github.com/knative/docs/tree/175313457f94baa036b400f12d162157edef70a7/community/samples/serving/helloworld-dart
  • 11. Cloud Run で、REST API を作る入門動画 11 Serverless Toolbox https://www.youtube.com/playlist?list=PLIivdWyY5sqKiWvnaA5A8F3UQ0Xu5i49U Serverless Toolbox 動画リストの Free your Google Sheets data では、 Google API を使った REST API 作成 の基本が説明されています。 …が、dart 対応に必要な知見は未提供です。 Free your Google Sheets data: build a REST API with Cloud Run https://www.youtube.com/watch?v=V1Fqv8sGqWk&list=PLIivdWyY5sqKiWvnaA5A8F3UQ0Xu5i49U&index=2 serverlesstoolbox/rest-api-sheet/ https://github.com/momander/serverlesstoolbox/tree/master/rest-api-sheet Node.js 版なので、 dart に応用するには、独自調査と確認が必要なことに注意
  • 12. Cloud Run with Google API at the dart language fully managed Cloud Run での dart言語で Google API を使った REST API の作り方 12
  • 13. Free your Google Sheets data でのキーポイント ● Google API を利用するための資格証明(認証)を簡便にするため、 Cloud Run デフォルトのサービスアカウントの資格証明情報を暗黙的に 使う簡易な手法を用いて、HTTP Client オブジェクトを取得している。 ● 取得した HTTP Client から、 Google API Client ⇒ Google Sheets v4 API Client を生成している。 ● SlipSlap warehouse スプレッドシート ID を指定して、 指定 Range(タブ名+A1:E21などの範囲)のセルデータを取得している。 SlipSlap warehouse は、 共有 設定で誰でも閲覧可能になっているので、 シート共有への サービスアカウントID (メールアドレス)の登録は不要です。 スプレッドシート ID ⇒ 1rcj3SbeK_VcMOBrwwdAksJXQVoHTZHRzVOBO8A3X148 13 SlipSlap warehouse スプレッドシート(Ingredients タブ) https://docs.google.com/spreadsheets/d/1rcj3SbeK_VcMOBrwwdAksJXQVoHTZHRzVOBO8A3X148/edit#gid=0
  • 14. Cloud Run デフォルト サービスアカウント ● Cloud Run で実行されるサービスアプリは、 サービスアカウントID ⇒ PROJECT_NUMBER-compute@developer.gserviceaccount.com の GCP プロジェクトの Compute Engine default service account が紐付き、 GCP プロジェクトの全リソースへの Read/Write のアクセス権限を持つ。 ● Google Cloud Platform API や Google API は、 利用元が許可を与えたアカウントと認証できなければ利用させません。 ですが、GCP API client library や Google API client library では、 簡便化のため、デフォルトのサービスアカウント暗黙的に使った、 暗黙的認証を利用する(認証を隠蔽化する)こともできます。 14 Service identity https://cloud.google.com/run/docs/securing/service-identity
  • 15. 作業手順概要    1. GCP プロジェクトを作成する。(課金が有効になっていること!) 2. GCP プロジェクトの Cloud Run を有効にする。 Cloud Build API Cloud Run API のアプリケーションを登録…を行います。 3. GCP プロジェクトの API と サービス > ライブラリ > Google Sheets API を有効にする。 4. dart プロジェクト(PJ)をローカルに作成する。 pubspec.yaml と Dockerfile および サーバ起動 と ロジック の テンプレート追加 5. Cloud Run デフォルトのサービスアカウントを利用した、 暗黙的な資格証明(認証)から HTTP Client を取得するコードをPJに追加。 6. HTTP Client から、Google sheets v4 API クライアントを作成して、 シートアクセス結果を返すコードをPJに追加。 7. gcloud ビルド&デプロイコマンド で、Cloud Run ビルドとデプロイを行う。 gcloud コマンドのインストールやコンポーネントアップデートも忘れずに。 15参照 Quickstart: Build and Deploy ⇒ https://cloud.google.com/run/docs/quickstarts/build-and-deploy#follow-cloud-run
  • 16. dart プロジェクト構成例 16 cloud_run_sheets ⇒ dart プロジェクトディレクトリ  pubspec.yaml ⇒ dart 構成ファイル  Dockerfile ⇒ コンテナ環境構成ファイル  bin/    server.dart ⇒ サーバ起動+サービス実行ファイル  lib/    service.dart ⇒ サービス・ロジックのファイル
  • 17. pubspec.yaml 構成例 17 name: cloud_run_sheets description: A Cloud Run with Google API example by Dart language. version: 1.0.0+1 environment: sdk: ">=2.1.0 <3.0.0" dependencies: # google api client library googleapis: ^0.54.0 # google auth client library (for google api credential certification) googleapis_auth: ^0.2.11 # dart http server shelf: ^0.7.5
  • 18. dependencies で導入するパッケージ ● googleapis 0.54.0 ⇒ https://pub.dev/packages/googleapis Google API クライアントを提供する、公式 Dart クライアントライブラリ。 Google Sheet v4 を含む、各種 Google API クライアントオブジェクトは、 Google API 資格証明(認証)で取得した HTTP Client を使って生成します。 ● googleapis_auth 0.2.11 ⇒ https://pub.dev/packages/googleapis_auth 公式 Dart 用の Google API OAuth2 クライアントライブラリ。 Dart で、クライアントの Google API 資格証明(認証)を行い、 OAuth2 認証に成功すれば、HTTP Client オブジェクトを返します。 ● shelf 0.7.5 ⇒ https://pub.dev/packages/shelf Dartチームが開発している、Webサーバ・ミドルウェア。 Webサーバとしてだけでなく、Webサーバ部分機能のみの提供も可能。 18
  • 19. Dockerfile 構成例 19 # Use Google's official Dart image. # https://hub.docker.com/r/google/dart-runtime/ FROM google/dart-runtime # Service must listen to $PORT environment variable. # This default value facilitates local development. ENV PORT 8080
  • 20. bin/server.dart コード例(1/2) 20 import 'dart:io'; // HTTP Server shelf ユーティリティ・メソッド関連パッケージ import 'package:shelf/shelf_io.dart' as shelf; // HTTP Server shelf クラス関連パッケージ import 'package:shelf/shelf.dart'; import 'package:cloud_run_sheets/service.dart'; /// Google Sheets データ取得サービス・サーバ起動 /// /// 【参考元】 /// Cloud Run /// Quickstart: Build and Deploy より、OTHER > Dart サンプル・リポジトリ /// https://github.com/knative/docs/blob/master/community/samples/serving/helloworld-dart/bin/server.dart
  • 21. bin/server.dart コード例(2/2) 21 void main() async { var port = int.tryParse(Platform.environment['PORT']) ?? 8080; Future<Response> Function(Request) service = (Request request) async { // Google Sheet v4 API で、指定スプレッドシートのデータを JSON 文字列形式で取得する。 String response = await new SheetsService().doService(); return Response.ok(response); }; Handler handler = Pipeline().addMiddleware(logRequests()).addHandler(service); HttpServer server = await shelf.serve(handler, InternetAddress.anyIPv4, port); print('Serving at http://${server.address.host}:${server.port}'); }
  • 22. server.dart 処理概要 1. server.dart の main() 関数 2〜4をデプロイ時や REST リクエスト時に実行 2. Future<Response> Function(Request) service 関数の生成 Request からパラメータを取得してサービスロジックを呼び出し、 Response のボディとして、実行結果を返す、サービス関数を生成 3. Handler handler オブジェクトの生成 Request を引数にサービス関数を実行させ Response を受け取る、 サービスハンドラを生成    4. HttpServer server オブジェクトの生成 サービスハンドラ、IPアドレス、Port 番号 を引数に、HTTPサーバを生成 22
  • 23. lib/service.dart コード例(1/7) 23 import 'dart:convert'; // Google Sheets v4 API クラス関連パッケージ import 'package:googleapis/sheets/v4.dart'; // Google API Auth Client 生成ユーティリティ・メソッド関連パッケージ import 'package:googleapis_auth/auth_io.dart' as auth; // Google API Auth Client クラス関連パッケージ import 'package:googleapis_auth/auth.dart'; /// Google Sheets からデータを取得するサンプル class SheetsService {
  • 24. lib/service.dart コード例(2/7) 24 /// 資格証明認証済 HTTP Client AutoRefreshingAuthClient httpClient; /// Google Sheet v4 API で、指定スプレッドシートのデータを JSON 文字列形式で取得する。 Future<String> doService() async { SheetsApi api = await createFromDefaultServiceAccountCredentials(); String jsonString = await getSheetValues(api); httpClient.close(); return jsonString; }
  • 25. lib/service.dart コード例(3/7) 25 /// Google Sheets v4 API クライアント生成(暗黙的サービスアカウント利用) <br/> /// 暗黙的にデフォルト・サービスアカウントの資格証明情報を利用するファクトリメソッドで、 /// 引数無しで HTTP Client オブジェクトを取得して、 Google Sheets API クライアントを生成します。 Future<SheetsApi> createFromDefaultServiceAccountCredentials() async { httpClient = await auth.clientViaMetadataServer(); // Google Sheets のアクセススコープは、デフォルト・サービスアカウントに従うことに注意! SheetsApi api = new SheetsApi(httpClient); return api; }
  • 26. lib/service.dart コード例(4/7) 26 /// Google Sheets API クライアントを使って、指定スプレッドシートの指定範囲からデータを取得する。 static Future<String> getSheetValues(SheetsApi api) async { // SlipSlap warehouse のプロパティ // https://docs.google.com/spreadsheets/d/1rcj3SbeK_VcMOBrwwdAksJXQVoHTZHRzVOBO8A3X148/edit#gid=0 String spreadsheetId = "1rcj3SbeK_VcMOBrwwdAksJXQVoHTZHRzVOBO8A3X148"; String sheetTitle = "Ingredients"; String sheetRange = "A1:E21"; String range = '$sheetTitle!$sheetRange'; // スプレッドシートから取得した範囲データを JSON 形式(文字列)で返却する。 ValueRange readValueRange = await api.spreadsheets.values.get(spreadsheetId, range); String jsonString = json.encode(readValueRange.toJson()); return jsonString; }
  • 27. Google API 関連(資料先) ● googleapis 0.54.0 パッケージ https://pub.dev/packages/googleapis リポジトリ dart-lang/googleapis https://github.com/dart-lang/googleapis 各種 Google API リファレンス https://pub.dev/documentation/googleapis/latest/ googleapis.sheets.v4 リファレンス https://pub.dev/documentation/googleapis/latest/googleapis.sheets.v4/googleapis.sheets.v4-library.html ● googleapis_auth 0.2.11 パッケージ https://pub.dev/packages/googleapis_auth リポジトリ dart-lang/googleapis_auth https://github.com/dart-lang/googleapis_auth 27
  • 28. Google Sheets v4 (資料先) ● Google Sheets v4 API 一覧 サンプルでは、指定範囲のセル値を取得する get しか使っていませんが、 指定範囲をクリアする clear や、セルを追加する append などもあります。 Google Sheets API https://developers.google.com/sheets/api/reference/rest?apix=true ● 任意のシート+セル範囲のデータを取得したい場合は、 スプレッドシートID と レンジ (シート名(省略可)! セル範囲)で指定します。 スプレッドシート URL、シート名 Ingredients、セル範囲 A1〜E21 を表す例 URL ⇒ https://docs.google.com/spreadsheets/d/1rcj3SbeK_VcMOBrwwdAksJXQVoHTZHRzVOBO8A3X148/edit#gid=0 スプレッドシートID ⇒ "1rcj3SbeK_VcMOBrwwdAksJXQVoHTZHRzVOBO8A3X148" シート名 / タブ名 ⇒ "Ingredients"、 シート範囲 ⇒ "A1:E21" レンジ ⇒ シート名!シート範囲 ⇒ "Ingredients!A1:E21" 28
  • 29. Google Sheets v4 (資料先) ● スプレッドシートには、スコープによりアクセス制限が指定できます。 SCOPES アクセス制限種別  SheetsApi.SpreadsheetsReadonlyScope Google Drive 全スプレッドシートに Read Only  SheetsApi.SpreadsheetsScope Google Drive 全スプレッドシートに Read/Write  SheetsApi.DriveReadonlyScope Google Drive 全ファイルに Read/Download  SheetsApi.DriveFileScope Google Drive 全ファイルとフォルダに Read/Write  SheetsApi.DriveScope Google Drive 全ファイルに Read/Write/Download 29 Authorize Requests # Authorizing requests with OAuth 2.0 https://developers.google.com/sheets/api/guides/authorizing#AboutAuthorization
  • 30. lib/service.dart コード例(5/7) 30 /// Google Sheets v4 API クライアント生成(明示的サービスアカウント利用) <br/> /// 明示的に独自サービスアカウントの資格証明情報を利用するファクトリメソッドで、 /// GCP プロジェクトのサービスアカウントより、 ダウンロードした資格証明情報 JSON データを使って、 /// HTTP Client オブジェクトを取得して、 Google Sheets API クライアントを生成します。 static Future<SheetsApi> createFromServiceAccountCredentials() async { // TODO 独自作成した サービスアカウント+秘密鍵&公開鍵ペアの 資格証明 JSON データを適用してください。 // サービスアカウントの資格証明 JSON データから、サービスアカウント資格証明オブジェクトを生成する。 // 【参考元】 // DazWilkin/main.dart // https://gist.github.com/DazWilkin/34d628b998b4266be818ffb3efd688aa final ServiceAccountCredentials _credentials =
  • 31. lib/service.dart コード例(6/7) 31 new ServiceAccountCredentials.fromJson(r''' { "type": "service_account", "project_id": "", "private_key_id": "", "private_key": "", "client_email": "", "client_id": "", "auth_uri": "", "token_uri": "", "auth_provider_x509_cert_url": "", "client_x509_cert_url": "" } ''');
  • 32. lib/service.dart コード例(7/7) 32 // Google Sheets のアクセススコープ指定 const List<String> _scopes = const [SheetsApi.SpreadsheetsReadonlyScope]; // 明示的に独自サービスアカウントの資格証明情報を利用するファクトリメソッドで、 // 引数の資格証明情報 JSON データを使って、 HTTP Client オブジェクトを取得します。 httpClient = await auth.clientViaServiceAccount(_credentials, _scopes); SheetsApi api = new SheetsApi(httpClient); return api; } } 注)暗黙的認証のみを利用する場合、5〜7の   createFromServiceAccountCredentials( ) メソッド は不要です。
  • 33. コンテナビルド ● Cloud Run ビルドコマンド例 $ cd cloud_run_sheets $ gcloud builds submit --tag gcr.io/project-123ab/cloud_run_sheets gcloud builds submit --tag gcr.io/PROJECT-ID/IMAGE名 で、 Cloud Build で、docker image ビルドを行って アーティファクトを作成し、 Cloud Storage に コンテナイメージを .tgz ファイルで保管します。 dart プロジェクトを Cloud にアップロードしてからビルドするので、      ローカルに docker をインストールしておく必要はありません。 33
  • 34. コンテナビルド(資料先) ● Building Containers https://cloud.google.com/run/docs/building/containers ● gcloud builds submit (コマンドリファレンス) https://cloud.google.com/sdk/gcloud/reference/builds/submit 34
  • 35. コンテナデプロイ ● Cloud Run デプロイコマンド例 $ gcloud run deploy hello-sheets --image gcr.io/project-123ab/cloud_run_sheets --platform managed --region asia-northeast1 --allow-unauthenticated gcloud run deploy SERVICE名 --platform managed --region REGION名 で、 アーティファクト指定された docker image を Container Registry の REGION 指定されたプライベートレジストリに管理(保管/読出)させて、 Google が暗黙で提供する Knative 互換環境のクラスタにデプロイします。 --allow-unauthenticated 指定により、URLアクセス元認証を不要にします。 35
  • 36. コンテナデプロイ(資料先) ● Deploying container images https://cloud.google.com/run/docs/deploying ● Allowing public (unauthenticated) access https://cloud.google.com/run/docs/authenticating/public ● gcloud run deploy (コマンドリファレンス) https://cloud.google.com/sdk/gcloud/reference/run/deploy 36
  • 37. デプロイ実行時出力例 37       注意)プロジェクトID や、サービス URL は、ダミーの値です。 $ gcloud run deploy hello-sheets --image gcr.io/project-123ab/cloud_run_sheets --platform managed --region asia-northeast1 --allow-unauthenticated Deploying container to Cloud Run service [hello-sheets] in project [project-123ab] region [asia-northeast1] ✓ Deploying new service... Done. ✓ Creating Revision... Revision deployment finished. Waiting for health check to begin. ✓ Routing traffic... ✓ Setting IAM Policy... Done. Service [hello-sheets] revision [hello-sheets-00001-kit] has been deployed and is serving 100 percent of traffic at https://hello-sheets-3fooo3barr-an.a.run.app         サービスURLは、メモしておきます。
  • 38. Cloud Run 実行 メモしておいたサービスURL をブラウザに貼り付ければ、 Ingredients シートの A1:E21 セル値が JSON 出力されます。 38 SlipSlap warehouse スプレッドシート(Ingredients タブ) https://docs.google.com/spreadsheets/d/1rcj3SbeK_VcMOBrwwdAksJXQVoHTZHRzVOBO8A3X148/edit#gid=0 { "majorDimension":"ROWS","range":"Ingredients!A1:E21","values":[ ["id","name","amount","unit","warehouse-location"], ["6486","Fairy dust","21","kg","A-4"], 〜 省略 〜 ["3084","Rainbow sprinkles","11","sacks","H-5"], ["1272","Pixie sparkles","2","kg","J-6"] ] }
  • 39. 自分でも動かしてみたい方へ サンプルプロジェクト cloud_run_sheets.zip https://drive.google.com/open?id=1Vb-AIPF9rJ7c54FKLDEh3m9Kjn4Uk40M P.15 の作業手順概要に従って、GCP プロジェクトの設定を行い、 zip ファイルを伸長して展開された cloud_run_sheets ディレクトリで、 下記のビルドとデプロイのコマンドを実行すれば、動作確認ができます。 39 $ gcloud builds submit --tag gcr.io/プロジェクトID/cloud_run_sheets $ gcloud run deploy hello-sheets --image gcr.io/プロジェクトID/cloud_run_sheets --platform managed --region asia-northeast1 --allow-unauthenticated Free your Google Sheets data ビデオの中では、 1ヶ月の課金は、1ドルにも満たないとのことですよ。
  • 40. Cloud Run で Dart を使って 指定された Google Spreadsheets から、 指定範囲のセル値を取得するだけのサンプルですが、 この情報が、なんらかのお役に立てば幸いです。 40
  • 43. その他 (GCP + Dart 関連資料) ● googleapis と googleapis_auth を使った、 Speech API や Sheets API の利用方法について説明しています。 Cloud Run を使っていませんが、 Google Auth API クライアントを使った明示的認証や、 Google API クライアントやライブラリについての情報があります。 43 Google Sheets API v4 for Flutter/Dart  https://stackoverflow.com/questions/46466410/google-sheets-api-v4-for-flutter-dart Getting Started w/ Dart on GCP (2019/04/04)      https://medium.com/google-cloud/getting-started-with-dart-on-gcp-ffc49165d181
  • 44. Cloud Run ( https://cloud.google.com/run/ )は、 サーバレス・コンピューティングの Knative 互換機能を提供してくるサービス ● REST アクセスにより実行される、 ステートレスな HTTP駆動型アプリケーションの開発&運用が、 セットアップ済のコンテナ(独自カスタマイズ版でもOK)を使って、 開発者が自由に言語やフレームワーク(開発環境)を選択できる。 ● コンテナのビルドやデプロイまで、GCP環境内で一括管理(fully managed) ● Knative は、Kubernetes 上で Serverlessを実現するプラットフォーム。 Kubernetes は、細かく設定できますが、複雑になってしまう反面、 Knative は、コンテナビルド、Event トリガー、Serving(リソースやライフサイクル管理)を抽象化し て、開発者をサービスの実行(アプリ開発)に集中させます。 44 最強のServerlessプラットフォーム? Knative登場 http://jaco.udcp.info/entry/2018/07/25/043415
  • 45. Cloud Run は、2タイプあることに注意 ● fully managed Cloud Run Cloud Run から実行されるサービスのコンテナは、 Google が暗黙で提供する Knative 互換環境のクラスタにデプロイされます。 Knative の存在を意識しなくて済むよう隠してくれます。 ● Cloud Run for Anthos / Cloud Run on GKE コンテナは、自分が管理するオンプレミス、または GCP 上の Anthos GKE クラスタにデプロイすることになります。 カスタマイズ性は高いが、Knative の存在を意識する必要があります。 45 Differences between Cloud Run and Cloud Run on GKE https://www.youtube.com/watch?v=RVdhyprptTQ
  • 46. Cloud Run におけるサーバレスとは ● Cloud Run におけるサーバレスとは、 コンテナを使い、様々な言語やフレームワークが使える セットアップ済の環境を利用できることで、    サーバの環境設定や管理に悩まされず、 単一でステートレスな HTTP駆動型アプリケーション/ マイクロサービスの開発のみに専念できることを示します。 補足:独自カスタマイズした環境を作るコンテナも利用できます。 46
  • 47. Cloud Run におけるフルマネージドとは ● Cloud Run におけるフルマネージドとは、 コンテナ・イメージのビルドとレジストリ登録およびデプロイが、 GCP 環境内で完結できることを示します。   Cloud Build サービスによる、 コンテナのビルド docker image 作成+Cloud Storage への保管 +コンテナ・アーティファクトの管理と、   Container Registry サービスによる、 アップロードされたコンテナ・アーティファクトを管理する プライベート・レジストリの提供と、   コンテナを GCP が管理する Cloud Run 用の Knative 互換クラスタにデプロイして、 REST アクセスによるサービスの起動&実行&破棄を提供します。 47
  • 48. Cloud Run の効能 ● Cloud Run の効能 HTTP駆動のマイクロサービスの開発&実行環境が提供されることで、 1つの小さなアプリケーション・サービスの開発が迅速化するだけでなく、 1つの大きなアプリケーション・サービスの開発が、 HTTP通信を介した複数の独立した小さな機能/マイクロサービス開発へと 分割できることも示します。 48
  • 49. Cloud Run の限界 ● 各コンテナが完全に独立しているわけでなく、 コンテナ間での協調(コンテナ・オーケストレーション)が必要な 大きなアプリケーションの場合、    協調し合うコンテナ群がクラスタとして管理できなければ、 1つの大きなアプリケーション・サービスとして成り立ちません。 Cloud Run は、各コンテナを HTTP 通信を介した疎結合にできますが、 コンテナ間を協調させるには、クラスタ管理が別途必要です。 換言すれば大きなアプリ・サービスであっても、 コンテナ間が独立していて協調が不要なら Cloud Run で完結します。 49 GKE と Cloud Run、どう使い分けるべきか https://cloud.google.com/blog/ja/products/containers-kubernetes/when-to-use-google-kubernetes-engine-vs-cloud-run-for-containers
  • 50. gcloud コマンド ● gcloud コマンドライン ツールの概要 https://cloud.google.com/sdk/gcloud/?hl=ja ● gcloud (コマンドリファレンス) https://cloud.google.com/sdk/gcloud/reference/?hl=ja 50
  • 51. gcloud コマンド一覧(一般的なもの) $ gcloud components list ⇒ インストール済コンポーネント一覧表示 $ gcloud components update ⇒ インストール済コンポーネント更新 $ gcloud components install COMPONENT-IDS(例:kubectl) ⇒ コンポーネント追加インストール $ gcloud auth list ⇒ ログイン済アカウント一覧表示 $ gcloud auth login ⇒ Webブラウザを介して、任意アカウントで GCP にログインする $ gcloud auth revoke アカウント(例:hoge@gmail.com など) ⇒ アカウントの保管済トークンを削除します。 ※ アカウントは、revoke しても再ログインすれば、ログイン済アカウント一覧に復帰します。 $ gcloud config list ⇒ 設定済プロパティの設定状況一覧を表示します。 $ gcloud config list --all ⇒ 全プロパティの設定状況一覧を表示します。 $ gcloud config get-value プロパティ(例:accountやproject) ⇒ 指定プロパティの設定値を表示します。 $ gcloud config set プロパティ(例:account) 値(例:hogo@gmail.com) ⇒ 指定プロパティに値を設定します。 $ gcloud config configurations list ⇒ 個別設定状況名の一覧を表示します。 $ gcloud config configurations create 個別設定状況名 ⇒ 個別設定状況名(ファイル)を新規作成します。 $ gcloud config configurations delete 個別設定状況名 ⇒ 個別設定状況名(ファイル)を削除します。 $ gcloud config configurations activate 個別設定状況名 ⇒ 設定内容を個別設定状況名(ファイル)に切替ます。 51
  • 52. Cloud Run 起動アカウントを追加する ● Cloud Run 起動元として許可するアカウントの追加 Cloud Run ⇒ フィルタサービスでサービスにチェックを入れる ⇒ サービスのパネルが右ペインで開く ⇒ 権限 / Authentication タブに切替 ⇒ フィルタツリーから Cloud Run 起動元 / Cloud Run Invoker を開き ⇒ メンバーを追加 フィールドで Google アカウントのメールアドレスを追加 ⇒ 役割 / Roll で Cloud Run 起動元 / Cloud Run Invoker を選択 ⇒ 保存 / Save ボタンを押下する。 gcloud run deploy での --allow-unauthenticated 指定の実体は、 権限の役割 ⇒ Cloud Run 起動元、アカウント ⇒ allUsers への設定です。 52
  • 53. Cloud Run 起動アカウントを制限する ● Cloud Run 起動元 役割の権限を与えたアカウントの認証情報(トークン)を Authorizationヘッダーに設定して、URL アクセスを行なわせることで、 許可アカウントからのアクセス時のみサービスが起動します。 具体的には、Cloud Run 起動アカウント追加に倣い、 Cloud Run 起動元 役割の権限は、特定アカウントだけに割り当て、 下記のコマンドで、認証とサービス URL アクセスを行なわせます。 $ gcloud auth login ⇒ ブラウザを介して、GCP に許可アカウントでログインする。 $ curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" SERVICE_URL 不許可アカウントで GCPログインしていた場合、403 Forbidden が返ります。 53 Authenticating developers ⇒ https://cloud.google.com/run/docs/authenticating/developers Authenticating end users ⇒ https://cloud.google.com/run/docs/authenticating/end-users
  • 54. デフォルト サービスアカウント注意事項 デフォルトのサービスアカウントは権限範囲が拡すぎます。 このため公式には独自にサービスアカウントを作成して、 権限範囲を限定することが推奨されています。 独自サービスアカウントを利用する手順 1. 独自のサービスアカウント作成 2. Google API 設定へのサービスアカウント登録 (証明書作成) 3. サービスアプリへの証明書の組み込み 4. 証明書を使った許諾先認証を行うコードの追加 5. Google API 認証を経た HTTP Client オブジェクト取得 6. Google API クライアント生成 7. Google API の利用 8. 利用後の Google API クライアント破棄 54