GCPのサービス「Cloud Functions」のクイックスタートチュートリアルをやってみた

GCPのサービス Cloud functions のクイックスタートチュートリアルをやってみました。

https://cloud.google.com/functions/docs/quickstart-nodejs?hl=ja

# 対象

* Cloud Functions について概要をさらっと確認したい方
* GCPのサービスに興味のある方

# 環境

* GCP

# Cloud Functions について

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

Cloud Functions は サーバーレス環境で関数を実行できるサービスです。
AWSでは、AWS Lambda でしょうか。


# Cloud Functions の利用方法

Cloud Functions には 3つの利用方法があります。
https://cloud.google.com/docs/overview?hl=ja#ways_to_interact_with_the_services

1. Cloud Console
2. gcloud コマンドライン インターフェース
3. SDK クライアント ライブラリ

# Cloud Console から Cloud Functions を作成する

今回は、Cloud Console から Cloud Functions を作成します。

[Cloud Console の Cloud Functions の概要ページに移動](https://console.cloud.google.com/functions/list)

## GCPプロジェクトを作成

GCPのリソース管理画面からプロジェクトの作成を行います。
[リソース管理](https://console.cloud.google.com/cloud-resource-manager)

プロジェクトを作成を選択。
![スクリーンショット 2021-07-01 9.09.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/3169200a-9a95-f165-ca16-868c2f7240a0.png)

プロジェクト名を入力して作成を押下。
![スクリーンショット 2021-07-01 9.24.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/c9628e67-83ef-167b-f895-9103ef2e8449.png)

プロジェクトが作成されたら、作成されたプロジェクトを選択しておきます。

## 関数の作成

左メニューから「Clous Functions」を選択します。
![スクリーンショット 2021-07-01 19.52.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/e94e343c-7627-d9aa-a99a-58a7ad5ab5eb.png)

関数を作成を押下。
![スクリーンショット 2021-07-01 19.53.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/2cf1d8ad-f0fd-90d3-4ae7-3c427746fe41.png)

作成する関数の設定画面が表示されます。
![スクリーンショット 2021-07-01 20.32.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/fb30320f-2285-6361-2dc4-597a8ec2f064.png)

認証を「未承認の呼び出しを許可」を選択して保存を押下。
![スクリーンショット 2021-07-01 20.32.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/cac49d8d-2eee-3f26-c38e-8d1967126cc4.png)

設定の確認画面が表示されます。次へを押下。
![スクリーンショット 2021-07-01 20.40.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/13444929-024e-7ef8-64db-b2c100a4e4c9.png)


## 関数のデプロイ
https://cloud.google.com/functions/docs/deploying

>デプロイでは、関数のソースコードを含むアーカイブが Google Cloud Storage バケットにアップロードされます。ソースコードがアップロードされると、Cloud Build は自動的にコードをコンテナ イメージに構築し、そのイメージを Container Registry に push します。Cloud Functions はこのイメージを使用して、関数を実行するコンテナを作成します。

前段で作成した関数をデプロイします。

画面にインラインエディタが表示されてサンプルのコードが表示されます。
ランタイムはデフォルトの Node.js 14、ソースコードはインラインエディタが選択されています。
今回はそのままの設定でデプロイします。
![スクリーンショット 2021-07-01 20.41.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/bc0f6c20-5bd8-2d49-64d7-8ad5e070512b.png)

### Cloud Build API の有効化
Cloud Functionsで作成した関数をデプロイするには、Cloud Build を利用します。
APIを有効にするを押下します。

Cloud Build API が有効化されます。
![スクリーンショット 2021-07-01 21.02.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/1156b820-82ea-705b-de1f-39ce8c179933.png)

再びCloud Functionsの画面に戻り、デプロイを押下します。
![スクリーンショット 2021-07-01 21.03.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/a9f57a04-43b7-aabd-5484-532fe8797e10.png)

## デプロイの実行
Cloud Functuinsで作成した関数は、Cloud Build APIを利用してビルドされて、コンテナイメージとして作成されます。
https://cloud.google.com/build/docs/deploying-builds/deploy-functions?hl=ja

デプロイ画面に遷移します。
スピナーが緑に変わったらデプロイが成功です。
![スクリーンショット 2021-07-01 21.06.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/f5250617-344a-a569-5c86-bb5cab6174a8.png)


# 関数のテスト

デプロイ画面の右の操作メニューから、関数をテストを選択します。
![スクリーンショット 2021-07-01 21.07.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/40bd8463-080d-c148-b8d7-f92f09303955.png)

関数のテスト画面が表示されます。「トリガーとなるイベント」は空のまま、「関数をテストする」を押下します。
![スクリーンショット 2021-07-01 21.08.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/41bf92e2-5456-9647-f5c0-09a63cf99770.png)

出力フィールドに「Hello World!」を出力結果が表示されて、完了が表示されます。
![スクリーンショット 2021-07-01 21.14.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/8b59b375-656e-06e9-87a2-9b0a808f219c.png)

# ログの確認

ログ画面にてログを確認します。ステータスコード200が表示されていれば成功です。
![スクリーンショット 2021-07-01 21.16.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/c343572c-e475-36e2-162e-ef9823d810f9.png)

# 生成されたリソースの確認
Cloud Functions は Cloud Build を利用してデプロイされます。
GCPのサービスにファイル等が作成されるので確認してみます。

## Cloud Storage
メニューからCloud Strageを選択します。

バケット一覧が表示されます。
![スクリーンショット 2021-07-02 8.07.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/4dcb4f37-558a-c42a-4ef7-886fbbbfdb7f.png)


バケットを選択します。
![スクリーンショット 2021-07-02 8.08.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/284b2900-f6eb-6e1b-7356-73d59a56e957.png)

Cloud Functions で作成したソースコードのZipがアップロードされていることが確認できます。
![スクリーンショット 2021-07-02 8.08.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/d2f0b372-1c17-e601-8ace-c44d1430b4a9.png)

## Cloud Build の確認

Cloud Build の画面で、Cloud Functionsを作成したリージョンを選択します。
![スクリーンショット 2021-07-02 8.18.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/a4af89d8-f6f6-eed6-d5c0-334d03976070.png)

ビルドリソースを選択すると、ビルドの概要を確認できます。
![スクリーンショット 2021-07-02 8.21.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/60bc8d88-b3a1-ed33-ebf1-08af2f97952e.png)

## Container Registry の確認

Cloud Build で生成されたコンテナイメージは、Container Registry に保存されます。

メニューからContainer Registryを選択します。
![スクリーンショット 2021-07-02 8.37.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/83d82c12-2634-f554-c154-a7d1e6f93f9b.png)

Dockerイメージが確認できます。
![スクリーンショット 2021-07-02 8.38.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/5a902a3d-a65e-2556-0d69-bd07cee89ab7.png)

# Cloud Functions の削除

Cloud Functions の作成で作ったリソースを削除します。

削除方法は、プロジェクトを削除する方法と関数を生成した際に生成されるリソースを削除していく方法があります。

今回はリソースを1つづつ削除していきます。

## Cloud Functions の削除

関数を削除すると、同時に Container Registry にコンテナイメージも削除されます。

Cloud Functions の関数一覧で、削除対象にチェックを入れて、削除を選択します。
![スクリーンショット 2021-07-02 8.52.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/65376352-e076-6ee4-2dd3-fafea50b7488.png)

削除確認で削除を選択すると、関数が削除されます。
![スクリーンショット 2021-07-02 8.53.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/5c87a238-1d4d-4de0-42d0-21e77efc19a3.png)

## Cloud Storage の削除

Cloud Buildメニューからビルドリソースの一覧を表示します。
リージョンを選択して、ビルドファイルのストレージリンクを選択します。
![スクリーンショット 2021-07-02 8.59.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/e28896d6-763f-b72e-01d2-5cc9b24b6bbe.png)

Cloud Storageのオブジェクト 詳細が表示されます。削除を選択します。
![スクリーンショット 2021-07-02 9.00.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/9281affc-4fe0-be9c-b6bf-91631f711352.png)

削除確認画面が表示されるので、削除を選択します。
![スクリーンショット 2021-07-02 9.02.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/b0033819-105b-6cdf-ee27-a6926d1258a0.png)

以上でチュートリアルは終わりです。