Google Cloud Run での n8n のデプロイと実行

1. はじめに

この Codelab では、Google Cloud Run に n8n を設定します。n8n は、ユーザーがさまざまなアプリケーションやサービスを接続して反復タスクを自動化できるオープンソースのワークフロー自動化ツールです。

この Codelab は、Google Cloud Run で n8n をホストする方法を説明する n8n ドキュメント ガイドに基づいています。ここでは、Cloud Run で n8n のより耐久性の高い本番環境グレードのデプロイである n8n のバージョンをインストールして構成します。これには、永続性のためのデータベースや機密データのシークレット マネージャーなどのリソースが含まれます。

演習内容

  • Google Cloud Run に n8n をデプロイします。これは、Google のインフラストラクチャでステートレス コンテナを実行するフルマネージドのサーバーレス コンピューティング プラットフォームです。

学習内容

  • n8n インストールの永続的で耐久性のあるバージョンとして機能する Cloud SQL for PostgreSQL データベースのプロビジョニングとデータの入力。
  • n8n コンテナ イメージを Google Cloud Run にプロビジョニングします。
  • Google Cloud Run への n8n のインストールをテストします。

必要なもの

  • Chrome ウェブブラウザ
  • Gmail アカウント
  • 課金が有効になっている Cloud プロジェクト

2. 始める前に

プロジェクトを作成する

  1. Google Cloud コンソールのプロジェクト選択ページで、Google Cloud プロジェクトを選択または作成します。
  2. Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
  3. Cloud Shell(Google Cloud で動作するコマンドライン環境)を使用します。この環境には bq がプリロードされています。Google Cloud コンソールの上部にある [Cloud Shell をアクティブにする] をクリックします。

[Cloud Shell をアクティブにする] ボタンの画像

  1. Cloud Shell に接続したら、次のコマンドを使用して、すでに認証が完了しており、プロジェクトに各自のプロジェクト ID が設定されていることを確認します。
gcloud auth list
  1. Cloud Shell で次のコマンドを実行して、gcloud コマンドがプロジェクトを認識していることを確認します。
gcloud config list project
  1. プロジェクトが設定されていない場合は、次のコマンドを使用して設定します。
gcloud config set project <YOUR_PROJECT_ID>
  1. 次のコマンドを使用して、必要な API を有効にします。これには数分かかることがあります。
gcloud services enable run.googleapis.com \
                       sqladmin.googleapis.com \
                       secretmanager.googleapis.com 

コマンドが正常に実行されると、次のようなメッセージが表示されます。

Operation "operations/..." finished successfully.

API が見つからない場合は、実装中にいつでも有効にできます。gcloud コマンドとその使用方法については、ドキュメントをご覧ください。

最後に、次の手順で実行するスクリプトで使用する環境変数を設定します。Cloud Shell ターミナルで、次の 2 つのコマンドを実行します(GCP_PROJECT_IDGCP_REGION は、プロジェクト ID と、このデプロイを行うリージョン(us-central1 など)のそれぞれの値に置き換えてください)。デプロイには us-central1 を使用します。

export PROJECT_ID=GCP_PROJECT_ID
export REGION=us-central1

3. Cloud SQL インスタンスを作成する

Google Cloud SQL for PostgreSQL インスタンスを使用します。これは、n8n インスタンスと実行データを保存する永続レイヤになります。これは、設定を永続的にするために必要です。

Cloud SQL for PostgreSQL は、Google Cloud Platform 上のフルマネージド データベース サービスで、PostgreSQL リレーショナル データベースの設定、維持、管理、運営に役立ちます。

Cloud Shell で次のコマンドを実行して、インスタンスを作成します。

gcloud sql instances create n8n-db \
--database-version=POSTGRES_15 \
--tier db-g1-small \
--region=us-central1 \
--edition=ENTERPRISE \
--root-password=postgres

このコマンドの実行には約 5 分かかります。コマンドが正常に実行されると、コマンドが完了したことを示す出力と、NAME、DATABASE_VERSION、LOCATION などの Cloud SQL インスタンス情報が表示されます。

root-password 値を postgres として使用していることに注意してください。別のものに変更した場合は、そのパスワードを忘れないようにしてください。

4. n8n データベースとデータベース ユーザー認証情報を設定する

Cloud SQL for PostgreSQL インスタンスの準備ができたので、そのインスタンスに n8n データベースを作成し、データベースのパスワードと暗号鍵を Google Cloud Secrets Manager に保存します。

まず、作成した Cloud SQL インスタンス(n8n-db)に n8n という名前のデータベースを作成します。次のコマンドはすべて Google Cloud Shell ターミナルで実行します。

gcloud sql databases create n8n --instance=n8n-db

作成が成功すると、次のようなメッセージが表示されます。

Creating Cloud SQL database...done.                                                                                                                                                                                                           
Created database [n8n].
instance: n8n-db
name: n8n
project: YOUR_GCP_PROJECT_ID

データベースが作成されたので、そのデータベースのユーザー アカウントを作成しましょう。次の認証情報を使用します。

  • ユーザー ID : n8n-user
  • password : n8n

: より強力な別のパスワード(本番環境におすすめ)を使用する場合は、ここで選択したパスワード(n8n)ではなく、そのパスワードを使用する必要があります。ただし、次のいくつかのコマンドでも一貫して使用してください。

データベース ユーザーを作成するコマンドは次のとおりです。

gcloud sql users create n8n-user \
    --instance=n8n-db \
    --password="n8n"

この時点で、ユーザー データベースのパスワードと暗号鍵の認証情報を Google Cloud Secret Manager に保存することをおすすめします。これは、API キー、パスワード、証明書、その他の機密データを保存するための安全で便利なストレージ システムです。

まず、使用したパスワード(n8n))を取得して gcloud secrets create コマンドにパイプする次のコマンドを実行します。シークレット キーは n8n-db-password になります。

printf "n8n" | gcloud secrets create n8n-db-password --replication-policy="automatic" --data-file=-        

同様に、次のコマンドセットを使用して暗号鍵を生成し、その値を保持するシークレット変数 n8n-encryption-key を作成します。

openssl rand -base64 -out my-encryption-key 42

gcloud secrets create n8n-encryption-key \
    --data-file=my-encryption-key \
    --replication-policy="automatic"        

5. Google Cloud Run のサービス アカウントを作成する

次のステップでは、n8n を Google Cloud Run にデプロイします。これに備えて、Cloud Run が n8n ワークフローの実行に使用するサービス アカウントを作成します。このため、作成するサービス アカウントに Google Cloud で必要最小限のロールと権限のみが付与されるようにします。

現在の要件では、作成するサービス アカウントに次のロールが必要です。

  • roles/cloudsql.client : サービス アカウントが Cloud SQL データベースにアクセスするために必要です。
  • roles/secretAccessor : n8n-db-passwordn8n-encryption-key の両方の Secret Manager キーにアクセスするには、このロールを付与する必要があります。

それでは始めましょう。以下のコマンドはすべて Google Cloud Shell で実行する必要があります。最初のコマンドはサービス アカウントを作成し、説明したように必要なロールを指定します。各コマンドを順番に実行します。以下のコマンドのいずれかで条件を指定するよう求められたら、"None" を選択します。

gcloud iam service-accounts create n8n-service-account \
    --display-name="n8n Service Account"

export SA_NAME=n8n-service-account@$PROJECT_ID.iam.gserviceaccount.com

gcloud secrets add-iam-policy-binding n8n-db-password \
    --member="serviceAccount:$SA_NAME" \
    --role="roles/secretmanager.secretAccessor"

gcloud secrets add-iam-policy-binding n8n-encryption-key \
    --member="serviceAccount:$SA_NAME" \
    --role="roles/secretmanager.secretAccessor"

gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member="serviceAccount:$SA_NAME" \
    --role="roles/cloudsql.client"

これで、n8n コンテナ イメージを Google Cloud Run にデプロイする準備が整いました。

6. n8n を Google Cloud Run にデプロイする

Google Cloud Shell で次のコマンドを実行します。

gcloud run deploy n8n \
    --image=n8nio/n8n:latest \
    --command="/bin/sh" \
    --args="-c,sleep 5;n8n start" \
    --region=$REGION \
    --allow-unauthenticated \
    --port=5678 \
    --memory=2Gi \
    --no-cpu-throttling \
    --set-env-vars="N8N_PORT=5678,N8N_PROTOCOL=https,DB_TYPE=postgresdb,DB_POSTGRESDB_DATABASE=n8n,DB_POSTGRESDB_USER=n8n-user,DB_POSTGRESDB_HOST=/cloudsql/$PROJECT_ID:$REGION:n8n-db,DB_POSTGRESDB_PORT=5432,DB_POSTGRESDB_SCHEMA=public,GENERIC_TIMEZONE=UTC,QUEUE_HEALTH_CHECK_ACTIVE=true" \
    --set-secrets="DB_POSTGRESDB_PASSWORD=n8n-db-password:latest,N8N_ENCRYPTION_KEY=n8n-encryption-key:latest" \
    --add-cloudsql-instances=$PROJECT_ID:$REGION:n8n-db \
    --service-account=$SA_NAME

デプロイには 1 分ほどかかります。デプロイが成功すると、次のようなメッセージが表示されます。

Deploying container to Cloud Run service [n8n] in project [YOUR_PROJECT_ID] region [us-central1]
Deploying new service...                                                                                                                                                                                                                      
  Setting IAM Policy...done                                                                                                                                                                                                                   
  Creating Revision...done                                                                                                                                                                                                                    
  Routing traffic...done                                                                                                                                                                                                                      
Done.                                                                                                                                                                                                                                         
Service [n8n] revision [n8n-00001-8nh] has been deployed and is serving 100 percent of traffic.
Service URL: https://n8n-<SOME_ID>.us-central1.run.app

上記の出力のサービス URL をメモします。これは、次のステップで n8n コンソールを起動するために使用します。

7. n8n ワークフローを実行する

ブラウザを起動し、前の手順で取得したサービス URL にアクセスします。サービス URL は、Cloud Run のホームページから取得することもできます。ホームページには、サービスの一つとして n8n が表示されます。

: Cannot GET / 画面が表示されるエラーや n8n is starting up が表示されるエラーは、通常、n8n がまだ起動中であることを示しています。ページを更新すると、最終的には読み込まれるはずです。

最終的に、次のような画面が表示され、オーナー アカウントを設定できます。

5a3b1d60d02b13ec.png

必要な情報を入力し、パスワードをメモして、セットアップを完了します。ライセンスキーの送信を求める手順など、一部の手順はスキップできます。

すべてが正常に動作すると、次のように n8n のホームページが表示されます。

3e072e9189ff9464.png

n8n に精通している場合は、このラボを完了できます。

n8n を少し試してみたい場合は、次のワークフローをお試しください。

  1. [認証情報] をクリックし、[最初の認証情報を追加] をクリックします。

14a1f3d2098a266c.png

  1. Gemini API キーの認証情報を設定します。「gemini」と入力して Google Gemini(PaLM)API オプションを表示し、[続行] をクリックします。

7f48bfe35e5d9e98.png

  1. Gemini API キーは https://aistudio.google.com/app/api-keys から取得できます。
  2. 鍵を取得したら、それを貼り付けます。n8n が鍵を検証し、認証情報が設定されます。

3f31cbfc5072f113.png 5. [ワークフロー] オプションに移動し、[最初から開始] をクリックするか、新しいワークフローを作成します。空白のキャンバスが表示されます。ここに、次の 2 つのノードを作成します。1 つはトリガー(Simple Chat)、もう 1 つはエージェントです。作成した認証情報を設定して、エージェント モデルが Google Gemini になるようにします。最終的に、次のようなワークフローが完成します。

8f394e456ae7d1a.png

  1. このワークフローはチャット ペインから実行できます。すべてがうまくいけば、プロンプトに対するレスポンスが返されます。以下に実行画面の例を示します。

aec85c84f65d0da1.png

これで、Google Cloud Run での n8n デプロイの検証は完了です。

8. クリーンアップ

この Codelab を使用して Google Cloud Run に n8n をインストールして実行する方法を学習し、本番環境や永続的な要件で使用しない場合は、Google Cloud アカウントへの継続的な課金を回避するために、このワークショップで作成したリソースを削除することが重要です。

Cloud SQL インスタンスを削除し、デプロイした Cloud Run サービスを削除します。

プロジェクトとリージョンに応じて、次の環境変数が正しく設定されていることを確認します。

export PROJECT_ID="YOUR_PROJECT_ID"
export REGION="YOUR_REGION"

次の 2 つのコマンドは、デプロイした Cloud Run サービスを削除します。

gcloud run services delete n8n --platform=managed --region=${REGION} --project=${PROJECT_ID} --quiet

次のコマンドは、Cloud SQL インスタンスを削除します。

gcloud sql instances delete n8n-db

次の 2 つのコマンドは、作成した Secret Manager キーを削除します。

gcloud secrets delete n8n-db-password

gcloud secrets delete n8n-encryption-key

9. 完了

おめでとうございます。Google Cloud Run に n8n を正常にデプロイし、サンプル ワークフローで設定を検証しました。

リファレンス ドキュメント