【初心者向け】Cloud FunctionsのPythonで設定値(環境変数)を利用する方法

APIのアクセストークンなど、セキュリティの観点からソースコードには直接記述せずに設定値として別管理しておきたいパラメータがあると思います。
今回はGCPのCloud Functionsで設定値を利用する方法を紹介します。

Cloud Functionsで設定値を利用する方法

Cloud Functionsで設定値を利用するためには環境変数を利用することになります。
今回は以前紹介したCloud Storageにファイルがアップロードされた際にLINE通知するCloud Functionsで環境変数の利用方法について説明します。
ただ、流れとしてはCloud StorageやLINE通知を理解している必要はないのでご安心ください。

【初心者向け】Cloud Storageの変更をトリガーにCloud Functionsを実行する方法

Cloud Functionsの構成で環境変数を設定する

まずは以下ボタンからCloud Functionsのページを開きます。

Cloud Functions

環境変数を設定したい関数を選択し、編集ボタンを押します。

ランタイム、ビルド、接続の設定を選択し、ランタイムタブのランタイム環境変数に、追加したい環境変数を追加します。

Cloud Functionsのコードで環境変数を利用する

コードタブを選択し、main.pyに以下のように記述します。

import os


LINE_TOKEN = os.environ.get('LINE_TOKEN')
print(f"LINE_TOKEN : {LINE_TOKEN }")

設定した環境変数の名前を指定することで、環境変数の値を取得することができます。

Cloud Functionsで環境変数が設定できているか確認する

今回作成したコード全文はこちらです。

import os
import functions_framework
import requests
from google.cloud import storage


# Triggered by a change in a storage bucket
@functions_framework.cloud_event
def gcs_to_line(cloud_event):
   data = cloud_event.data

   bucket = data["bucket"]
   file_name = data["name"]

   print(f"Bucket: {bucket}")
   print(f"File: {file_name}")

   # GCS connect
   client = storage.Client()
   bucket = client.get_bucket(bucket)

   # GCS file download
   blob = bucket.blob(file_name)
   blob.download_to_filename(filename=file_name)

   # LINE params
   LINE_TOKEN = os.environ.get('LINE_TOKEN')
   headers = {
      "Authorization": f"Bearer {LINE_TOKEN}",
   }
   files = {"message": (None, file_name), "imageFile": open(file_name, "rb")}

   # LINE send
   requests.post("https://notify-api.line.me/api/notify", headers=headers, files=files)

functions-framework==3.*
requests==2.28.1
requests-file==1.5.1
requests-oauthlib==1.3.1
requests-toolbelt==0.9.1
google-cloud-storage==2.5.0

上記Cloud Functionsを準備した上でCloud Storageに画像をアップロードしたところ、無事環境変数を利用してLINE通知できていることが確認できました。

まとめ

今回はGCP Cloud Functionsで設定値(環境変数)を利用する方法について紹介しました。
ご意見やご質問がありましたらお気軽によろしくお願いします。コメントお待ちしております!

コメントを残す

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

CAPTCHA