LoginSignup
2
1

More than 5 years have passed since last update.

入門 Google Cloud Functions (Alpha) 「説明」〜「導入」〜「Hello, World」編(うまく動かない。2016/12/06, gcloud v136.0.0時点)

Last updated at Posted at 2016-12-05

Myuon Corp. Advent Calendar 2016 6日目です。


qiita-03-cloud-functions-lead.png

本記事の概要

実施環境

  • Macのバージョン
$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.12.1
BuildVersion:   16B2555

  • gcloud コマンドのバージョン
$ gcloud --version
Google Cloud SDK 136.0.0
alpha 2016.01.12
bq 2.0.24
bq-nix 2.0.24
core 2016.11.30
core-nix 2016.11.07
gcloud 
gsutil 4.22
gsutil-nix 4.20

■ Cloud Functions (ALPHA) とは

CLOUD FUNCTIONS (ALPHA)

qiita-01-about-gcf.png

イベントベースの軽量なマイクロサービス

Google Cloud Functions は軽量、イベントベース、かつ非同期のコンピュート ソリューションです。クラウド イベントに対応できる、単一目的の小規模な関数を作成することができます。サーバーやランタイム環境を管理する必要はありません。Google Cloud Storage と Google Cloud Pub/Sub のイベントは Cloud Functions を非同期的にトリガーできます。また、HTTP からの呼び出しによって同期実行することもできます。

私:「簡単に言えば AWS Lambda の Google版か。対抗馬ってことね。ん?『AWS Lambda』ってそもそもなんだっけ?」

「AWS Lambda」ってなんだっけ?

AWS Lambda とは

AWS Lambda は、コードを AWS Lambda にアップロードすると、サービスが AWS インフラストラクチャを使用してコードの実行を代行するコンピューティングサービスです。コードをアップロードして、Lambda 関数と呼ばれる関数を作成することで、AWS Lambda がコードを実行するサーバーのプロビジョニングおよび管理を行います。AWS Lambda は次のように使用できます。

私「あー、非常駐型プロセスで、Event Driven で動いて、処理が終わったら、すぐ死ぬやつか。『サーバーレスアーキテクチャ』とかってやつと関係してるんだっけ?」

「サーバーレスアーキテクチャ」ってなんだっけ?

サーバーレスアーキテクチャ登場の背景 - アプリケーションサーバーとの比較

2015年になってから「サーバーレスアーキテクチャ」というコンセプトを耳にするようになった。その思想をシンプルに表現すれば「メンテナンスすべきアプリケーションサーバーがなければメンテナンスコストはかからない」となるだろう。

サーバーレスアーキテクチャは原始的なCommon Gateway Interface (CGI)に近いシンプルなアーキテクチャだ。サーバーレスアーキテクチャ上のファンクションは、何らかのイベントをトリガーとして呼び出される。イベントごとに実行プロセスが起動し、ファンクションの終了とともにプロセスが終了する。アプリケーションサーバーが「常駐型プロセス」を実行するインフラストラクチャだとすれば、サーバーレスアーキテクチャは「非常駐型プロセス」をイベントによってトリガーするインフラストラクチャだといえるだろう。

AWS Lambdaのようなクラウドインフラストラクチャ上でサーバーレスアプリケーションを構築すれば、インフラストラクチャのスケーラビリティや可用性(アベイラビリティ)はクラウド事業者の仕事になる。開発者はインフラストラクチャに関する仕事の多くから解放されるということだ。

私「サーバメンテとかは任せて、イベントをトリガーに lambda とか動かす新しい設計パターンってことかね」

なぜ Cloud Functions を触ろうと思ったか

前置きが長くなりすぎました。そんな AWS Lambda の対応馬の Cloud Functions

  • 思ってたより「Cloud Functions 試した!」みたいな記事が少ない(まーAlphaだってのもあるけど)
  • Lambda は業務で触ってるのでどんなもんか気になっていた
  • Amazon クオリティーに嫌になる時が時々あったから浮気心が芽生えた

などの理由から試してみようと思った次第です。

■ Cloud Functions 導入方法について

クイックスタート | Cloud Functions に沿って進めていきます。
qiita-04-1-step.png

準備.1 ホワイトリストへの登録リクエスト

Cloud Functions はまだアルファ版のため、ホワイトリストへ登録する必要があります。

Google Cloud Functions - Alpha Sign Up

qiita-05-gcf_Alpha_Sign_Up.png

準備.2 Cloud Platform Console プロジェクトを選択または作成

GPC用のプロジェクトの作成。(Google APIs など使ったことがある人は作ったことあるかと)

qiita-06-create_project.png

準備.3 プロジェクトの課金を有効にする(クレジットカードの登録を行う)

準備.2 で作成したプロジェクトの課金を有効にします。

qiita-07-enable_billing.png

ちなみにクレカは登録しますが、今は無料トライアル中で 60日間の利用 or 300米ドル分の利用 が可能です。

無料の試用版に申し込む  |  Google Cloud Platform
qiita-08-free_trial.png

無料試用を利用できる期間を教えてください。

無料試用は、60 日が経過したとき、または 300 米ドル分の利用があったときに終了します。クレジット残額と試用期間終了までの残りの日数は Google Cloud Platform Console の上部に表示されます。

準備.4 Cloud Functions API を有効にする

[ENABLE THE API] ボタンをポチッと

準備.5 Google Cloud SDK をインストールし、初期化する

Google Cloud SDK ドキュメント

qiita-09-Google_Cloud_SDK Doc.png

$ python -V                      
Python 2.7.10
$ curl https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-121.0.0-darwin-x86_64.tar.gz > google-cloud-sdk-121.0.0-darwin-x86_64.tar.gz
$ tar zxvf google-cloud-sdk-121.0.0-darwin-x86_64.tar.gz
$ ./google-cloud-sdk/install.sh
$ ./google-cloud-sdk/bin/gcloud init

準備.6 gcloud アルファ版のコマンド コンポーネントをインストール

gcloud components install alpha

■ Cloud Functions で「Hello, World」

ステップ.1 関数を作成

  • ディレクトリを掘る
mkdir ~/gcf_hello_world
cd ~/gcf_hello_world
  • index.jsを作成
$ vim index.js

exports.helloWorld = function helloWorld (context, data) {
  console.log('My Cloud Function: ' + data.message);
  context.success();
};

ステップ.2 バケットの作成

クイックスタートでは新規に作成していたが、 Starage のバケットをコンソールから確認して見るとすでに生成されていたため、それを使用する(プロジェクト作成時に自動生成される?)
スクリーンショット 2016-12-05 23.38.35.png

ステップ.3 関数をデプロイする😱

ここで問題が、、、なぜかデプロイがうまくいかない...😱😱😱

$ gcloud alpha functions deploy helloWorld --bucket [BUCKET_NAME] --trigger-topic hello_world
ERROR: (gcloud.alpha.functions.deploy) ResponseError: status=[403], code=[Forbidden], message=[Cannot access Google Cloud Functions API in project sample-151514]

403が返ってくる。。考えてみればホワイトリストに登録後、Google から返信があるらしいがこない。。😱

gcloud バージョン

$ gcloud --version
Google Cloud SDK 136.0.0
alpha 2016.01.12
bq 2.0.24
bq-nix 2.0.24
core 2016.11.30
core-nix 2016.11.07
gcloud 
gsutil 4.22
gsutil-nix 4.20

$ date 
2016年 12月 6日 火曜日 01時57分31秒 JST

本当はここでこんな風に動くらしい...

  • 関数のステータスを確認(READY 状態であることを確認)
$ gcloud alpha functions describe helloWorld

status: READY
triggers:
- pubsubTopic: projects/[PROJECT_ID]/topics/hello_world
  • 関数実行(call )
$ gcloud alpha functions call helloWorld --data '{"message":"Hello World!"}'
executionId: eTe2wjR29wZU-0 # gcloud は関数の実行 ID を次のような形式で返します
  • ログ確認(実施結果が確認できる)
$ gcloud alpha functions get-logs helloWorld

LEVEL  NAME        EXECUTION_ID    TIME_UTC                 LOG
D      helloWorld  -               2016-03-17 20:35:41.043  User function helloWorld loaded
D      helloWorld  eTe2m2-RVmJU-0  2016-03-17 20:45:18.334  User function triggered, starting execution
I      helloWorld  eTe2m2-RVmJU-0  2016-03-17 20:45:18.335  My Cloud Function: Hello World!
D      helloWorld  eTe2m2-RVmJU-0  2016-03-17 20:45:18.335  Execution took 2 ms, user function completed successfully

まとめ

以下のことを試したが結局ダメだった。。

  • ホワイトリストに登録済みか確認(すでにフォーム入力済みですとなる...)
  • Google アカウントを新規に作ってホワイトリストへ登録してみる
  • バケットを作り直してみる
  • バケットの権限を見直してみる
  • gcloud コマンドを最新(136.0.0)にしてみる
  • google cloud shell から実行してみる

すみません、非常に残念な記事になってしまった。。Alpha版だからかな、、、時間をおいてまたチャレンジしたいと思います。。
何か情報をお持ちの方、教えていただけると幸いです...

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1