Google Cloud Functinos を試してみる

ぼちぼちと、GCPを使って環境を作ろうと思っているのだけれど、

いかんせん仕事ではないのでまとまった時間が取れない。

試行錯誤してきたが、何とか形にするためには、もっと開発効率をあげる必要がある

ということで、FirebaseやGoogle Cloud APIと親和性が高そうな、Google Cloud Functionsを試す。

ざっと概要を読んで、チュートリアルを動かして感覚をつかみたい。

Cloud Functions

HTTPのチュートリアル

https://cloud.google.com/functions/docs/tutorials/http?hl=ja

1.準備

  • GCPプロジェクト 課金有効にする
  • SDKバージョンを最新に

> gcloud components update

2.開発環境を準備

2.1 Node.js

Node.js と Python と Goが選択できるが、Node.jsを選択する

https://cloud.google.com/nodejs/docs/setup?hl=ja

2.2 NVM

Windowsでは、Node.jsのバージョン管理ツールNVMが利用できないので、以下を利用する

nvm-windows https://blog.clock-up.jp/entry/2018/02/10/nodejs-manager-on-windows

準備として、以前NVMを利用せずに単独でNode.jsをインストールしていた場合、既存Node.jsのアンインストールとnpmディレクトの削除を行う。

npmディレクトリは以下にある。

C:\Users\{User}\AppData\Roaming\npm

nvm_install

Download – install (nvm-setup.zip) インストーラーをダウンロードし解凍、インストールする。

https://github.com/coreybutler/nvm-windows/releases

nvmコマンドが使えるようになるので、最新のNodeをインストールしアクティブにする

> nvm install latest
> nvm list
    13.11.0
> nvm use 13.11.0
Now using node v13.11.0 (64-bit)

ユーザー名に空白が含まれていたため、以下のエラーが発生した。インストーラーで、インストール先にブランクを含まないパスを指定することで回避

エラー内容

C:\Users\Hiroto Yagi>nvm use 13.11.0
exit status 1: 'C:\Users\Hiroto' is not recognized as an internal or external command,
operable program or batch file.

NGなパスの例

C:\Users\Hiroto Yagi\AppData\Roaming\nvm

インストーラで空白を含まないパスを指定する

nvm_install2

3.アプリケーションの準備

以下からサンプルをクローンする
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git

今回のサンプルプロジェクトのフォルダへ

cd nodejs-docs-samples/functions/helloworld/

// [START functions_helloworld_get]
/**
 * HTTP Cloud Function.
 * This function is exported by index.js, and is executed when
 * you make an HTTP request to the deployed function's endpoint.
 *
 * @param {Object} req Cloud Function request context.
 *                     More info: https://expressjs.com/en/api.html#req
 * @param {Object} res Cloud Function response context.
 *                     More info: https://expressjs.com/en/api.html#res
 */
exports.helloGET = (req, res) => {
  res.send('Hello World!');
};
// [END functions_helloworld_get]

4.関数のデプロイ

関数をデプロイする。

  • –runtime :優先する Node.js のバージョンを指定
  • –allow-unauthenticated :認証なしで関数にアクセス

 > gcloud functions deploy helloGET --runtime nodejs8 --trigger-http --allow-unauthenticated      
 API [cloudfunctions.googleapis.com] not enabled on project
 [426030064127]. Would you like to enable and retry (this will take a
 few minutes)? (y/N)?  y
 
 Enabling service [cloudfunctions.googleapis.com] on project [426030064127]...
 Operation "operations/acf.1a3f3574-f2ee-47e6-aa8a-ae5c7c023bb8" finished successfully.
 Deploying function (may take a while - up to 2 minutes)...WARNING: Setting IAM policy failed, try "gcloud alpha functions add-iam-policy-binding helloGET --member=allUsers --role=roles/cloudfunctions.invoker"
 Deploying function (may take a while - up to 2 minutes)...done.
 availableMemoryMb: 256
 entryPoint: helloGET
 httpsTrigger:
   url: https://us-central1-typea-gcp-api-trial.cloudfunctions.net/helloGET
 ingressSettings: ALLOW_ALL
 labels:
   deployment-tool: cli-gcloud
 name: projects/typea-gcp-api-trial/locations/us-central1/functions/helloGET
 runtime: nodejs8
 serviceAccountEmail: typea-gcp-api-trial@appspot.gserviceaccount.com
 sourceUploadUrl: https://storage.googleapis.com/gcf-upload-us-central1-4fc76f27-799e-40e6-ba7b-606e7e3f0e01/fb7e562d-1c64-421c-8752-69e6d378959f.zip?GoogleAccessId=service-426030064127@gcf-admin-robot.iam.gserviceaccount.com&Expires=1584448781&Signature=qNToHvXwpCyMwnq3fLx%2FnZUggs4xm9Y8ZUv5QgjDUhVYoqqstSUEgD5sSKqmeXPwERls2z5sO3ydKdTJjjfen7AeLSuY%2BVZgdC4bbWIrUbosyoyBAi58a%2F%2BiDODYNT9jr8uUdmMZZCmaaoiu96Y3%2BtKcMWaNppT1KchXJL1EBG053GAtPwAqfVOy%2Ba3OVk51%2BXu4q4Upt3zlCiii0SRwi6z%2F5gVEc4hdCf0GcNk7txUWdOPrzvXz0JdIxcplcBp8r%2Fu%2FqJSgr6mL0tGi0UQdUYtsV7iqhSk%2FCtNtOJvwbN%2ByWTiSr2%2FN51pBVOuT2PB5MQavZrhLTq4j6HAvu6gD%2BA%3D%3D  
 status: ACTIVE
 timeout: 60s
 updateTime: '2020-03-17T12:10:56.296Z'
 versionId: '1'

5.関数の実行

デプロイ時に結果として表示される、URLにアクセスする。

url: https://us-central1-typea-gcp-api-trial.cloudfunctions.net/helloGET

実行された!

gcp_function

5.1 関数のリスト

 > gcloud functions list
 NAME      STATUS  TRIGGER       REGION
 helloGET  ACTIVE  HTTP Trigger  us-central1

5.2 関数の削除

最後に削除しとく。

 > gcloud functions delete helloGET
 Resource [projects/typea-gcp-api-trial/locations/us-central1/functions
 /helloGET] will be deleted.
 
 Do you want to continue (Y/n)?  y
 
 Waiting for operation to finish...done.
 Deleted [projects/typea-gcp-api-trial/locations/us-central1/functions/helloGET].

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です