【完全保存版】GCPの認証が必要なCloud Functionの実行方法について
1 サービスアカウントの作成
まずは、「Cloud Function」を実行する用の「サービスアカウント」を作成します。
1 アカウントの作成
「IAMと管理」⇨「サービスアカウント」
「サービスアカウントを作成」を選択します。
任意の名前をつけて、「作成して続行」
「ロールを選択」から「Project」の「オーナー」を選択します。
「オーナー」が選択されていることを確認の上、「完了」
2 キーの作成
では、上で作った「サービスアカウント」のキーを作成します。
作成したサービスアカウントを選択します。
「キー」タブから「鍵を追加」を選択します。
「新しい鍵を作成」を選択します。
キーのタイプとして「JSON」を選び、「作成」
作成したJSONファイルを任意の場所に保存します。
(私は下のような場所に保存しました。)
2 環境変数の設定
上で取得した、サービスアカウントの鍵のJSONファイルを環境変数に設定しましょう。
私は下のように、「zsh」を使っています。
echo $SHELL
では、vimを使って、「.zshrc」を開きます。
vim ~/.zshrc
下のように、「GOOGLE_APPLICATION_CREDENTIALS」を設定します。
export GOOGLE_APPLICATION_CREDENTIALS="JSONファイルのパスをここへ"
「esc」キーを押した後、「wq!」で上書き保存します。
「source」で反映させた後、「echo」で取得できるかを確認します。
source ~/.zshrc
echo $GOOGLE_APPLICATION_CREDENTIALS
下のようになればうまく行っています。
3 Cloud Functionの作成
では、「Cloud Function」を作ってみましょう。
「ファンクションを作成」を選択
「第2世代」で任意の名前を入れて、「リージョン」は東京にしています。
「認証が必要」にチェックを入れて、「次へ」
今回は、ランタイムを「Python3.12」にして、「インラインエディタ」で次のコードを入れました。
単純に、渡した値に5を足して返しています。
def hello_http(request):
if request.args and 'index' in request.args:
index = int(request.args.get('index'))
return str(index + 5)
else:
return 'not found', 400
完了したら、「デプロイ」を押します。
4 Cloud Runでの権限設定
では、先ほどの「Cloud Function」が第1章で作成したサービスアカウントから実行できるように設定します。
「Cloud Run」を選択します。
作成した「Cloud Function」にチェックを入れて、「プリンシパルを追加」
「新しいプリンシパル」に先ほど作成した、サービスアカウントを入れます。
「ロール」には「Cloud Run」の「Cloud Run 起動元」を入れます。
入れ終わりましたら、「保存」を選択します。
5 外部からのCloud Functionの実行
では、うまくできるかを試してみましょう。
「Cloud Function」の「トリガー」からURLをコピーします。
下のように実行します。
5行目で、Google Cloudの認証トークンを取得し、それをヘッダーに添付しています。
import requests
import subprocess
# gcloudコマンドを使用して認証トークンを取得
token = subprocess.getoutput('gcloud auth print-identity-token')
URL = "ここにURLを貼り付けます"
# ヘッダーに認証トークンを含める
headers = {
'Authorization': f'Bearer {token}',
}
res = requests.get(f'{URL}?index=10', headers=headers)
print(res.text)
実行すると、下のように、10を渡して、それに5を足した、15が返ってきたことが確認できました。
今回は以上です。
サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊