Sign In

Pythonスクリプトをn8nで使用する方法(GCP Cloud Run Function)

いつ使用しますか?費用は発生しますか?

N8nで完成したPythonスクリプトにパラメータ値を入力して結果を受け取る必要がある場合。
Makeを含むノーコードオートメーションツールでPythonコードを直接実行することを制限的にサポートします。外部のPythonパッケージ(ライブラリ)をインストールする必要がある場合は、このガイドを使用してコストなしでPythonコードを実行して作成できます。

Cloud Run Functionとは?

(ChatGPT)GCPのCloud Runは、Google Cloudが提供する完全管理型サーバーレスプラットフォームで、コンテナ化されたアプリケーションを実行できる環境です。 Cloud Run Functionは、通常、 Cloud Runで実行される特定の機能または役割を実行するサーバーレスアプリケーションを意味します。
Cloud Run コスト構造
無料提供量(Free Tier)毎月次の量は無料で提供されます。
CPU: 180,000 vCPU-秒(約50時間)
メモリ: 360,000 GiB-sec (約100時間@ 3GiB)
リクエスト: 200万個
アウトバウンドネットワーク: 1GB
トラフィックが少ない場合は、無料の上限を超えず、費用がかかりません。

ステップの説明

💡
注意!難易度がある程度あります。 Google Cloudに関する事前知識をお持ちの方はお手伝いします。
事前に事前にGoogle Cloudアカウントとプロジェクトを作成してください。
1.
https://console.cloud.google.com/接続後、検索ボックスでCloud Runで検索すると、 Cloud Run関数と呼ばれるメニューを選択します。
2.
関数の作成を選択します。このプロセスでは、APIの使用に関するポップアップウィンドウが表示されることがありますが、すべて同意してください。
3.
関数名を設定し、トリガーを「認証されていない呼び出しを許可する」として選択し、次をクリックします。
4.
ランタイムをPython 3.12として選択します。これで、main.pyにあなたが返すPythonスクリプトを作成します。必要なパッケージはrequirements.txtに入れておきます。エントリポイント項目には、最終的に実行する関数名を入力します。作成が完了したら、下部に配置をタップします。
5.
しばらく待つと、緑色のチェックマークが表示され、展開が完了します。これでURL値をコピーしてブラウザで実行すると、以前に作成したPythonスクリプトが実行されます。
6.
デフォルトのデフォルト値で関数をデプロイした場合は、次のようになります。
7.
誤って作成された場合は修正を行ったり、使用しない場合は削除してください。

利用例1 - SOLAPIトークンの生成(パラメータGET)

Main.py (エントリポイント: get_token)
import time import datetime import uuid import hmac import hashlib from flask import jsonify, request def unique_id(): return str(uuid.uuid1().hex) def get_iso_datetime(): utc_offset_sec = time.altzone if time.localtime().tm_isdst else time.timezone utc_offset = datetime.timedelta(seconds=-utc_offset_sec) return datetime.datetime.now().replace(tzinfo=datetime.timezone(offset=utc_offset)).isoformat() def get_signature(key, msg): return hmac.new(key.encode(), msg.encode(), hashlib.sha256).hexdigest() def get_headers(apiKey, apiSecret): date = get_iso_datetime() salt = unique_id() data = date + salt return { 'Authorization': 'HMAC-SHA256 ApiKey=' + apiKey + ', Date=' + date + ', salt=' + salt + ', signature=' + get_signature(apiSecret, data) } def get_token(request): apiKey = request.args.get('apiKey') apiSecret = request.args.get('apiSecret') if not apiKey or not apiSecret: return jsonify({'error': 'apiKey and apiSecret are required!'}), 400 headers = get_headers(apiKey, apiSecret) return jsonify(headers)

活用例2 - GoogleニュースURLデコード(ヘッダー、ボディPOST)

curl -X POST https://us-central1-datapopcorn.cloudfunctions.net/googlenewsdecoder \ -H "Content-Type: application/json" \ -d '{ "source_url": "https://news.google.com/rss/articles/CBMidkFVX3lxTE5rWFdRQXNJX1lTVXR1Uzh0dURROUJXVXh1QnZXaUR0WllUZS1NZzRka3BXcTByeVI3d2N3LVNJRWl5aTJxU0lISUxmVXB0dnRCRmZVbFR3c2R4eWg1UnVjNmZSUU9iRnBKbmpSMUEwMEczVHYyNWc?oc=5", "interval": 5 }'
Requirement.txt
Main.py (エントリポイント: get_token)