• tech系
8分で読める

Cloud OnAir 第24回 ~「最新版 GCP ではじめる、サーバーレスアプリケーションの開発。」~まとめ

こちらの記事は弊社技術ブログに掲載していた内容となります。一部を除き、投稿当時の情報となりますので、紹介内容の最新情報については別途公式情報等をご参照下さい。

こんにちは。クラウドエース編集部です。

【毎週木曜 18:00~19:00】に、Google 社のエンジニアが、Google Cloud Platform の製品、サービスや導入事例等について解説する番組が放送されています。
ユーザー参加型の生放送番組 となっており、視聴者からのリアルタイム Q & A も受け付けています!

この記事では、動画を見逃した方や、見る時間が無い方向けに、要点をかい摘まんで紹介したいと思います。

講師は、Google Cloud カスタマーエンジニアの 倪 明昊 さんです。

今回のテーマ:最新版 GCP ではじめる、サーバーレスアプリケーションの開発。

サーバーレスにすると、面倒な基盤インフラストラクチャの管理に時間をとられずにコードの作成やデプロイを行い、開発者はアプリケーションの開発に専念することができます。Cloud Functions や App Engine、Pub/Sub などといった GCP のサーバーレスサービスに適用させる DevOps 対応なソリューションについてをご紹介する内容になっています。

アジェンダ

  • Google Cloud のサーバーレスサービス
  • サーバーレスアプリケーション開発
  • より複雑なアプリの構築
  • まとめ

Google Cloud のサーバーレスサービス

はじめに – サーバーレスとは?

サーバーレスについては今のところ、明確な定義はまだありませんが、基本的に以下の3つのルールが考えられます:

  1. 透過的なインフラストラクチャ
    OS やネットワークの設定を考えること無く、インフラを意識しなくてもアプリケーションを作ることができる。
  2. 自動スケーリング
    リクエストに応じて、自動でインスタンスの増減やスケールアップ&スケールダウンしてくれる。
  3. 使った分だけ課金
    アプリケーションが実行された分だけ課金対象になる。(コスト削減になる。)

アプリケーションの実行環境

Google Cloud のアプリケーションの実行環境と言えば以下の4つがあります:

  • Cloud Functions (FaaS: Function as a Service)
  • App Engine (PaaS: Platform as a Service)
  • Kubernetes Engine (CaaS: Container as a Service)
  • Compute Engine (IaaS: Infrastructure as a Service)

上の4つの中で Cloud Functions と App Engine がサーバーレスと言われています。

Google のサーバーレス サービス

一般的にはコンピューティングにカテゴライズされる FaaS や PaaS がサーバーレスと考えられますが、データベース・データウェアハウス・機械学習・AI などの分野にもサーバーレスという考え方があります。

サーバーレスのメリット

サーバーレスの一番のメリットとしては、「プログラムを書く以外のことを気にすることなくサービスの開発にフォーカスできる」という点です。下のスライドの 2~7 までのことは全て GCP が管理をしてくれます。

サーバーレスアプリケーション開発

サーバーレスコンピューティング & アプリ

今年の機能追加に伴い、Cloud Function に Python と Node.js 8 が新たに追加されました。

App Engine: 第2世代ランタイム

第2世代 Runtime になり、任意のサードパーティのライブラリを利用できるようになりました。

Cloud Functions GA

GA リリースされ、更に東京でも利用できるようになりました。
SLA 水準にも合格しています。

1つのプロジェクトに複数のリージョンを持てる

今回の GA リリースより、1つのプロジェクトに複数のリージョンの Cloud Functions を持てるようになりました。

Cloud Functions の種類

HTTP Function とバックグラウンド Function の二種類があり、バックグラウンド Function は Cloud Storage、Pub/Sub、Firebase のイベントをトリガーにすることができます。

クラウドの接着剤である Cloud Functions

Cloud Functions を使うと多種多様な GCP サービスにアクセス、機能を柔軟に構築できるので、Cloud Functions はまさにクラウドの接着剤といえます。

Webhook: HTTP Function

HTTP Function を使うと簡単にサーバーレスバックエンドを実装できます。
下記のスライドに記載されているコードは Translation API にリクエストを投げて、翻訳を行う簡単なアプリケーションの例です。
実際の画面上でデモベースでの案内がありました。

HTTP Function のデモ

デモ(約5分)

軽量 ETL: Cloud Storage イベントのトリガー

前述した通り、バックグラウンド Function を使用すると Cloud Storage や Pub/Sub などのイベントをトリガーとすることができます。
下記は簡単な Cloud Storage のイベントを使用して、サーバーレスアプリを実装する例です。ここでも簡単なデモベースでの案内がありました。

画像分析

画像にラベルをつける際、どんなコードを使用するのかについての案内がありました。

Cloud Storage トリガーのデモ

デモ(約5分)

Cloud Functions のデプロイ

デプロイの2つの方法に関する紹介がありました。
1つは Cloud Console UI 上でデプロイする方法、もう一つは gcloud command です。

ローカルでの開発

Node.js 6 のみのサポートとなりますが、ローカル開発もサポートしており、開発スピードの向上に繋がりそうです。

Cloud Functions ユースケース

下記の代表的な Cloud Functions のユースケースについての紹介がありました。

より複雑なアプリの構築

より複雑なアプリの構築

複雑なアプリケーション構築の際の観点として、下記のスライドに記載された内容について案内がありました。

複数の機能をつなげる:Pub/Sub を使いましょう

複数の機能をつなげる時に最適なサービスとして、Pub/Sub の紹介がありました。

パブリッシャー と サブスクライバー

Pub/Sub のパブリッシャー と サブスクライバーに関する案内がありました。
Pub/Subでは、パブリッシャーに届いたメッセージを、複数のサブスクリプションへ送ることができます。これを利用して、同じメッセージに対し複数の機能を実現することができます。

複数の機能をつなげる

Pub/Sub を利用した複数の機能を繋げたアプリケーションの例として、社員データの登録を行うアプリケーションの案内がありました。

これは人事データベースに社員情報を登録した例です。
社員情報を Pub/Sub に送ることで、サブスクライバ毎に異なる機能を実現することができます。

サーバーレスデータ分析

上図はサーバレスデータ分析の代表的なアーキテクチャです。ストリーミングしたい場合は Pub/Sub(左上)からの流れとなり、ファイルを取り込んでバッチ処理したい場合は GCS(左下)からの流れとなります。

Dataflow とは

Apache Beam のプログラミングモデルを利用しているので Python や Java コードを書くだけでバッチとストリーミング処理が実現できます。
また、バッチ、ストリーミングの両方のモデルに対応しているので同じ処理(コード)を使ってバッチ処理したり、ストリーミング処理したりすることができます。

監視とエラー報告

Stackdriver の機能を使ってログ監視とエラー報告を実現することができます。

ログ

Stackdriver Logging の機能を使ってログを確認することができます。

エラー報告

Stackdriver Error Reporting 機能を使ってエラーを確認することができます。
Node.js の場合は console.error() を呼び出すことでエラー報告されます。

サーバーレスのメリット

オートスケールは素晴らしいですが、システム運用は要注意です。次のスライドで2つのケースを説明します。

例:データベースがボトルネック

トラフィックに対して Cloud Functions を使ってデータベースに書き込む例となっています。Cloud Functions はオートスケール機能があるのでトラフィックが増えてもスケールアップして処理することができますが、レガシーなデータベースの場合はオートスケール機能がないので Cloud Functions の処理が処理しきれずボトルネックになります。全体の構成を考える必要があります。

スケーラビリティコントロール

Google Cloud Functions Alpha 版機能で Function をデプロイする時に –max-instances を指定することで Function 毎の起動できるインスタンス数を指定できるのでリソース枯渇を防ぐことができます。

予算アラートの設定

予算を設定することでアラートを出すことができます。予算アラートの設定で 30%、60%、90% 等を指定することで段階おってアラートを出すこともできます。

環境変数の設定

これは、MySQL にデータを書き込む例で、接続するためには user や password が必要ですが、コード上に接続情報が記載されているとよくないため、Cloud Functions にはデプロイする時に環境変数を指定できるようになっています。

IAM によるアクセス制御

IAM の機能を使うことで myFunc2() のアクセスできるものを myFunc1() のみアクセスできるように制御することができ、不正なアクセスを防ぐことができます。
具体的な方法としては Function 個別に IAM ポリシーを設定することができ、メンバーに Function のサービスアカウントを指定することで特定の Function のみアクセス可能な状態にできます。

まとめ

サーバーレスを導入することでお客様はサービスの開発に集中することが出来ます。
イベント駆動なので使った分だけ課金されるので利用しやすいです。

Cloud Functions を使えば様々な Google サービスにアクセスすることができます。

サーバーレスの機能としては今回紹介した Cloud Functions 以外にも沢山あります。
今年リリースさればかりの GKE Serverless add-on、Cloud Build を使って、サーバーレスな CI/CD を実現したり、Cloud Scheduler や Cloud Tasks を使ってサーバーレスなスケジュール管理を実現します。

最後にひとこと

いかがでしたでしょうか。
以上が「最新版 GCP ではじめる、サーバーレスアプリケーションの開発。」のまとめでした。

今後サーバーレスのサービスで構築されたアプリケーションが増えていきそうですね。

次回の放送は、「GCP で構築するデータ分析基盤の最新情報をご紹介!」です。
Google Cloud Next ’18 のアップデート情報を踏まえて、GCP を利用したデータ分析基盤について紹介する内容になっています。BigQuery の新しい機能も紹介される予定なので、是非ご覧ください。

それでは、次回も 11/15(木)18:00 にお会いしましょう。

参考リンク

番組視聴

Cloud OnAir の放送は、今回分含め、バックナンバーも全て Cloud OnAir のページで視聴できます。
スライドと合わせて進行する解説を、是非ご覧ください!
今回の番組視聴ページ URL:https://cloudonair.withgoogle.com/events/cloud-onair-japan-q4-2018/watch?talk=tky_sl_q4

SlideShare

今回の動画で説明に使用されたスライドについても、SlideShare でいつでも閲覧可能です。
登場した用語について振り返りたい、用語同士の関係性を確認したい等、大変参考になります!
スライド URL:https://www.slideshare.net/GoogleCloudPlatformJP/cloud-onair-gcp-2018118

この記事を共有する

合わせて読みたい