import functions_framework from google.cloud import storage from google.cloud.workflows import executions_v1 from google.cloud.workflows.executions_v1.types import Execution import json import os import gzip # Storage クライアントを作成 cs_client = storage.Client() wf_client = executions_v1.ExecutionsClient() @functions_framework.http def handle_request(request): # POSTリクエストの処理 if request.method != 'POST': # 他のメソッドに対するエラーレスポンス return ({'error': 'Method not allowed'}, 405) try: request_json = request.get_json() print(request_json) if "challenge" in request_json: # MiiTelのチャレンジリクエストに対する応答 return (request_json["challenge"], 200, {'Content-Type':'text/plain'}) project_id = os.getenv("PROJECT_ID") bucket_name = os.getenv("BUCKET") # 共有ドライブID location = os.getenv("LOCATION") # ワークフローのロケーション workflow = os.getenv("WORKFLOW") # ワークフロー名 # デバッグ用に保存 save_to_gcs(bucket_name,request_json) # ワークフロー呼び出し argument = json.dumps({"video": request_json["video"]}) execution = Execution(argument=argument) parent = f"projects/{project_id}/locations/{location}/workflows/{workflow}" print(parent) response = wf_client.create_execution(request={"parent": parent, "execution": execution}) print(f"Workflow execution started: {response.name}") return (json.dumps({}), 200, {'Content-Type': 'application/json'}) except Exception as e: # エラー error_response = { "error": str(e) #エラー内容 } print(str(e)) return json.dumps(error_response), 500, {'Content-Type': 'application/json'} #エラー def save_to_gcs(bucket_name,request_json): file_name = request_json["video"]["id"] + ".json.gz" bucket = cs_client.bucket(bucket_name) # GCS バケットのブロブを取得 blob = bucket.blob(f"request_log/{file_name}") # JSONを文字列に変換 json_string = json.dumps(request_json) # Gzip圧縮 compressed_data = gzip.compress(json_string.encode('utf-8')) # 圧縮されたデータをアップロード blob.upload_from_string(compressed_data, content_type='application/gzip')