見出し画像

【完全保存版】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が返ってきたことが確認できました。

今回は以上です。

サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊