1 of 318

https://goo.gl/k2i1iX (本資料のリンク)

簡単スタートアップガイド

DEPRECATED:

Please see

https://goo.gle/gcho01

2 of 318

コンピュート

ストレージ

アプリケーション

サービス

App Engine

Compute Engine

Container Engine

Cloud

Storage

Cloud

SQL

Cloud

Datastore

BigQuery

Cloud

Endpoints

Kubernetes

3 of 318

本資料の構成

サービス共通編

・プロジェクトの作成

・課金の設定

・開発ツールのインストール

Dataflow編 (Python, Java)

4 of 318

目次

  • サービス共通編
    • プロジェクトを作成する
    • 課金を有効にする
    • サービスを有効にする
    • コマンドツールをインストールする(optional)

5 of 318

目次

  • ComputeEngine編
    • ファイアウォールを追加する
    • インスタンスを作成する
    • ログインする
    • Webページを提供する
    • インスタンスを削除する
    • (補足) ディスクを追加する
    • 参考URL

6 of 318

目次

  • App Engine (Python)編
    • SDKをセットアップする
    • アプリケーションを作成する
    • コードを作成する
    • ローカルテストを行う
    • AppEngineにデプロイする

7 of 318

目次

  • BigQuery編
    • クエリを実行する
    • テーブルを作成する
    • Data Studioと連携する�
  • CloudSQL編
    • インスタンスを作成する
    • インスタンスに接続する

8 of 318

目次

  • 地域をまたがった負荷分散編
    • インスタンスを設定
    • Apacheの設定
    • ファイヤーウォールの設定
    • 負荷分散の設定
    • トラフィックの送信

9 of 318

サービス共通編

10 of 318

GCP へのアクセス方法

Cloud Console - �Web ユーザー�インターフェース

Cloud SDK / Cloud Shell

(コマンドライン�インターフェース)

>_

REST-based API

11 of 318

コンソールへのアクセス

Google Cloud Platformを利用するには、Cloud Platform コンソールにアクセスします。

Cloud Platform コンソール:

https://console.cloud.google.com/

 →サインアップ済みの方: P.17へ

未だサインアップしていない場合:

12ヶ月の無料トライアルに申し込む

 次ページより説明

12 of 318

トライアルを申し込む

  • コンソール上に表示されるTerms of Serviceに同意する

13 of 318

トライアルを申し込む

  • Google アカウント (Gmail アカウント)でログイン

14 of 318

トライアルを申し込む

  • 初回利用時に、無料トライアルが適用されます
  • フォームの必須フィールドを入力

15 of 318

トライアルを申し込む

課金情報を入力します。

  • 名前と住所
  • 支払い方法�(クレジットカード�またはデビットカード)

16 of 318

プロジェクトとは

GCPのリソースが必ず紐づく単位

例: 開発プロジェクトの下にインスタンスが存在

17 of 318

必要に応じてクーポンコードを有効にする

  • GCPコンソールにログオンする

https://console.cloud.google.com/

  • 下記URLにアクセス

https://cloud.google.com/redeem

  • プロモーションコードを入力
  • コンソールより、[お支払い] - [請求アカウント] をクリックし、プロモーションコードが有効になっているか確認

注: クーポンコードを利用するには有料アカウントにアップグレードする必要があります。�有料アカウントでも、適用したクレジット分は無料で利用できます。

18 of 318

課金情報を確認する

課金情報を確認します。

請求先アカウントにプロジェクトが関連づいていることを確認します

クレジットにプロモーションの$300が登録されていることを確認します

19 of 318

課金額の確認方法

[お支払の概要] をクリックすると課金額を確認することができます。

支払い残高

支払履歴

20 of 318

参考:課金とプロジェクトの関係

請求先�アカウント

Project A

請求先�アカウント

Project D

Project B

Project C

クレジットカード

銀行口座

Google�アカウント1

Google�アカウント2

Google�アカウント3

N:N

N:1

1:1

21 of 318

参考:

プロジェクトにアカウントを追加

1

2

3

22 of 318

コマンドラインツール編

23 of 318

コマンドラインツールの選択肢

用途に応じた選択肢

  • Google Cloud Shellを利用 (次ページより説明)
    • ブラウザから手軽にコマンドラインツールを実行
    • ブラウザからインスタンスにSSH

  • gcloud SDKをローカルにインストール (該当ページにジャンプ)
    • ローカルのマシンのTerminalからGCPリソースを操作
    • 開発を行う際、手元のターミナルを使う際に用いる

24 of 318

Google Cloud Shellをつかってみよう

Google Cloud Shellとは:

  • ブラウザから直接クラウドリソースにアクセスできるシェル
  • gcloudなどのSDK, CLIツールをインストール済み

25 of 318

Google Cloud Shellをつかってみよう

Cloud Shellへのアクセス:

  • コンソールで1クリックするだけ

26 of 318

Google Cloud Shellをつかってみよう

Cloud Shellへのアクセス:

  • コンソールが立ち上がったら
  • プロジェクト一覧が表示される

$ gcloud projects list

コマンドラインツールをインストールせず

Cloud Shellですすめる場合:

Compute Engine編へジャンプ

27 of 318

コマンドツールをインストールする

Google Cloud Platformの各サービスは、GUIの管理コンソールとともにコマンドツールを提供しています。

インストール方法は以下を参照ください

https://cloud.google.com/sdk/

28 of 318

コマンドツールをインストールする

Linux/Mac OS XまたはWindowsを選択

29 of 318

コマンドツールをインストールする

$ gcloud version

で正しくインストールされていることを確認してください。

注: gcloudが実行出来ない場合は、パスが設定されている�ことを確認してください。

初回実行時はターミナル or コマンドプロンプトを再起動する必要があります

30 of 318

コマンドツールをインストールする

$ gcloud auth login

でOAuth認証を行います。

31 of 318

コマンドツールをインストールする

デフォルトプロジェクトを設定します

$ gcloud config set project <project-id>

$ gcloud config list

で正しく設定されていることを確認

32 of 318

参考:gcloud コマンド

gcloud コマンドTips集

  • インストールされているコンポーネントを確認する
    • $ gcloud components list
  • コンポーネントをアップデートする
    • $ gcloud components update
  • 新規にコンポーネントをインストール(update)する
    • $ gcloud components update app-engine-python
  • コンポーネントを削除する
    • $ gcloud components remove bq

33 of 318

参考:gcloud コマンド

gcloud コマンドTips集 (続き)

  • 設定情報を確認する
    • $ gcloud config list
  • プロジェクトを変更する
    • $ gcloud config set project <project id>
  • Googleアカウントを変更する
    • $ gcloud auth login
  • 構成プロパティを設定する
    • $ gcloud config set <property> <value>
    • 例: $gcloud config set compute/zone asia-east1-b
  • 構成プロパティを設定解除する
    • $ gcloud config unset <property>

34 of 318

参考: gcloudコマンド

gcloudコマンド活用ビデオ�http://youtu.be/4y4-xn4Vi04

35 of 318

参考: 言語設定を変更するには

設定 > 地域固有の表示形式

36 of 318

参考: 言語設定を変更するには

37 of 318

Compute Engine編

38 of 318

今日のゴール

  • Compute Engineを使ってWebサーバを立ち上げる
    • VMの起動
    • SSHを使ったログイン(GUI/ターミナル)
  • 複数リージョンを跨いだ仮想ネットワークを構築する

39 of 318

準備

  • トライアルもしくは課金が有効になっていること
    • 有効になってない場合はこちら
  • Cloud Shell、もしくはコマンドラインツールが利用できること
    • 完了していない場合はこちら

40 of 318

Webサーバを立ち上げる

手順概要

  • VMインスタンスを作成する
  • ログインする
  • Webページを提供する
  • VMインスタンスを削除する

41 of 318

Compute Engineページへのアクセス

  • Cloud Platformコンソール左上でサービス一覧を表示

42 of 318

VMインスタンスを作成する

  • Cloudコンソールより�[コンピューティング] > [Compute Engine] > [VM インスタンス]を選択

(初回は少し時間がかかります)

  • [作成]または[インスタンスを作成]ボタンをクリックする

43 of 318

VMインスタンスを作成する

  • インスタンス名を入力(例:www1)
  • リージョンを選択(例:asia-northeast1)
  • ゾーンを選択(例:asia-northeast1-a)

44 of 318

VMインスタンスを作成する

  • マシンタイプを選択
    • micro (共有vCPU x1)
  • イメージを選択
    • Debian GNU/Linux 9
  • ファイアウォールを設定
    • HTTPトラフィックを許可
    • HTTPSトラフィックを許可

チェックボックスにチェックする

45 of 318

VMインスタンスを作成する

  • ブートディスクの設定を確認

デフォルトで「インスタンスを削除する際にブートディスクを削除する」が有効になっていることを確認

46 of 318

VMインスタンスを作成する

作成ボタンをクリック

47 of 318

VMインスタンスを作成する

Compute Engine > VM インスタンス より VMインスタンスが作成されたことを確認してください

48 of 318

ログインする

インスタンスにログインする方法は複数あります。

ここでは、二つの方法を紹介します。

  • Webブラウザにてログイン (Cloud Shell)
  • コマンドプロンプトからログイン�

49 of 318

ログインする(ブラウザ)

SSHボタンにてログインします

  • SSHボタンをクリック�

Click

50 of 318

ログインする(ブラウザ)

ブラウザの別ウィンドウにてコンソールが立ち上がることを確認します

51 of 318

ログインする(コマンド)

  • インスタンス一覧画面から対象インスタンスの行を探し、�右端のSSHボタンより ”gcloud コマンドを表示” をクリック

52 of 318

ログインする(コマンド)

  • gcloud compute のコマンドラインをコピー�

53 of 318

ログインする(コマンド)

  • コマンドプロンプトに貼り付けて実行

(初回はSSHキーの生成プロセスあり)

54 of 318

ログインする(Cloud Shell)

  • インスタンス一覧画面から対象インスタンスの行を探し、�右端のSSHボタンより ”gcloud コマンドを表示” をクリック

55 of 318

ログインする(Cloud Shell)

56 of 318

ログインする(Cloud Shell)

Cloud Shell が起動する

kkitase@cloudshell:~ (kimi-handson-project)$ gcloud compute --project "kimi-handson-project" ssh --zone "asia-northeast1-a" "www1" ENTER

This tool needs to create the directory [/home/kkitase/.ssh] before being able to generate SSH keys.

Do you want to continue (Y/n)? Y

Enter passphrase (empty for no passphrase): ENTER

Enter same passphrase again: ENTER

kkitase@www1:~$

57 of 318

Webページを提供する

  • Apache Webサーバをインストールする

以下の2つのsudoコマンドを実行する

me@my-first-instance$ sudo apt-get updateme@my-first-instance$ sudo apt-get install apache2�...output omitted...

58 of 318

Webページを作成する

  • Webページ(HTMLファイル)を作成する

以下のechoコマンドをコピー&ペーストして実行する

$ echo "<html><body><h1>Hello World! running on `hostname`</h1></body></html>" | sudo tee /var/www/html/index.html

59 of 318

Webページを作成する

  • VMインスタンスの一覧画面で、外部IPアドレスを確認
  • IPアドレスのリンクをクリックし、ブラウザでアクセス

クリックし

https を http に変更

60 of 318

インスタンスを削除する(最後に実行)

  • インスタンス一覧画面より、削除するインスタンス名の左側のチェックボックスにチェックを入れる

61 of 318

インスタンスを削除する(最後に実行)

  • インスタンス一覧画面の上部にある ”削除” ボタンをクリック

Click

62 of 318

Compute Engine参考URL (1/2)

63 of 318

Compute Engine参考URL (2/2)

  • オートスケーラー
    • オートスケーラー
  • サポート
  • 費用

64 of 318

(演習1) リージョン跨ぎの通信

以下の構成でVMインスタンスを作成してください

www1

www2

asia

us

Internet

default

1. asiaリージョンにwww1を作成して、defaultネットワークに接続

2. usリージョンwww2 を作成して、defaultネットワークに接続 (www1と同じ手順)

ローカル

端末

65 of 318

(演習1) リージョン跨ぎの通信

  • ローカル端末からASIAリージョン、USリージョンにあるVMインスタンス(外部IPアドレス)に ping を発行して、レイテンシを確認してみてください

  • www1にSSHログインして、www2に向けてpingコマンドを実行してください ( ping [www2の内部IPアドレス] を実行)

✔︎ リージョンをまたいでも、プライベートIPアドレスでアクセスできることを確認してください

66 of 318

(演習2) プライベートネットワークを作成する

プライベートネットワークを作成します。

Internet

www1

www3

www2

default

mynetwork

asia

us

europe

FW Rule

FW Rule

FW Rule

FW Rule

FW Rule

FW Rule

67 of 318

(演習2) プライベートネットワークを作成する

68 of 318

(演習2) プライベートネットワークを作成する

  • ネットワークの設定を行う

    • ネットワーク名を入力
      • mynetwork

    • サブネット作成モードは[自動]を選択

    • ファイアウォールルールをチェック

    • [作成]をクリック

69 of 318

(演習2) プライベートネットワークを作成する

  • mynetworkが作成されたことを確認する

70 of 318

(演習2) プライベートネットワークを作成する

新しいインスタンス www3 を作成して mynetwork に接続します

Internet

www1

www3

www2

default

mynetwork

asia

us

europe

FW Rule

FW Rule

FW Rule

FW Rule

FW Rule

FW Rule

71 of 318

(演習2) プライベートネットワークを作成する

  • VMインスタンス作成時にネットワークを選択することができます

新しく作成した

mynetwork

を選択

72 of 318

(演習2) プライベートネットワークを作成する

1. www3にログインして、www1 に対して ping を実行してください

✔︎ ネットワークを跨いでプライベートIPでアクセスできないことを確認してください

2. www3にログインして、www1のPublic IPアドレスに対して ping を実行してください

✔︎ パブリックIPではアクセスできることを確認してください

73 of 318

(演習3)ディスクを追加する

500GBバイトのディスクを作成して、VMインスタンスに追加して使えるようにしましょう。

手順概要は以下のとおりです。

  • 永続ディスクを作成する
  • VMインスタンスにディスクをアタッチする
  • フォーマット&マウントする

74 of 318

(演習3)ディスクを追加する

  • 対象インスタンスを選択(インスタンス名をクリック)し、[編集]をクリック
  • 追加ディスクセクションで[+項目を追加]をクリック
  • [ディスクを作成]をクリック

75 of 318

(演習3)ディスクを追加する

永続ディスクの情報を入力します。

  • 名前: ディスクの名前
  • ディスクタイプ:標準の永続ディスク
  • ソースの種類 : なし(空のディスク)
  • サイズ: 500

”作成”ボタンをクリック

76 of 318

(演習3)ディスクを追加する

インスタンスにディスクが追加されたことを確認し、保存をクリック

77 of 318

(演習3)ディスクを追加する

VMインスタンスにログインする

  • $ gcloud compute ssh <instance name>

78 of 318

(演習3)ディスクを追加する

利用可能なディスク容量を確認します。

  • $ sudo df -h

アタッチしたディスクが、まだ利用可能でないことを確認してください

79 of 318

(演習3)ディスクを追加する

ディスクをフォーマットしてマウントします。

  • マウントポイントを作成
    • $ sudo mkdir -p <mount point>

例:

sudo mkdir -p /mnt/disk1

80 of 318

(演習3)ディスクを追加する

ディスク名を確認します。

  • ディスク名の確認
    • $ ls -l /dev/disk/by-id/google-*

今回追加するディスク。ディスク名で識別できるようになっている

81 of 318

(演習3)ディスクを追加する

フォーマットを実行します

  • フォーマットするためのツールを実行
    • $ sudo mkfs.ext4 -F -E lazy_itable_init=0,lazy_journal_init=0,discard <disk-name>

例:

sudo mkfs.ext4 -F -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/disk/by-id/google-disk-1

82 of 318

(演習3)ディスクを追加する

マウントを実行します

  • マウントするためのツールを実行
    • $ sudo mount -o discard,defaults <disk-name> <mount-point>

例:

sudo mount -o discard,defaults /dev/disk/by-id/google-disk-1 /mnt/disk1

83 of 318

(演習3)ディスクを追加する

新しいディスクがマウントされ、利用可能になったことを確認します。

  • dfコマンドで確認
    • $ sudo df -h

84 of 318

(演習4) Stackdriver

Stackdriver をセットアップして、ログ、メトリックを確認する

https://cloud.google.com/monitoring/quickstart-lamp#create_a_workspace

85 of 318

[オプション] Loggingエージェント

  • Loggingエージェントの設定
    • 管理 > メタデータ
      • Key: startup-script-url
      • Value: https://dl.google.com/cloudagents/install-logging-agent.sh

86 of 318

Clean-up

リソースごとに削除する場合

  • [Compute Engine] > [VM インスタンス]より作成したVMをすべて削除します。
  • [ネットワーキング] > [VPC ネットワーク] から作成した VPC ネットワーク mynetwork を削除します。
  • その他作成したリソースを削除します。

プロジェクトごと削除する場合

  • [IAM と管理] > [リソースの管理] より、プロジェクトを選択し、削除します。

87 of 318

Kubernetes Engine 編

88 of 318

準備

  • Google Cloud Platformプロジェクトを作成していること
    • 作成してない場合はこちら
  • 課金が有効になっていること
    • 有効になってない場合はこちら
  • “Google Container Engine API”, ”Google Compute Engine” およびその関連APIが有効になっていること
    • 有効になっていない場合はこちらをクリック

89 of 318

製品ライフサイクルと DevOps

コンセプト

ビジネス

開発

運用

一般公開

アジャイル

DevOps

文化: 開発と運用を高速に繰り返し行うための組織や考え方

技術: DevOps 文化を支えるための技術やツール

90 of 318

DevOps における技術要件の変化

  • 手動から自動化へ
    • オペレーション数削減
    • 再現性の向上
  • 自動化からアーキテクチャ最適化へ
    • オペレーションしやすいアーキテクチャへの変更

91 of 318

DevOps を支える技術

  • マイクロサービスアーキテクチャ
  • コンテナとオーケストレーション
  • CI / CD
  • 高度な監視(フィードバックループの実現)

92 of 318

マイクロサービスアーキテクチャとは

従来のモノリシック(一枚岩)なアプリケーションとは異なり、

役割や責務ごとに機能を小さなサービスに分割し、それらのサービスが

一つのシステムとして動作する状態を目指したアーキテクチャ。

モノリシック

マイクロサービス

User/Auth

Product

Payment

User

/Auth

Product

Payment

93 of 318

マイクロサービスアーキテクチャの

メリット

  • ビルド・デプロイプロセスがサービス単位でシンプルに
  • コードベースが小さく、エンジニアの初期学習コスト低
  • サービス間が疎結合になっているので新たな技術を導入しやすい

DevOps 的に開発と運用を高速に繰り返すには

最適なアーキテクチャ

94 of 318

コンテナとは?

コンテナはアプリケーションコードとその依存性を一つのユニットとしてまとめる

これにより、アプリケーションとインフラを疎結合にすることができる

  • コンテナはアプリケーションとその依存性がまとまっているので、例えば、開発環境、テスト環境、本番環境をまたいだデプロイが容易になる
  • オンプレミス、プライベートクラウド、パブリッククラウド等ことなる実行環境間の移動が容易になる

コンテナ イメージ

依存性

アプリケーション コード

95 of 318

VM vs コンテナ

VM

コンテナ

96 of 318

DevOps とも親和性が高いコンテナ

軽量

仮想マシンに比べて

軽量でシンプル。数十ミリ秒で起動

ポータブル

様々な実行環境に対応し、デプロイメントが容易

効率性

リソース使用量が少なく、コンピュートリソースを細分化して効率的に利用可能

97 of 318

コンテナ管理の課題

Cluster

  • 複数のノードに対するコンテナのデプロイは?
  • ノード障害が発生した場合は?
  • コンテナ障害が発生した場合は?
  • アプリケーションのアップグレードはどうやって管理する?

Node

Node

Node

???

コンテナ

コンテナ

コンテナ

コンテナ

コンテナ

コンテナ

98 of 318

Kubernetes (k8s)

OSS のコンテナオーケストレーションシステム

Google 内部で使われている Borg をインスパイア

オンプレでもクラウドでも運用可能

kubernetesの特徴

  • 複数のコンテナに対する管理機構
  • manifest による宣言的な定義/管理
  • オートスケール
  • ローリングアップデート・自己修復

99 of 318

Google Kubernetes Engine (GKE)

  • GCP 上で動作する kubernetes のマネージドサービス
  • マスターノードの管理は全て Google が行う
  • 自動アップグレード
  • GCP の各種サービスとのインテグレーション

100 of 318

CI / CD とは?

継続的インテグレーション(CI: Continuous Integration)

一日に何度もビルドを実行し、ソフトウェアをインテグレーションした時に発生する様々な問題を早期に検出する。フィードバックループを短くし、ソフトウェア開発の品質と生産性を向上させる

継続的デリバリー(CD: Continuous Delivery)

ソフトウェア全体のライフサイクルを通じて、常に本番環境にリリースできる状態を保つ

リリースまでの期間を短縮することで、フィードバックループを短くできる

Trunk, Release

branch/tag

git

flow

CD

CI

Local env, Feature branch/PR

deploy to test env

int tests

trigger

build + unit test

artifact registry

bake/

package

sys tests

deploy to qa/staging/prod

trigger

int tests

trigger

build + unit test

引用: [改訂第3版]Jenkins実践入門

101 of 318

GCP で CI / CD

ソースコード

ビルド&テスト

ストレージ

デプロイ

1

2

3

4

5

モニタリング

Container Registry

Cloud Build

Source Repository

Cloud Storage

Cloud Build

Stackdriver

← フィードバックループ

Spinnaker

(OSS)

102 of 318

Cloud Build

サーバーレスな CI/CD プラットフォーム

お客様が VM を用意したりキャパシティの管理をする必要はない

柔軟なビルドステップ

あらゆるサーバーレス CLI ツールをビルドステップとして

組み込むことが可能

デベロッパーフレンドリー

開発者が使い慣れた Git のイベントに応じたトリガー

Spinnaker との連携

GKE 環境での B/G デプロイ、カナリーリリースへの対応

103 of 318

Cloud Build によるワークフロー

workspace

git push

Pull request

Trigger

Container

Registry

Cloud

Storage

Cloud

Functions

Firebase

Kubernetes

Engine

App

Engine

go

docker

gcloud

kubectl

104 of 318

最終的な構成

105 of 318

クラスタを作成する

管理コンソール > [Kubernetes Engine] を選択

106 of 318

クラスタを作成する

[コンテナ クラスタを作成] ボタンをクリック

107 of 318

クラスタを作成する

クラスタテンプレートから “標準クラスタ”を選択し、コンテナクラスタの情報を入力する

  • 名前 : “cluster-1
  • ロケーションタイプ : “ゾーン
  • ゾーン : “asia-northeast1-a
  • マシンタイプ : “vCPU x 1
  • サイズ(クラスタ内のノード数): “3

“可用性、ネットワーキング、セキュリティ、その他の機能” をクリック

108 of 318

クラスタを作成する

続きのパラメータを入力し、 “作成” をクリック

  • サブネットワーク:”default
  • 「Turn on Stackdriver Logging」をチェック

109 of 318

クラスタを作成する

コンテナクラスタが作成されたことを確認

(作成されるまで数分かかります)

110 of 318

現在の状態

111 of 318

Google Cloud Shell を起動

管理コンソールから[Google Cloud Shell] を起動する

  • 右上のアイコンをクリック

project

2. Ctrl O で保存

3. Ctrl X で終了

112 of 318

kubectl コマンドをインストールする

$ sudo /google/google-cloud-sdk/bin/gcloud components update kubectl

[Google Cloud Shell] にて以下のコマンドを実行

TIPS: gcloud components list コマンドを実行するとインストールされたコンポーネントの一覧を取得することができます。

113 of 318

コマンド環境を設定する

以下のコマンドを実行して、コマンドの実行環境を設定します。

$ export PROJECT_ID="$(gcloud config get-value project -q)" # プロジェクトIDを設定

$ gcloud config set project ${PROJECT_ID}

$ gcloud config set compute/zone asia-northeast1-a # <zone>

$ gcloud config set container/cluster cluster-1 # <cluster name>

$ gcloud container clusters get-credentials cluster-1 # <cluster name>

114 of 318

現在の状態

115 of 318

アプリケーションを作成

アプリケーション用のディレクトリを作成します

$ mkdir helloNode

$ cd helloNode

116 of 318

アプリケーションを作成

server.jsという名前で以下のファイルを保存します。

var http = require('http');

var handleRequest = function(request, response) {

var os = require('os');

var hostname = os.hostname();

response.writeHead(200);

response.end("<h1>Hello World! == " + hostname + "</h1>\n");

}

var www = http.createServer(handleRequest);

www.listen(8080);

# 「Hello World!」とホスト名を出力する単純なWebアプリ。

117 of 318

アプリケーションの実行確認

以下のコマンドを実行

$ node server.js

別のコンソールより curl localhost:8080 をするとメッセージが出力されることを確認 (もしくは「プレビューのポート」)

Ctrl-C にてサーバプロセスを終了

118 of 318

Dockerコンテナイメージを作成

Dockerfile という名前で以下のファイルを保存します。

FROM node:12.4.0

EXPOSE 8080

COPY server.js /server.js

CMD node server.js

119 of 318

Dockerコンテナイメージを作成

Dockerイメージをビルドします。

$ docker build -t asia.gcr.io/${PROJECT_ID}/hello-node:v1 .

ビルドが完了するまで数分かかります。

120 of 318

Dockerコンテナイメージを作成

Google Container Registry にPushします。(初回は時間がかかります)

$ docker push asia.gcr.io/${PROJECT_ID}/hello-node:v1

※ docker push [Push 先ホスト名]/[プロジェクト名] / [イメージ] : [タグ]

Google Container Registry にPush されたことを確認します。

$ gcloud container images list-tags asia.gcr.io/${PROJECT_ID}/hello-node

121 of 318

Docker コンテナイメージを作成�(Cloud Build)

Google Container Registry にPushします。(初回は時間がかかります)

$ gcloud builds submit --tag asia.gcr.io/${PROJECT_ID}/hello-node:v1 .

122 of 318

Dockerコンテナレジストリを確認

コンソール > ツール > Container Registry

123 of 318

演習: Docker コンテナ基本

演習1. 作成したDocker コンテナを Cloud Shell から実行する

$ docker images #ローカルに登録されているDockerイメージ一覧を取得する

$ docker run -d -p 8080:8080 asia.gcr.io/${PROJECT_ID}/hello-node:v1

# ローカルのDockerイメージからコンテナを起動する

$ curl localhost:8080 #ローカルで起動したWebアプリケーションに接続する

$ docker ps #ローカルで起動しているコンテナ一覧を取得する

$ docker kill <container id> #container idを指定してコンテナを停止する

$ docker rm <container id> #container idを指定してコンテナを削除する

124 of 318

現在の状態

$ docker build

$ docker push

or

$ gcloud build submit

125 of 318

Deployment を作成

hello-node-deployment.yaml というファイル名で以下を保存します。

apiVersion: extensions/v1beta1

kind: Deployment

metadata:

labels:

name: hello-node

name: hello-node

spec:

replicas: 1

template:

metadata:

labels:

name: hello-node

spec:

containers:

- image: asia.gcr.io/<project id>/hello-node:v1

name: hello-node

ports:

- containerPort: 8080

# Project IDを書き換えます

126 of 318

Deployment を作成

kubectl create コマンドを使ってDeploymentを作成します。

$ kubectl create -f hello-node-deployment.yaml

$ kubectl get deployment

$ kubectl get pods -o wide

作成されたDeployment、Pod を確認します。

127 of 318

現在の状態

$ docker build

$ docker push

or

$ gcloud build submit

128 of 318

演習

演習1. Pod が動作しているNodeにログインしてDockerコンテナが動いていることを確認しましょう。

演習2. 動作中のDocker コンテナを削除してください。どのような動きになるかを確認しましょう。

129 of 318

Serviceを作成

hello-node-service.yaml として以下を保存します。

apiVersion: v1

kind: Service

metadata:

labels:

name: hello-node

name: hello-node

spec:

ports:

- port: 8080

selector:

name: hello-node

type: LoadBalancer

130 of 318

Serviceを作成

kubectl create コマンドを使ってServiceを作成します。

$ kubectl create -f hello-node-service.yaml

$ kubectl get svc

作成されたサービスを確認します。

ネットワークロードバランサーを作成するため、外部IPアドレスが割り当てられるまでにしばらく時間がかかります。

131 of 318

ここまでの構成

Service

port : 8080

name : hello-node

Deployment

replicas=1

Pod

name : hello-node

create

132 of 318

テスト実行

$ kubectl get svc

サービスの外部IPアドレスを確認します。

curl コマンドでアクセスして出力を確認します。

(Webブラウザでもアクセス可能)

$ curl <EXTERNAL IP>:8080

133 of 318

ポッドをスケールアウト

$ kubectl scale deployment/hello-node --replicas=3

kubectl scale コマンドを使うとポッドのレプリカ数を変更できます。

ポッドの数を確認します。

$ kubectl get pods -o wide

134 of 318

ここまでの構成

Service

port : 8080

name : hello-node

Deployment

replicas=3

Pod

name : hello-node

create

Pod

name : hello-node

Pod

name : hello-node

135 of 318

(演習)バージョン変更

  • アプリケーション(server.js)が出力するメッセージを変更
  • Docker イメージをビルドして v2 とする
  • Docker push で新しいバージョンをレジストリに登録
  • kubectl edit deployments/hello-node でイメージを変更
  • kubectl describe deployments/hello-node でバージョンが変わっていく様子を確認

136 of 318

Cleanup - Kubernetesコンポーネント

$ kubectl delete svc/hello-node

サービスを削除します。

デプロイメントを削除します。

$ kubectl delete deployment/hello-node

137 of 318

Cleanup - GKE クラスタ

クラスタを削除します。

削除アイコンをクリック

138 of 318

Cleanup - Container Registry

管理コンソール > Storage(GoogleCloudStorage)を選択します。

バケット名 asia.artifacts.<project id>.appspot.com を選択して削除ボタンをクリック

1. バケットを選択

2. 削除ボタンをクリック

139 of 318

参考: kubectl コマンド

$ kubectl logs <POD_NAME>

・Pod のstdout/stderr を確認する

$ kubectl cluster-info

・クラスタのメタ情報を確認する

$ kubectl describe pods/<pod name>

・Pod の状態を確認する

140 of 318

地域をまたがる負荷分散編

141 of 318

準備

  • Google Cloud Platformプロジェクトを作成していること
    • 作成してない場合はこちら
  • 課金が有効になっていること
    • 有効になってない場合はこちら
  • ”Google Compute Engine”サービスが有効になっていること
    • 有効になっていない場合はこちら
  • コマンドツールのインストールが完了していること
    • 完了していない場合はこちら

142 of 318

環境

今回はHTTPのみを作成します

143 of 318

インスタンスの設定

次の流れでトラフィックを処理するインスタンスを設定します。

  • 2つのリージョンに2つのインスタンスを構築
  • Apacheのインストールと設定
  • ファイヤーウォールの設定
  • 動作確認

144 of 318

VMインスタンスを作成する

  • Google Cloud Platform コンソールより�[Compute Engine] > [VM インスタンス]を選択
  • [インスタンスを作成]ボタンをクリックする

145 of 318

インスタンスの起動

  • [名前] に www-1、[ゾーン] を us-central1-b に設定
  • [管理、ディスク、ネットワーキング、SSH キー] をクリックすると、拡張設定が表示されます。�[管理] の下の [タグ] フィールドに、http-tagを指定します。
  • [作成] をクリックします。

146 of 318

インスタンスの追加

  • 同じ設定で www-2を追加します (クローンボタンを使うとかんたんに2つ目を作成できます) 。
  • www-3 www-4 をゾーン europe-west1-b に作成します (他の設定は同じです) 。

147 of 318

Apacheのインストールと設定

$ sudo apt-get update

$ sudo apt-get install apache2

$ hostname=`hostname`

$ echo echo '<!doctype html><html><body><h1>'$hostname'</h1></body></html>' | sudo tee /var/www/html/index.html

  • [接続] 列の [SSH] ボタンをクリックして www-xに接続します。(xは1〜4で置き換えてください)
  • 次のコマンドでApacheのインストールと設定をします。
  • 4台全てに設定をしてください。

※付録の演習で実施しますが、イメージを利用してVMの設定をコピーすることもできます。

148 of 318

TIPS: Google Cloud Shell

管理コンソールから[Google Cloud Shell] を起動する。右上のアイコンをクリック

gcloud コマンドなどGCPの操作に必要なツールが予めインストールされている。

project

149 of 318

ファイヤーウォールの設定

  • [ネットワーキング] > [ファイヤーウォールルール] を選択
  • [ファイアウォール ルールを作成] をクリックします。
  • [名前] として www-firewall と入力します。
  • [ネットワーク] に default を選択します。
  • [ソースフィルタ] を すべてのソースから許可 (0.0.0.0/0) に設定します。
  • [許可対象プロトコルとポート] を tcp:80 に設定します。
  • [ターゲットタグ] を http-tag に設定します。
  • [作成] をクリックします。

150 of 318

インスタンスの動作確認

  • [VM インスタンス] に移動し、[外部IP] 列のインスタンスのIPアドレスをコピーします。
  • 以下のいずれかの方法で動作を確認します。
    • ブラウザのアドレス欄にIPアドレスをペーストして確認
    • curl [外部IP] コマンドで確認

151 of 318

ロードバランサーの準備

次の流れで作成します。

  • グローバル静的外部IPアドレスの予約
  • インスタンスグループの作成
  • ヘルスチェックの設定

152 of 318

グローバル静的外部IPアドレスの予約

  • [ネットワーキング] > [外部IPアドレス] を選択
  • [静的 IP を予約] をクリックします。
  • [名前] として lb-ip-cr を割り当てます。
  • [タイプ] を [グローバル] に設定します。
  • [予約] をクリックします。

153 of 318

インスタンスグループの作成

  • [Compute Engine] > [インスタンス グループ] を選択
  • [インスタンス グループを作成] をクリックします。
  • [名前] を us-resources-w に設定します。
  • [ゾーン] を us-central1-b に設定します。
  • [インスタンス定義] で、 [既存のインスタンスを選択] をクリックします。
  • [ネットワーク] で、 default を選択します。
  • [VM インスタンス] で、 www-1www-2 を選択します。
  • その他の設定はそのまま使用します。
  • [作成] をクリックします。

154 of 318

インスタンスグループの作成

  • 同様の要領で、ヨーロッパのインスタンスグループを作成します。
    • [名前]: europe-resources-w
    • [ゾーン]: europe-west1-b
    • [インスタンス]: www-3www-4
  • 2 つのインスタンスにそれぞれ 2 つのインスタンス グループが作成されたことを確認してください。

155 of 318

ヘルスチェックの作成

  • [Compute Engine] > [ヘルスチェック] を選択
  • [ヘルスチェックを作成] をクリックします。
  • [名前] に、 http-basic-check を入力します。
  • [プロトコル] フィールドを [HTTP] に設定します。
  • 残りのフィールドはデフォルト値をそのまま使用します。
  • [作成] をクリックします。

156 of 318

負荷分散サービスの設定

ロードバランサの名前指定

  • [ネットワーキング] > [負荷分散] を選択
  • [ロードバランサ] を作成をクリック
  • [HTTP(S)負荷分散 ] の [設定を開始] をクリック
  • ロードバランサの [名前] に web-map を入力します。

157 of 318

バックエンドの設定

  • [バックエンドの設定] をクリックします。
  • [バックエンド サービスを作成または選択] プルダウン メニューで [バックエンド サービスを作成] を選択します。
  • バックエンド サービスの [名前] を web-map-backend-service に設定します。
  • [インスタンス グループ] を us-resources-w に設定します。
  • 残りのフィールドはデフォルト値をそのまま使用します。
  • [バックエンドを追加] をクリックします
  • europe-resources-w を設定します。
  • [ヘルスチェック] を http-basic-check に設定します。

158 of 318

ホストとパスのルール

  • [新しい HTTP(S)ロードバランサ] ページの左パネルで、[ホストとパスのルール] をクリックします。

ここでは、すべてのトラフィックをデフォルトのルールで実行するため、ホストやパスのルールは設定しません。

159 of 318

フロントエンドの設定

  • [新しい HTTP(S)ロードバランサ] ページの左のパネルで、[フロンドエンドの設定] をクリックします。
  • [プロトコル] フィールドで HTTP を選択します
  • [IP] で、以前に作成した lb-ip-cr を選択します。
  • [ポート] に 80 を選択します。

160 of 318

確認と完了

  • [新しい HTTP(S)ロードバランサ] ページで [確認と完了] をクリックします。
  • 現在の設定と作成しようとしている内容を比較します。
  • すべて問題なければ、[作成] をクリックして HTTP(S)ロードバランサを作成します。

数分かかります。

161 of 318

インスタンスへのトラフィックの送信

  • web-map をクリックして作成したロードバランサを展開します。
  • [バックエンド] セクションの [正常] 列を確認し、インスタンスが正常であることを確認します。
  • 4つとも正常になったら、[フロントエンド] セクションから [IP:ポート] をコピーし、ブラウザに貼り付けます。(正常にならなくてもつながります。)

162 of 318

ブラウザからの動作確認

  • ブラウザに貼り付けた後リロードすると、応答するバックエンドのインスタンスが切り替わることが確認できます。

163 of 318

地理的に近い場所からの動作確認

最も近い地域のインスタンスから応答があります。

  • us-central1-bにあるインスタンスにsshでログインして、curl 外部IP を実行して、結果を確認します。
  • europe-west1-bにあるインスタンスにsshでログインして、curl 外部IP を実行して、結果を確認します。

msatoh@www-1:~$ curl http://130.211.46.248/�<!doctype html><html><body><h1>instance-1</h1></body></html>�msatoh@www-1:~$ curl http://130.211.46.248/�<!doctype html><html><body><h1>instance-2</h1></body></html>

msatoh@www-3:~$ curl http://130.211.46.248/�<!doctype html><html><body><h1>instance-3</h1></body></html>�msatoh@www-3:~$ curl http://130.211.46.248/�<!doctype html><html><body><h1>instance-4</h1></body></html>

164 of 318

TIPS: RPSの確認

web-map ロードバランサの [監視] をクリックするとバックエンドのRPSを確認できます。バックエンドからバックエンドを指定するとどのリージョンからどのリージョンに接続しているか確認できます。

165 of 318

付録:

東京リージョンにインスタンスを移動

  • europe-west1-b にある www-3www-4 のイメージを作成
    • インスタンスを停止
    • インスタンスの編集
    • [インスタンスを削除する際にブートディスクを削除する] のチェックを外して、保存
    • インスタンスの削除
    • [Compute Engine] > [イメージ]より www-3, 4 のソースディスクからイメージを作成

166 of 318

付録:

東京リージョンにインスタンスを移動

  • イメージからインスタンスを asia-northeast1-b に作成
    • イメージを選択
    • インスタンスの作成を選択
    • www3, 4 と同じ設定で作成 (インスタンス名はwww3-tokyo, www4-tokyo。 tagに http-tag の設定を忘れずに)

167 of 318

付録:

東京リージョンにインスタンスを移動

  • インスタンスグループの設定やロードバランサへの組み込みを実施
  • 手元のブラウザからアクセスをして instance-3, instance-4 から結果が帰ってくることを確認

168 of 318

Clean-up

  • [Compute Engine] > [VM インスタンス]より作成した4つのVMをすべて削除します。
  • [ネットワーキング] > [負荷分散] から作成したロードバランサを削除します。同時にバックエンド サービス web-map-backend-service にもチェックを入れて一緒に削除します。
  • [外部IPアドレス] より lb-ip-cr を解放します。
  • [ファイヤーウォールルール] www-firewall を削除します。
  • [インスタンス グループ] europe-resouces-wus-resources-w を削除します。
  • [Compute Engine] > [ヘルスチェック] より http-basic-check を削除します。

169 of 318

Clean-up : 付録

  • [Compute Engine] > [ディスク] よりイメージ作成のために使った2つのディスクをすべて削除します。
  • [イメージ] より作成したイメージを削除します。

170 of 318

App Engine(Python)編

171 of 318

今日のゴール

  • Google App Engineを使ってPythonのWebアプリケーションを作成する

172 of 318

準備

  • Google Cloud Platformプロジェクトを作成していること
    • 作成していない場合はこちら
  • 作業用の仮想マシンを一台準備します
    • 作成していない場合はこちら
  • Cloud Source Repositories APIを有効にします
    • メニューで「APIとサービス」=>「ライブラリ」と進み、Cloud Source Repositories APIを検索して有効にします

173 of 318

Google Cloud Shell を起動

管理コンソールから[Google Cloud Shell] を起動する

  • 右上のアイコンをクリック

project

click

174 of 318

コードを作成する(gitコマンドで取得)

githubからコードを取得する (gitコマンドを利用する場合)

  • Cloud Shell 上で、以下のコマンドを実行

$ git clone https://github.com/GoogleCloudPlatform/python-docs-samples

175 of 318

コードを作成する

git cloneしたフォルダに移動します

$ git clone https://github.com/GoogleCloudPlatform/appengine-helloworld-python.git

$ cd python-docs-samples/appengine/standard/hello_world

$ ls

app.yaml main.py main_test.py

176 of 318

コードを作成する

app.yaml (設定ファイル)の中身を確認します

$ vi app.yaml

177 of 318

コードを作成する

: q で終了

178 of 318

コードを作成する

179 of 318

ローカルテストを行う

  • dev_appserver.py コマンドを使ってローカル環境でコードをテストする。
  • default moduleがlocalhostの8080ポートで起動したことを確認。 

$ dev_appserver.py .

$ dev_appserver.py .

INFO 2016-02-29 07:23:56,212 devappserver2.py:769] Skipping SDK update check.

INFO 2016-02-29 07:23:56,253 api_server.py:205] Starting API server at: http://localhost:52234

INFO 2016-02-29 07:23:56,257 dispatcher.py:197] Starting module "default" running at: http://localhost:8080

INFO 2016-02-29 07:23:56,259 admin_server.py:116] Starting admin server at: http://localhost:8000

180 of 318

ローカルテストを行う

  • Cloud ShellのWeb Preview機能を使い、ローカル(Cloud Shell)の8080ポートへアクセスし、Hello Worldが表示されることを確認する

181 of 318

AppEngineにデプロイする

  • (Devサーバを動かしている場合は、”Ctrl + C” で停止)
  • gcloud app deploy コマンドを使って、App Engineにデプロイする

$ pwd

~/python-docs-samples/appengine/standard/hello_world

$ gcloud app deploy

182 of 318

AppEngineにデプロイする

  • Console > App Engine > バージョン を参照する
  • 先ほどデプロイしたバージョン名をクリックする
  • Webブラウザ上に”Hello World”が表示されることを確認する

183 of 318

コードを作成する

main.py のコードを確認します。

$ cat main.py

184 of 318

(演習1) バージョンコントロール

アプリケーションが出力するメッセージを変更して、新しいバージョンとしてデプロイしてみてください。

  • main.py が出力するメッセージを変更
  • gcloud app deploy --no-promote コマンドにてデプロイ
  • コンソール バージョンにて新しいバージョンがデプロイされていることを確認
  • アプリケーションを確認

185 of 318

(演習1) バージョンコントロール

アプリケーションに負荷をかけながらバージョンコントロールしてみてください

  • Cloud Shell より以下のコマンドを実行�$ while true; do curl <project-id>.appspot.com; echo; done

  • バージョン > トラフィックを分割にて調整 �“トラフィック分割の基準” を “Cookie” にする

186 of 318

(演習1) バージョンコントロール

Cookieベースに設定します。

187 of 318

(演習2) オートスケールを確認

アプリケーションに負荷をかけてサーバインスタンスが自動的にスケールすることを確認

  • (Cloud shell にて)$ sudo apt-get install apache2-utils
  • ab -n 1000 -c 100 -t 30 http://<project-id>.appspot.com/
  • コンソール > AppEngine > インスタンス、より インスタンス数を確認

188 of 318

(演習2) オートスケールを確認

189 of 318

(演習2) オートスケールを確認

190 of 318

(演習3) guestbook アプリケーションを作成する

https://cloud.google.com/appengine/docs/python/getting-started/creating-guestbook

※ このアプリケーションをデプロイする場合、インデックス定義ファイルもデプロイする必要があります。またインデックスが作成されるまでしばらく時間がかかることがあります。

$ gcloud app deploy app.yaml index.yaml

191 of 318

AppEngine参考URL

  • オンラインマニュアル
  • Getting Started Guide
    • Java
    • Python
    • PHP
    • Go

192 of 318

AppEngine参考URL

  • サポート

193 of 318

BigQuery編

194 of 318

フルマネージド DWH

自動でスケールアウト

設定や管理は不要�最大 100,000 行 / 秒のストリーム�サードパーティ ソフトウェアとの容易な統合

ペタバイトクラスのクエリも高速処理

Google BigQuery

複雑なデータ分析をシンプルに

Confidential + Proprietary

195 of 318

分析サービス:BigQuery

  • BI ツールを使って非技術者でも操作可能
    • Tableau, QlikView, Google データポータル, Google Spreadsheet / Microsoft Excel
  • ETL(データの再編集)
    • クエリー結果をテーブルに出力可能
    • JSON 関数/正規表現関数
  • データ処理エンジンとの連携
    • Cloud Dataflow, Cloud Dataproc, Hadoop

Cloud OnAir

196 of 318

Programming

Maintenance

Monitoring

Handling scale

Perf tuning

17 億件のフルスキャンを 6.7 秒で実行

72 GBのフルスキャン

クエリのコスト:0.072 TB * $5/TB = 約36円

Confidential & Proprietary

197 of 318

準備

  • Google Cloud Platformプロジェクトを作成していること
    • 作成してない場合はこちら
  • 課金が有効になっていること
    • 有効になってない場合はこちら
  • “BigQuery API”, ”Google Cloud Storage”, ”Google Cloud Storage JSON API”サービスが有効になっていること
    • 有効になっていない場合はこちら
  • コマンドツールのインストールが完了していること
    • 完了していない場合はこちら

198 of 318

BigQueryを使ってみる

管理コンソールから[ビッグデータ] > [BigQuery] のリンクをクリック

または、

bigquery.cloud.google.com にアクセスして

BigQueryのコンソールを起動します

199 of 318

BigQueryを使ってみる(サンプルの確認)

以下のURLにアクセスしてサンプルのデータセットを確認します。

https://console.cloud.google.com/bigquery?p=bigquery-public-data

※表示されていない場合には

 データを追加 ->

 一般公開データセットを調べる ->

 任意のデータを選択 ->

 データセットを表示

 を選択してください

200 of 318

BigQueryを使ってみる(サンプルの確認)

画面左側に表示される

リソースbigquery-public-data

のsamplesデータセットをクリックする。

その下にある natality テーブル を選択し、画面の右側に表示される テーブル構造(スキーマ)を確認する

201 of 318

BigQueryを使ってみる(クエリ実行)

Query Tableボタンをクリックすると、テーブルに対してクエリを実行できます。

202 of 318

BigQueryを使ってみる(問3:答え)

3. 最も出生数が多い年は?

SELECT year, COUNT(*) as cnt

FROM `bigquery-public-data.samples.natality`

GROUP BY year

ORDER BY cnt DESC

203 of 318

BigQueryを使ってみる(ハンズオン)

natalityテーブルに対してクエリーを実行し

以下の情報を調べてみましょう

問1: 何人分のデータが含まれているか?

問2: 何年から何年のデータが含まれているか?

問3: 最も出生数が多い年は?

問4: 最も出生数が多い州は?

問5: 年ごとの平均体重の推移は?

    • ヒント: AVG()関数で平均を算出する

※どのようなクエリや関数が実行できるかは、このマニュアルを参照してみてください。

204 of 318

BigQueryを使ってみる(問1:答え)

  • 何人分のデータが含まれているか?

SELECT COUNT(*)

FROM `bigquery-public-data.samples.natality`

205 of 318

BigQueryを使ってみる(問2:答え)

2. 何年から何年までのデータが含まれているか

SELECT year

FROM `bigquery-public-data.samples.natality`

GROUP BY year

ORDER BY year

206 of 318

BigQueryを使ってみる(問4:答え)

4. 最も出生数が多い州は?

SELECT state, COUNT(*) as cnt

FROM `bigquery-public-data.samples.natality`

WHERE state IS NOT null

GROUP BY state

ORDER BY cnt DESC

207 of 318

BigQueryを使ってみる(問5:答え)

5. 年ごとの平均体重の推移は?

SELECT AVG(weight_pounds), year

FROM `bigquery-public-data.samples.natality`

GROUP BY year

ORDER BY year

208 of 318

テーブルの作成

  • パブリックデータをダウンロードして、BigQueryの

テーブルにロードし、テーブルの作成を体験します。

地震データ

http://earthquake.usgs.gov/earthquakes/map/

209 of 318

テーブルの作成(データのダウンロード)

1. 設定ボタンをクリック

2. 30日分、マグニチュード2.5+を選択

4. “Download Earthquakes”ボタンをクリックし、”CSV”を選択してダウンロードする

3. 画面左上の「∨」をクリック

210 of 318

テーブルの作成

  • BigQuery GUIコンソールを開く

  • プロジェクト名右横の”データセットを作成”を選択

  • データセット名を入力

例:earthquake

新規にデータセットを作成し、その下にテーブルを作成します。

211 of 318

テーブルの作成

  • 作成したデータセットを選択し、データセット名右横の”テーブルを作成”を選択します。

212 of 318

テーブルの作成

  • 先程ダウンロードしたデータをソースデータとしてアップロードします。

2. ローカルにダウンロードしたファイルを指定

3. CSVを選択

1. アップロードを選択

初期状態では

“空のテーブル”

となっている

213 of 318

テーブルの作成

  • 宛先テーブル情報を入力

テーブル名を入力 (例:eq_20180827)

214 of 318

テーブルの作成(自動スキーマ定義)

  • ここでは、自動でテーブルのスキーマを定義します。
  • “自動検出”にチェックを入れ、テーブルを作成をクリックします。

215 of 318

参考:テーブルの作成(手動スキーマ定義)

  • 定義を手動で定義することも出来ます。
  • スキーマの自動検出をチェックせずに、テキストとして編集に、以下のような、カラム名とデータ型を記載します。

time:string,latitude:float,longitude:float,depth:float,mag:float,magType:string,nst:integer,gap:float,dmin:float,rms:float,net:string,id:string,updated:string,place:string,type:string,horizontalError:string,depthError:string,magError:string,magNst:string,status:string,locationSource:string,magSource:string

216 of 318

参考:テーブルの作成(手動スキーマ定義)

  • 自動でスキーマを定義する場合、CSVの1行目にカラム名が入っていることがあります。
  • オプションの設定にて、特定行を除外することが出来ます。

1. ソース・ファイルの一行目がカラム名になっているので、一行スキップする

2. Create Table ボタンをクリック

217 of 318

参考:テーブルの作成(ジョブ履歴の確認)

  • ジョブ履歴”をクリックしてロードジョブの状況を確認する

218 of 318

テーブルの作成

  • クエリを投げて、テーブルが作成できたか確認します。

219 of 318

結果をデータポータルに連携

  • 結果を視覚化したい場合、Googleのデータポータルサービスを利用することが出来ます。
  • クエリ結果のデータポータルで調べるを選択します

220 of 318

結果をデータポータルに連携

Datastudio Explorerにクエリ結果が連携される

ディメンション、指標 は自動的に選択されてグラフが生成される

221 of 318

結果をデータポータルに連携

ディメンション、指標 とは?

ディメンション:

データのカテゴリのこと。ディメンションの各値は、名前や説明など、カテゴリの特性を指す。

指標:

測定値のこと。合計、カウント、比率などの値を示す

https://support.google.com/datastudio/answer/6402048?hl=ja

222 of 318

結果をデータポータルに連携

グラフ種類を”期間”に変えてみる

223 of 318

結果をデータポータルに連携

データソース名横の鉛筆マークをクリックし、”フィールドを追加”を選択

224 of 318

結果をデータポータルに連携

緯度、経度フィールドを作成する

数式

CONCAT(latitude, “,”, longitude)

※ダブルクォーテーションが正しくコピーされないことがあります。

その場合は、マニュアルでコマンドを打ってください

225 of 318

結果をデータポータルに連携

すべてのフィールドをクリックし、latlonのタイプを変更する

  • “地域”→”緯度、経度”

226 of 318

結果をデータポータルに連携

“ディメンション”をlatlonに、”指標”をmagに変更

227 of 318

結果をデータポータルに連携

228 of 318

参考:�テーブルを作成する(bqコマンド)

GSDIR="gs://kf-us"

DATAFILE=$GSDIR/4.5_month.csv

BQ_TABLE="eq.20140815"

SCHEMA=`cat ./schema.txt`

GLOBAL_OPTIONS="--nosync"

CMD_OPTIONS="--skip_leading_rows=1 --max_bad_records=0"

bq $GLOBAL_OPTIONS load $CMD_OPTIONS $BQ_TABLE $DATAFILE $SCHEMA

←自分のプロジェクト内のCloud Storageのバケットを指定する必要あり

←バケットにCSVデータをアップロードする必要あり

←次ページのスキーマをファイルとして作成しておく必要あり

229 of 318

参考:�テーブルを作成する(bqコマンド)

time:string,latitude:float,longitude:float,depth:float,mag:float,magType:string,nst:integer,gap:float,dmin:float,rms:float,net:string,id:string,updated:string,place:string,type:string,horizontalError:string,depthError:string,magError:string,magNst:string,status:string,locationSource:string,magSource:string

schema.txt (以前作成したearthquakeと同じ)

230 of 318

参考:パーティションテーブルを作成する

$ bq mk --time_partitioning_type=DAY earthquake.eq

$ bq --format csv load --skip_leading_rows=1 'earthquake.eq$20160705' $GSDIR/4.5_month.csv "time:string,latitude:float,longitude:float,depth:float,mag:float,magType:string,nst:integer,gap:float,dmin:float,rms:float,net:string,id:string,updated:string,place:string,type:string,horizontalError:string,depthError:string,magError:string,magNst:string,status:string,locationSource:string,magSource:string"

テーブルを作成する

データをロードする

パーティションテーブル:https://cloud.google.com/bigquery/docs/partitioned-tables

231 of 318

参考:パーティションテーブルを作成する

$ bq query 'SELECT partition_id FROM [earthquake.eq$__PARTITIONS_SUMMARY__]'

$ bq query 'SELECT partition_id FROM [earthquake.eq$__PARTITIONS_SUMMARY__]'

$ bq query "SELECT count(*) FROM [earthquake.eq] where _PARTITION_LOAD_TIME between timestamp('20160705') and timestamp('20160707')"

$ bq query 'SELECT count(*) FROM [earthquake.eq$20160705]'

作成されたパーティションを確認する

$20160706,$20160707も同様にデータをロードして、以下SQLの表示結果を確認する

232 of 318

データポータルでレポートを作成する

データポータルにアクセスする

https://datastudio.google.com/

「新しいレポートの開始」をクリック

233 of 318

データポータルでレポートを作成する

2. 「新しいデータソースを作成」をクリック

1. レポートのタイトルを変更する

234 of 318

データポータルでレポートを作成する

1. BigQueryを選択

2. (初めての場合のみ)承認ボタンをクリックしてアクセス権を許可する

米国出生情報

235 of 318

データポータルでレポートを作成する

データコネクションを作成する

以下を選択する。

BigQuery >

公開サンプル >

samples >

natality >

[今回作成したプロジェクト]

右上の [接続] ボタンをクリックする

236 of 318

データポータルでレポートを作成する

データコネクションを作成する

1. データコネクション名を任意の名前に変更

2. [レポートに追加] ボタンをクリック

237 of 318

データポータルでレポートを作成する

1. [挿入] ボタンをクリック

2. [棒グラフ]をクリック

238 of 318

データポータルでレポートを作成する

ディメンション、指標 は自動的に選択されてグラフが生成される

239 of 318

データポータルでレポートを作成する

ディメンション、指標 とは?

ディメンション:

データのカテゴリのこと。ディメンションの各値は、名前や説明など、カテゴリの特性を指す。

指標:

測定値のこと。合計、カウント、比率などの値を示す

https://support.google.com/datastudio/answer/6402048?hl=ja

240 of 318

データポータルでレポートを作成する

1. ディメンションを[year] に変更(「使用可能な項目」からドラッグ&ドロップ)

241 of 318

データポータルでレポートを作成する

1. 指標 [weight_ponds] を選択

2. フィールドを作成

242 of 318

データポータルでレポートを作成する

カスタムフィールドを作成する

1. 項目名を入力 : birth_count

2. 数式を入力 : COUNT(is_male)

3. [適用] ボタンをクリック

243 of 318

データポータルでレポートを作成する

1. [birth_count] を選択する

244 of 318

データポータルでレポートを作成する

グラフのスタイルを変更する

グラフを選択 >

スタイル >

以下を設定する

棒の数 : 10

データラベルを表示 : チェックボックスをON

245 of 318

データポータルでレポートを作成する

グラフのソート順を変更する

グラフを選択 >

データ >

以下を設定する

並べ替え : year 昇順

246 of 318

参考:データポータル活用例 GCP 課金

  • GCP の課金状況をデータポータルを使って可視化
  • プロジェクトごと、プロダクトごとで整理済み
  • "How to Copy"から自分の環境にも適用可能

247 of 318

アプリ開発 (Google Apps Script)

Google SpreadsheetからBigQueryを呼び出し、結果を表やグラフに描画できるアプリケーションです

248 of 318

アプリ開発 (Google Apps Script)

  • 新しいスプレッドシートを作成します
    • drive.google.com にアクセス
    • “新規” > “Googleスプレッドシート”
    • ドキュメント名を変更 (任意)

249 of 318

アプリ開発 (Google Apps Script)

  • スクリプトエディタを起動します
    • ツール > スクリプトエディタ

250 of 318

アプリ開発 (Google Apps Script)

  • Spreadsheetから利用できるリソースを設定します
    • リソース > Googleの拡張サービス...

251 of 318

アプリ開発 (Google Apps Script)

  • プロジェクト名を変更します

252 of 318

アプリ開発 (Google Apps Script)

  • BigQuery APIを有効にします
    • BigQuery API > 無効ボタンをクリックして有効にする

253 of 318

アプリ開発 (Google Apps Script)

  • デベロッパーコンソールでBigQueryサービスを有効にする
    • Google デベロッパーコンソール のリンクをクリック
    • Developerコンソールが開くので、BigQuery APIを有効にする

Googleデベロッパー�コンソールが起動する

254 of 318

アプリ開発 (Google Apps Script)

255 of 318

アプリ開発 (Google Apps Script)

  • デベロッパーコンソールでプロジェクト番号を確認します
    • 右上メニュー->プロジェクトを設定
    • スクリプトの中で使用するので、番号を控えておく

スクリプト内で使用するので�番号を控えておいてください

256 of 318

アプリ開発 (Google Apps Script)

  • スクリプトエディタに戻って、設定ダイアログを終了する
    • OKボタンをクリック

257 of 318

アプリ開発 (Google Apps Script)

  • 以下のコードをスクリプトエディタにコピー&ペーストする

// 先ほど控えたプロジェクト番号に置き換える

var projectNumber = 'XXXXXXXX';

var ss = SpreadsheetApp.getActiveSpreadsheet();

function onOpen() {

var menuEntries = [ {name: 'Run Query', functionName: 'runQuery'} ];

ss.addMenu('BigQuery', menuEntries);

}

(1/4)

258 of 318

アプリ開発 (Google Apps Script)

function runQuery() {

var sheet = SpreadsheetApp.getActiveSheet();

var sql = 'select TOP(word, 10), COUNT(*) as word_count from publicdata:samples.shakespeare WHERE LENGTH(word) > 12;';

var queryResults;

// Inserts a Query Job with an optional timeoutMs parameter.

try {

var resource = {query: sql, timeoutMs: 1000, userQueryCache: false};

queryResults = BigQuery.Jobs.query(resource, projectNumber);

}

catch (err) {

Logger.log(err);

Browser.msgBox(err);

return;

}

(2/4)

259 of 318

アプリ開発 (Google Apps Script)

while (queryResults.getJobComplete() == false) {

try {

queryResults = BigQuery.Jobs.getQueryResults(projectNumber, queryResults.getJobReference().getJobId());

// If the Job is still not complete, sleep script for

// 3 seconds before checking result status again

if (queryResults.getJobComplete() == false) {

Utilities.sleep(3000);

}

}

catch (err) {

Logger.log(err);

Browser.msgBox(err);

return;

}

}

(3/4)

260 of 318

アプリ開発 (Google Apps Script)

// Update the amount of results

var resultCount = queryResults.getTotalRows();

var resultSchema = queryResults.getSchema();

}

(4/4)

261 of 318

アプリ開発 (Google Apps Script)

  • スクリプトを保存する
    • エディタでSaveボタンをクリック
  • BigQueryを実行する
    • スプレッドシートに戻ってリロードする
    • BigQueryメニューが表示されるのでクリック

262 of 318

アプリ開発 (Google Apps Script)

  • OAuth認証を行う
  • この段階ではエラーが出なければ成功です。

263 of 318

アプリ開発 (Google Apps Script)

  • 以下のコードをrunQuery関数の最後に追加する

var resultValues = new Array(resultCount);

var tableRows = queryResults.getRows();

// Iterate through query results

for (var i = 0; i < tableRows.length; i++) {

var cols = tableRows[i].getF();

resultValues[i] = new Array(cols.length);

// For each column, add values to the result array

for (var j = 0; j < cols.length; j++) {

resultValues[i][j] = cols[j].getV();

}

}

// Update the Spreadsheet with data from the resultValues array

sheet.getRange(1, 1, resultCount, tableRows[0].getF().length).setValues(resultValues);

264 of 318

アプリ開発 (Google Apps Script)

  • 追加したコードの動きを実行して確認する
    • BigQuery > Run Query

265 of 318

アプリ開発 (Google Apps Script)

  • 以下の関数(buildDataTable)を最後に追加する

// Returns a Data Table from a query's result values and schema

function buildDataTable(resultValues, resultSchema) {

var dataTable = Charts.newDataTable();

for (var i = 0; i < resultSchema.getFields().length; i++) {

column = resultSchema.getFields()[i];

columnName = column.getName();

columnType = (column.getType() == 'INTEGER' || column.getType() == 'FLOAT')

? Charts.ColumnType.NUMBER : Charts.ColumnType.STRING;

dataTable.addColumn(columnType, columnName);

}

(次ページに続く)

(1/2)

266 of 318

アプリ開発 (Google Apps Script)

(前ページからの続き)

for (var j = 0; j < resultValues.length; j++) {

dataTable.addRow(resultValues[j]);

}

dataTable.build();

return dataTable;

}

(2/2)

267 of 318

アプリ開発 (Google Apps Script)

  • buildDataTable関数を利用するコードをrunQuery関数の最後に追加する

var bigqueryDataTable = buildDataTable(resultValues, resultSchema);

var chart = Charts.newBarChart()

.setDataTable(bigqueryDataTable)

.setColors(['green'])

.setDimensions(500, 500)

.setYAxisTitle('Word')

.setXAxisTitle('Count')

.setLegendPosition(Charts.Position.BOTTOM)

.build();

var chart_panel = UiApp.createApplication()

.setTitle('BigQuery Results')

.setWidth('600')

.setHeight('600');

chart_panel.add(chart)

ss.show(chart_panel);

268 of 318

アプリ開発 (Google Apps Script)

  • 実行する

269 of 318

BigQuery SQLの特徴

  • SQL標準に類似した構文
    • 行単位の更新、削除は未サポート
    • テーブル毎削除するか、新しいテーブルに書き出すことで対応
  • UNION
    • FROMの後にテーブル名をカンマで区切るとUNIONすることができる
  • JOIN
    • 右側のテーブルが圧縮後8MBを超える場合は、Big Join (JOIN EACH構文)を利用する
  • GROUP BY
    • 多数のグループを生成するクエリは失敗する可能性がある(Resources exceeded during query execution)。その場合はGROUP EACH BYを使用する

270 of 318

BigQuery SQLの特徴

  • COUNT DISTINCTは統計的近似値を返す
    • COUNT([DISTINCT field [,n])
      • nを大きくすることで厳密性を向上させることができる
      • nのデフォルト値は1000
      • 性能と正確さのトレードオフとなる
    • EXACT_COUNT_DISTINCT() 関数を使う
  • アウトプットサイズの制限
    • 圧縮後128MB。これを超える場合は、テーブルに出力することで回避可能

271 of 318

参考: 全体アーキテクチャ

BigQuery

分析基盤

Cloud Logging

App EngineAnalytics Server

Compute Engine

On-premise / 他社クラウド

Google Spreadsheet

Stream API

File

3rd party tools

Simba ODBC Driver

データポータル

272 of 318

BigQuery 参考URL

273 of 318

Cloud Storage編

274 of 318

準備

  • Google Cloud Platformプロジェクトを作成していること
    • 作成してない場合はこちら
  • 課金が有効になっていること
    • 有効になってない場合はこちら
  • ”Google Cloud Storage”, ”Google Cloud Storage JSON API”サービスが有効になっていること
    • 有効になっていない場合はこちら
  • コマンドツールのインストールが完了していること
    • 完了していない場合はこちら

275 of 318

Cloud Storageを使ってみる

Cloud Storage管理コンソールにアクセス

  • Developersコンソールにログイン�cloud.google.com/console
  • ストレージ > ”Storage” を選択

276 of 318

Cloud Storageを使ってみる

バケットの作成

  • “バケットを作成” ボタンをクリック
  • バケット名を入力�*グローバルで一意になっている必要あり

277 of 318

Cloud Storageを使ってみる

Cloud Storageを使ってみる

  • ストレージクラスを指定 (ここでは”Standard”)
  • 場所を指定 (ここでは”アジア”)
  • “作成”をクリック

278 of 318

Cloud Storageを使ってみる

ファイルをアップロードします

  • “ファイルをアップロード”ボタンをクリック
  • ローカルファイルシステムのファイルを選択

279 of 318

Cloud Storageを使ってみる

ファイルのアップロードの確認

280 of 318

Cloud Storage 参考URL

  • オンラインマニュアル
  • Getting Started
  • コミュニティ
    • StackOverflow

281 of 318

CloudSQL編

282 of 318

準備

  • Google Cloud Platformプロジェクトを作成していること
    • 作成してない場合はこちら
  • 課金が有効になっていること
    • 有効になってない場合はこちら
  • ”Google Cloud SQL”サービスが有効になっていること
    • 有効になっていない場合はこちら
  • コマンドツールのインストールが完了していること
    • 完了していない場合はこちら

283 of 318

Cloud SQLインスタンスを作成する

  • 左側のメニューから[ストレージ]>[SQL]を選択
  • [インスタンスを作成する] ボタンをクリックする

284 of 318

Cloud SQLインスタンスを作成する

インスタンス名とリージョンを指定

  • インスタンスID
  • リージョン (US / EU / ASIA)
  • インスタンスクラスを選択

[作成] ボタンをクリック

285 of 318

Cloud SQLインスタンスを作成する

ステータスが[実行可能]になれば完了

286 of 318

接続する

ここでは、Compute EngineのLinuxインスタンスを使って、Cloud SQLへの接続を確認します

仮想マシンの外部IPアドレスを取得する

$ gcloud compute instances list

Linuxインスタンスにsshログインする

$ gcloud compute ssh <your-instance-name>

287 of 318

接続する

Compute Engineの仮想マシンにMySQL Clientをインストールします

$ sudo apt-get update

$ sudo apt-get install mysql-client

288 of 318

接続する

  • DeveloperコンソールのCloud SQLリンクよりMySQLインスタンスを選択

GCEのインスタンスがCloud SQLにアクセスできるよう、Authorized IPの設定を行います

289 of 318

接続する

GCEのインスタンスがCloud SQLにアクセスできるよう、Authorized IPの設定を行います

インスタンスを選択

290 of 318

接続する

接続元クライアントのIPアドレスを登録します

  • インスタンス設定画面から[アクセス制御] > [承認] を選択
  • [項目を追加] ボタンをクリック

291 of 318

接続する

  • [名前] (省略可)と [ネットワーク] IPアドレスを入力
  • [保存] ボタンをクリックする

パブリックIPアドレス

292 of 318

接続する

IPv4 アドレスを割り当てます

  • [アクセス制御] > [IPアドレス]を選択
  • [IPv4 アドレスをリクエスト] ボタンをクリック

293 of 318

接続する

ユーザを作成します

  • [アクセス制御] > [ユーザー]を選択
  • [新しいユーザー] ボタンをクリック

294 of 318

接続する

VMインスタンスより、接続を確認します。

$ mysql --host=sql_instance-IP --user=root --password

295 of 318

接続する

データベース、テーブルを作成します。

CREATE DATABASE guestbook;

USE guestbook;

CREATE TABLE entries (guestName VARCHAR(255), content VARCHAR(255),

entryID INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(entryID));

INSERT INTO entries (guestName, content) values ("first guest", "hello world!");

SELECT * FROM entries;

296 of 318

Cloud SQL 参考URL

297 of 318

(補足)レプリケーションの設定

レプリケーションの設定を行う

https://developers.google.com/cloud-sql/docs/replication?hl=ja

注意事項

・CHANGE MASTER TO MASTER_LOG_FILE…コマンド実行時にマスターサーバでSHOW MASTER STATUSを実行して、ログファイル、ログポジションを確認する

・SLAVE STATUSを確認しながら構成する

・MySQLのトラブルシュートができることが望ましい

298 of 318

Cloud Dataflow�Python SDK編

299 of 318

準備

  • Google Cloud Platformプロジェクトを作成していること
    • 作成してない場合はこちら
  • 課金が有効になっていること
    • 有効になってない場合はこちら
  • ”Google Compute Engine, CloudDataflow”サービスが有効になっていること
    • 有効になっていない場合はこちら

300 of 318

インストールする

Cloud Shell を起動して以下を実行

$ pip install google-cloud-dataflow --user

Cloud Console にアクセスする (console.cloud.google.com)

Cloud Shellのアイコンをクリック

301 of 318

Hello World

Python をインタラクティブモードで起動

$ python

302 of 318

Hello World

# 必要モジュールをインポート�import apache_beam as beam�# パイプラインを作成�p = beam.Pipeline()�# PCollection を作成してファイルに書き込む�(p� | beam.Create(['hello', 'world']) � | beam.io.WriteToText('./test'))�# パイプラインを実行する�p.run()�# Python インタラクティブモードを抜ける�exit()

以下を実行する

303 of 318

Hello World

出力されたファイルを確認する

more ./test*

304 of 318

Dataflow モデルの基本概念

以下の4つの主要概念を理解する

  • パイプライン
  • PCollection
  • 変換 (PTransform)
  • I/Oソース およびシンク

305 of 318

Dataflowモデル:パイプライン

  • パイプラインはデータ処理の一連の流れを記述したもの。実行時はジョブに相当する。
  • パイプラインは、入力データのソースを読み取り、そのデータを変換し、結果の出力を書き込む、一連の操作で構成される
  • 一つのプログラムで複数のパイプラインを定義することが可能
  • パイプラインに定義されるデータと変換は、そのパイプライン固有のものであり、複数のパイプラインで共有することはできない

Group 1

Filter 2

Transform 1

Write

Read

Filter 1

Input

Output

306 of 318

Dataflow モデル:PCollection

  • PCollection はパイプライン内の一連のデータを表すコンテナ
  • Dataflow の PCollection クラスは、事実上サイズ制限がないデータセットを表すことができる特殊コンテナクラス
  • Bounded データ / Unbounded データ 両方共保持することができる
    • Bounded データ:テキストファイルやBigQueryテーブルのような境界が定義できるデータセット
    • Unbounded データ: Pub/Sub に入力されるストリームのように継続して入力されるデータセット

307 of 318

Dataflow モデル:変換 (PTransform)

  • 変換は、パイプライン内のデータ処理操作を表す
  • 1つまたは複数のPCollection を入力として、そのPCollectionの要素に対して処理関数を実行し、1つまたは複数のPCollectionを出力する
  • 汎用処理はコア変換として提供される
    • ParDo: 汎用的な並列処理
    • GroupByKey: キー / 値ペアをキーに基づいてグループ化
    • Combine: コレクションまたはグループ化された値を結合
    • Flatten: コレクションをマージ
  • 変換はネストすることが可能 (複合変換)

308 of 318

Dataflow モデル: �I/O ソースおよびシンク

  • パイプラインI/OとしてデータソースとデータシンクのAPIが提供
  • ソースAPIを使ってパイプラインにデータを読み込む
  • シンクAPIを使ってパイプラインからデータを出力する
  • パイプラインはソースAPIによりデータ入力から始まって、シンクAPIの出力によって終了する

309 of 318

Wordcount サンプル

import re

import apache_beam as beam

p = beam.Pipeline('DirectRunner')

(p

| 'read' >> beam.io.ReadFromText('gs://dataflow-samples/shakespeare/kinglear.txt')

| 'split' >> beam.FlatMap(lambda x: re.findall(r'\w+', x))

| 'count words' >> beam.combiners.Count.PerElement()

| 'save' >> beam.io.WriteToText('./word_count'))

p.run()

$ vim wordcount.py

以下のコードを入力

310 of 318

Dataflow モデル

パイプライン

I/Oソース

I/Oシンク

変換

311 of 318

Wordcount サンプル

$ cat word_count-00000-of-00001

(u'pomp', 1)

(u'bounty', 2)

(u'th', 1)

(u'to', 440)

...

$ python wordcount.py

プログラムを実行

出力されたファイルを確認

312 of 318

接続する

ユーザを作成します

  • [ユーザ名] に”root”を入力し、パスワードを設定
  • [追加] ボタンをクリックする

313 of 318

クラウド上で実行する

$ vim wordcount.py

wordcount.py を少し修正

修正するポイント:

  • 実行時の出力ファイルをargとして指定できるようにする

314 of 318

クラウド上で実行する

import re

import argparse

import apache_beam as beam

argv = None

parser = argparse.ArgumentParser()

parser.add_argument('--output',required=True,help='Output file must be specified')

known_args, pipeline_args = parser.parse_known_args(argv)

p = beam.Pipeline(argv=pipeline_args)

(p

| 'read' >> beam.io.ReadFromText('gs://dataflow-samples/shakespeare/kinglear.txt')

| 'split' >> beam.FlatMap(lambda x: re.findall(r'\w+', x))

| 'count words' >> beam.combiners.Count.PerElement()

| 'save' >> beam.io.WriteToText(known_args.output))

p.run()

315 of 318

クラウド上で実行する

# 環境変数のセット

$ export PROJECT=$(gcloud config list project --format "value(core.project)")

# バケットの作成

$ gsutil mb gs://$PROJECT-$USER

# 実行

$ python wordcount.py --runner DataflowRunner \

--project $PROJECT \

--staging_location gs://$PROJECT-$USER/staging \

--temp_location gs://$PROJECT-$USER/staging \

--job_name $PROJECT-python-wc-$USER \

--output gs://$PROJECT-$USER/output/word_count

316 of 318

コンソールで確認する

317 of 318

生成されたファイルを確認する

$ gsutil ls gs://$PROJECT-$USER/output

gs://fukudak-playground-fukudak/output/word_count-00000-of-00009

gs://fukudak-playground-fukudak/output/word_count-00001-of-00009

gs://fukudak-playground-fukudak/output/word_count-00002-of-00009

gs://fukudak-playground-fukudak/output/word_count-00003-of-00009

gs://fukudak-playground-fukudak/output/word_count-00004-of-00009

gs://fukudak-playground-fukudak/output/word_count-00005-of-00009

gs://fukudak-playground-fukudak/output/word_count-00006-of-00009

gs://fukudak-playground-fukudak/output/word_count-00007-of-00009

gs://fukudak-playground-fukudak/output/word_count-00008-of-00009

Cloud Shell より以下を確認

318 of 318

参考