Google Cloud Functionsのクイックスタートを試す

Published: 2018年9月22日 by tomsato

概要

始めに

Google Cloud Functions(以下Cloud Functions)初学者向けに提供されているクイックスタートを入門的に試してみる

Cloud Functionsについて

Cloud FunctionsとはGoogle Cloud Platform内のサービスの一つであるFaaS(Function as a Service)で、登録した関数を実行するためのサービス
FaaSということで、イベントが発生した場合にそれに応答してオンデマンドで登録した関数を実行することができる

以下の特徴がある

  • HTTPリクエストや、Google Cloud StorageもしくはGoogle Cloud Pub/Subから呼び出すことができる
  • Cloud Functionsはサーバーレスなシステムとなっているのでこちら側で運用コストはかからない

使用事例

  • モバイル バックエンド
  • API & マイクロサービス
  • データ処理 / ETL
  • Webhook
  • IoT

参考:Cloud Functions – サービスの概要

1ヶ月あたりの無料枠について

呼び出し回数 200万回
コンピューティング時間 (メモリ)400,000 GB 秒 / (CPU)200,000 GHz 秒
送信データ(下り) 5GB
受信データ(上り) 無制限
同じリージョン内の Google API への送信データ 無制限

コンピューティング時間は、関数がリクエストを受け取ってから、完了シグナルの送信、タイムアウトなどのエラー、またはその他の終了処理によって関数が完了するまでの期間のこと

参考:Cloud Functions – 料金

クイックスタートの進め方

クイックスタートの方法として

  • gcloudコマンドラインツールの使用したクイックスタート
  • Consoleを使用したクイックスタート

と2種類のやり方を提示しているのでそれぞれ試してみる

またMacで作業を行う前提で話を進めるものとする

クイックスタート – gcloudコマンドラインツールの使用

準備

リソースの管理ページに移動してGCPプロジェクトを選択または作成してからプロジェクトのページに遷移する

メニューから「お支払い」を選んでからプロジェクトに対して課金を有効化する

Cloud Functions APIを有効にする

こちらのページからCloud SDKをインストールして初期化も行う

MacOSの場合

macOS 64 ビット(x86_64)をダウンロードしてから解凍する

// 初期化
$ ./google-cloud-sdk/bin/gcloud init

// .bash_profileに以下の設定が追加されていることを確認する
$ cat ~/.bash_profile

# The next line updates PATH for the Google Cloud SDK.
if [ -f '/Users/tomsato/Desktop/google-cloud-sdk/path.bash.inc' ]; then source '/Users/tomsato/Desktop/google-cloud-sdk/path.bash.inc'; fi

# The next line enables shell command completion for gcloud.
if [ -f '/Users/tomsato/Desktop/google-cloud-sdk/completion.bash.inc' ]; then source '/Users/tomsato/Desktop/google-cloud-sdk/completion.bash.inc'; fi

SDKのディレクトリをDesktopに置いてinitしたので
gcloudコマンドは~Desktop/google-cloud-sdk/bin/gcloudに置かれた

またgcloudコンポーネントを更新・インストールする

$ gcloud components update 
$ gcloud components install beta

Nodejsの環境が必要なので以下を参考にしてNodejs環境を用意する
Node.js 開発環境のセットアップ

関数を作成する

作業ディレクトリを作成してそのディレクトリに移動する

$ mkdir ~/gcf_hello_world & cd ~/gcf_hello_world
$ vim index.js

index.jsの中身

/**
 * HTTP Cloud Function.
 * helloGETという関数を作成して、HTTP経由でGETリクエストに「Hello World!」というテキストで応答する
 *
 * @param {Object} req Cloud Function request context.
 * @param {Object} res Cloud Function response context.
 */
exports.helloGET = (req, res) => {
  res.send('Hello World!');
};

作成した関数をデプロイする

// 完了するまで数分かかることがある
$ gcloud beta functions deploy helloGET --trigger-http --region asia-northeast1
Deploying function (may take a while - up to 2 minutes)...done.
availableMemoryMb: 256
entryPoint: helloGET
httpsTrigger:
  url: https://asia-northeast1-xxx.cloudfunctions.net/helloGET
labels:
  deployment-tool: cli-gcloud
name: projects/xxx/locations/asia-northeast1/functions/helloGET
runtime: nodejs6
serviceAccountEmail: xxx@appspot.gserviceaccount.com
sourceUploadUrl: https://storage.googleapis.com/xxx
status: ACTIVE
timeout: 60s
updateTime: '2018-09-22T07:25:06Z'
versionId: '1'

// デプロイした関数のリストを確認する
$ gcloud beta functions list
NAME      STATUS  TRIGGER       REGION
helloGET  ACTIVE  HTTP Trigger  asia-northeast1

ちなみにリージョンの一覧はこちらで確認できる

$ gcloud beta functions regions list
NAME
projects/xxx/locations/europe-west1
projects/xxx/locations/us-central1
projects/xxx/locations/us-east1
projects/xxx/locations/asia-northeast1

デプロイした際に表示したhttpsTriggerのURLにアクセスすると「Hello World!」が表示されることが確認できる
https://asia-northeast1-xxx.cloudfunctions.net/helloGET

URLを忘れてしまった場合は以下のコマンドで再度確認できる

$ gcloud beta functions describe helloGET --region asia-northeast1

不要になった場合は以下のコマンドで関数の削除が行える

$ gcloud beta functions delete helloGET

これで簡単にだがCloud Functionsを利用することができた

クイックスタート – Consoleを使用したクイックスタート

準備

「クイックスタート – gcloudコマンドラインツールの使用」での準備と同じ

関数の作成

GCP ConsoleでCloud Functions の概要ページに移動する

Cloud Functionsを有効にしたプロジェクトが選択されていることを確認する

↓の画像は先ほどgcloudで作成した関数が残っている場合の画面、不要な場合は「削除」より削除できる

新規に作成する場合は「関数を作成」より作成を行う

index.jsはデフォルトのソースコードのままにして、リージョンだけ「asia-northeast1」を選択して「作成」ボタンを押す

ちなみに2018年9月現在index.jsのデフォルトのソースコードはこちらとなっている

/**
 * Responds to any HTTP request.
 *
 * @param {!express:Request} req HTTP request context.
 * @param {!express:Response} res HTTP response context.
 */
exports.helloWorld = (req, res) => {
  let message = req.query.message || req.body.message || 'Hello World!';
  res.status(200).send(message);
};

作成した関数の動作確認を行う

「関数をテスト」をクリックする

「トリガーとなるイベント」フィールドに「{“message”:”Hello World!”}」を文字列を入力して「関数をテスト」をクリックすると「Hello World!」というアウトプットが得られるのがわかる

ログを見てもステータスコードが200と成功していることがわかる

以上Cloud Functionsのクイックスタートを試すことができた

Google Cloud Platform

Share

最近の投稿

概要はじめに2019年4月から新しいチームに配属されることになって、そこではScalaとPHPを使い分けて開発をおこなっていました4月5月では主に保守運用周り、並びにPHPでの開発を行いつつ、Scalaに慣れるために小さい修正を細々とおこなっていて、6月からついに本格的にScala開発に着手することになりました。レガシーな技術から新しい技術に乗り換えるということで、その中で開発言語はどうする......

概要https://storybook.js.org/StorybookとはUI開発環境を提供するツールReact、React Native、Angular、VueなどをサポートしているStorybookを使うとユーザーは独立した開発環境でコンポーネントを個別に作成して挙動の確認をテストできたり、コンポーネントを一覧にしてカタログ化できるので他の人に紹介する時に使えたりする公式のサンプル集h......

概要フロントエンド開発における状態管理、データフローがなんで重要なのか、Fluxとは何かなど主にVue.js目線ですが忘備録的にまとめますデータフローの設計・状態管理についてアプリケーションの規模が大きくなるに連れて状態管理が重要となってくる状態とはアプリケーションが保持するデータのことで例えばECサイトのカートなど、最初は空の状態から始まり商品をカートに入れることによってカートの中身が増え......

概要前にDoxygenの入門についてまとめたが実際にサンプルを見た方が理解が早いかと思うのでサンプルを作ってみる Doxygen入門の入門 ↑前に書いた記事、そっちでは Doxygenについての簡単な説明 導入方法 書き方などを書いた今回は、まずサンプルを見て理解をしたい人向けにサンプルのアプリケーションをGitHubに用意して、ドキュメントもGitHub Pagesで見ら......

概要1クリックでHTML要素の構造を可視化し、セマンティック要素が正しく実装されているか検証できる -Trashy.cssというのがあって気になったので使ってみるTrashy.cssを使うとHTMLの構造が可視化されるのでheader,nav,main,article,selction,footerなどの要素が正しく実装されているかを確認することができる{% include google-a......

カテゴリ一覧

データベース 運用 その他 開発 設計 テスト 言語 アルゴリズム 未分類 クラウドサービス AI イラスト デザイン SNS

タグ一覧

MySQL Oracle Linux 資格 テスト CI Jenkins 入門の入門 Perl API その他 Fabric PHP PHPUnit Ruby JavaScript YAML CircleCI C言語 Docker フレームワーク Selenium Fluentd ab Vim React Vagrant Cinnamon 監視ツール postfix HTML Google Cloud Platform Codeception Watson Node-RED LINE Vue.js 入門の次 PCF Vegeta Azure Firebase モジロイ Sass クリーンアーキテクチャ CSS twitter Flexbox 筋トレ ドキュメント Vue Scala