はじめに
本格的なWEBアプリを作って、他の人たちに使ってもらうとなると、やはりクラウドにバックエンドを構築して利用できるようにした方がいいと思い、GCPの学習を始めた。
そこで、複数回に分けて、GCPの学習記録を投稿していきたいと思う。
第1回目は、バックエンドの関数をクラウドにデプロイできる、Cloud Functionsについて。
(今回はちょっとだけ。)
対象者
- GCP初心者
- すでにGCPのアカウントは持っている。
- 開発環境はMacとVSCode
- 開発言語はGo
まずは環境構築
1. Goをインストール
こちらについては、ネット上にいろんな記事があるので今回は割愛する m(_ _)m。
2. サンプルのプロジェクト(モジュール)を作成する。
ターミナルを使って、モジュール用にディレクトリを作成する。
mkdir demoapi
作成できたら、cd
コマンドで作ったディレクトリに移動する。
cd demoapi
3. goをモジュールとしてinitする。
今回は、demo.com/demoapi
という名前でinitする。
go mod init demo.com/demoapi
これを実行すると、demoapi
ディレクトリ内に、go.mod
というファイル名が作成される。
これでgoのモジュールとして準備ができた。
4. Go 用 Cloud クライアント ライブラリをインストール
これをモジュール内にインストールすることで、GCPのさまざまなサービスを利用して開発ができるようになる。
ターミナルで以下のコマンドを実行する。
go get github.com/GoogleCloudPlatform/functions-framework-go
これで、Github上に上がっているライブラリがモジュールに組み込まれる。
ここで、demoapi/go.mod
を見ると、
module demo.com/demoapi
go 1.20
//追加された部分
require github.com/GoogleCloudPlatform/functions-framework-go v1.7.4 // indirect
このようにライブラリが組み込まれていることがわかる。
これで環境構築は整った。
最初の関数を書いてみる
今回は、リクエストに対して、「こんにちは!」と返すだけの関数を書いてみる。
以下の様にコーディングする。
package demoapi
import (
"fmt"
"net/http"
"github.com/GoogleCloudPlatform/functions-framework-go/functions"
)
func init() {
functions.HTTP("AisatuGet", aisatuGet)
}
// こんにちは!と返すだけの関数
func aisatuGet(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "こんにちは!")
}
簡単に何をしているのか説明すると、「AisatuGet
という名前でhttpのリクエストがあったときに、aisatuGetという関数を実行し、こんにちは!という文字列を返す。」といった簡単な内容である。
いよいよデプロイ
1. デプロイに必要なコマンドを確認
GCPへのデプロイには、次の様なコマンドを打つ必要がある。
gcloud functions deploy **名前** \
--gen2 \
--runtime=go120 \
--region= **リージョン(場所)** \
--source=. \
--entry-point= **デプロイする関数のエントリポイント** \
--trigger-http \
--allow-unauthenticated
まず、書き換えるのは、1行目の名前のところ。
公式のドキュメントの例では、go-http-functionとなっているが、これがデプロイした後にコンソールで表示される名前になる。つまり管理名と考えて良いかも。
次に、4行目の、region。これは、関数をデプロイする場所を指定する。GCPのインフラは世界中にあるので、どこにアップロードするのかを指定する必要がある。これを見ているのは日本人で日本で開発する人が多いと思うので、asia-northeast1
(東京)にしておけば良い。
最後に、6行目は、作成した関数を呼び出すHTTPエントリポイント(APIのアクセス先)を書く。
2. デプロイする
先ほど、作ったdemo_api.go
のaisatuGet関数を今回はデプロイしたいので、以下の様にコマンドを打てば良い。
gcloud functions deploy aisatu-function \
--gen2 \
--runtime=go120 \
--region=asia-northeast1 \
--source=. \
--entry-point=AisatuGet \
--trigger-http \
--allow-unauthenticated
これをターミナルに打ち込んで実行してみると、
Preparing function...done.
⠹ Deploying function...
⠹ [Build] Creating build... Logs are available at [https://console.cloud.google.com/cloud-build/builds;reg
ion=asia-northeast1/ここに長々と文字列が続く...]
. [Service]
. [ArtifactRegistry]
. [Healthcheck]
. [Triggercheck]
デプロイが始まる。
しばらく時間がかかるので、待っていると、
//さっきの続き
Done.
**ここに長々とデプロイ内容などが表示される**
state: ACTIVE
updateTime: '2023-07-09T07:35:36.315434600Z'
url: https://asia-northeast1-**プロジェクト名**.cloudfunctions.net/aisatu-function
この様な内容が表示されればデプロイ完了。
一番最後のurlが、この関数へのエントリポイント(アクセス先)になるので、必ずメモしておこう。
3. デプロイできたか確認
以下の様にcurlコマンドを打って実行すると、狙い通り「こんにちは」と返ってくる。
curl -m 70 -X POST **ここにurlを貼る** \
-H "Authorization: bearer $(gcloud auth print-identity-token)" \
-H "Content-Type: application/json" \
-d '{}'
こんにちは!
できた!!
Cloud Functionsのコンソールにも、デプロイしたものが表示されている。
最後に
本日の記事はここまで。
次回は、リクエストパラメータの受け取りなどをやりたいと思う。
見ていただきありがとうございました!
参考文献
https://cloud.google.com/go/docs/setup?hl=ja
https://cloud.google.com/functions/docs/create-deploy-gcloud?hl=ja