【やってみた】AWS LambdaからセキュアにGoogle CloudのVertex AIを使ってみた

Google Cloud

2025.10.10

Topics

はじめに

こんにちは、yasujunです。
AWS LambdaからGoogle CloudのVertex AIを使ってみましたので、簡単に手順をご紹介させていただきます。

事前に準備すること

今回使用するAIモデル「Claude Opus 4」をGoogle Cloud上で有効化する必要があります。
下記のブログ記事「Claude 3.5 Sonnetを使い始めるまで」を参考に「Claude Opus 4」を有効化してください。

関連記事
【生成 AI】Claude 3.5 SonnetをGoogle Cloudで使ってみた #Vertex AI

※注意点

今回使用するAIモデル「Claude Opus 4」は、サポートされているリージョンに制限があります。
詳細は下記の公式ドキュメントを参照してください。
https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/claude/opus-4?hl=ja

また、別のモデルを使用される場合は別のドキュメントをご参照ください。

今回やること

・Vertex AIを利用するLambda関数を作成
・Workload Identityの設定
・Lambda関数に構成情報を設定し、Vertex AIにリクエストを送る

Vertex AIを利用するLambda関数を作成

下記の手順でLambda関数を作成していきます。

  1. Lambda関数用のIAMロール作成する
  2. Lambda関数を作成する
  3. 各種レイヤーを作成する

1. Lambda関数用のIAMロール作成する


ここでは「AWSLambdaBasicExecutionRole」のポリシーをLambda関数用のIAMロールにアタッチします。

2. Lambda関数を作成する

  • ランタイム:Python 3.12
  • 実行ロール:「1. Lambda関数用のIAMロール作成」で作成したものを使用する
  • タイムアウト:1分
import json
import boto3
import logging
import anthropic
from anthropic import AnthropicVertex

logger = logging.getLogger()
logger.setLevel(logging.INFO)

def create_anthropic_client(region: str, project_id: str):
    try:
        client = AnthropicVertex(
            region=region,
            project_id=project_id,
        )
        logger.info("Anthropic client created successfully")
        return client
    except Exception as e:
        logger.error(f"Failed to create Anthropic client: {str(e)}")
        raise

def lambda_handler(event, context):
    client = create_anthropic_client(region="us-east5", project_id="<<Google CloudのプロジェクトID>>")

    try:
        message = client.messages.create(
            model="claude-opus-4@20250514",
            max_tokens=100,
            messages=[
                {
                    "role": "user",
                    "content": "Hello Vertex AI !",
                }
            ],
        )
        return {
            "statusCode": 200,
            "body": {
                "message": message.content[0].text
            }
        }

    except anthropic.APIStatusError as e:
        print("Another non-200-range status code was received")
        print(e.status_code)
        print(e.response)

    except Exception as e:
        logger.error(f"Unexpected error during execution: {str(e)}")
        return {
            "statusCode": 500,
            "body": {
                "error": "Internal server error",
                "message": str(e),
            },
        }

※Pythonのanthropicライブラリというものを使ってVertex AIに接続します。
https://pypi.org/project/anthropic/

3. 各種レイヤーを作成する

ローカル環境にランタイムと同じPythonのバージョンをインストールした後、下記のコマンドでレイヤー用のZIPファイルを作成します。

~/.pyenv/versions/3.12.0/bin/python3.12 -m pip install --upgrade --no-cache-dir -t ./yasujun-techblog-vertexai-py-lambda-layer "anthropic[vertex]"
zip -r yasujun-techblog-vertexai-py-lambda-layer.zip yasujun-techblog-vertexai-py-lambda-layer


コンソールからZIPファイルをアップロードした後、レイヤーを作成します。


Lambda関数にレイヤーを紐づけます。

Workload Identityの設定

Workload Identityの設定を下記の手順で進めていきます。

  1. IDプールを作成する
  2. プールにプロバイダを追加する
  3. プロバイダの属性を構成する
  4. サービスアカウントを作成する
  5. Workload Identityからサービスアカウントへの権限借用を設定する
  6. 構成情報をダウンロードする

1. IDプールを作成する


名前とプールIDを入力して「続行」を選択します。

2. プールにプロバイダを追加する


プロバイダの選択を「AWS」に選択した後、プロバイダ名とプロバイダIDとAWSアカウントIDを入力して「続行」を選択します。

3. プロバイダの属性を構成する


デフォルトのままで、「保存」を選択します。

4. サービスアカウントを作成する

サービスアカウントに下記の権限を付与します。

・Vertex AI ユーザー
・Workload Identity ユーザー
・サービス アカウント トークン作成者

5. Workload Identityからサービスアカウントへの権限借用を設定する


「アクセス許可」を選択します。


「サービス アカウントの権限借用を使用してアクセス権を付与する」を選択します。


サービスアカウントを「4. サービスアカウントを作成する」で作成したものを選択します。
プリンシパルを「aws_role」に選択した後、値は「1. Lambda関数用のIAMロール作成」で作成したarnを、assumed-role仕様で入力します。
例)
arn:aws:iam::11111111:role/yasujun-techblog-vertexai-py-lambda-role

arn:aws:sts::11111111:assumed-role/yasujun-techblog-vertexai-py-lambda-role

6. 構成情報をダウンロードする


「構成をダウンロード」を選択してjsonファイルをダウンロードします。

Lambda関数に構成情報を設定した後、Vertex AIにリクエストを送る

最後に、Lambda関数の設定を下記の手順で進めます。
AWS LambdaからVertex AIに「Hello Vertex AI!」とリクエストを送ってみましょう。

  1. 「6. 構成情報をダウンロードする」でダウンロードした構成情報をAWS Lambdaファイルに配置する
  2. 構成情報を読み取るためにファイル名を環境変数に格納する
  3. AWS Lambdaを手動実行する

1. 「6. 構成情報をダウンロードする」でダウンロードした構成情報をAWS Lambdaファイルに配置する


「6. 構成情報をダウンロードする」でダウンロードしたjsonファイルを関数ファイルと同じ階層に配置します。

2. 構成情報を読み取るためにファイル名を環境変数に格納する


環境変数のキーを「GOOGLE_APPLICATION_CREDENTIALS」と入力した後、その値に「6. 構成情報をダウンロードする」でダウンロードした構成情報のファイル名を入力します。

3. Lambdaを手動実行する

「Test」→「Invoke」の順で選択すると、下記のようにVertex AIからレスポンスが返ってきます。

Response:
{
  "statusCode": 200,
  "body": {
    "message": "Hello! I'm actually Claude, an AI assistant made by Anthropic. I'm not Vertex AI - that's Google's AI platform. \n\nHow can I help you today? Whether you have questions, need assistance with a task, or just want to chat, I'm here to help!"
  }
}

トラブルシューティング

クォータの問題が発生した場合:

  • Cloud Consoleを通じて現在のクォータを確認するか、クォータ増加をリクエストしてください

「model not found」404エラーが発生した場合:

  • Model Gardenでモデルが有効になっていることを確認
  • 指定されたリージョンへのアクセス権があることを確認
  • CLOUD_ML_REGION=globalを使用している場合、Model Gardenの「サポートされている機能」でモデルがグローバルエンドポイントをサポートしていることを確認してください。グローバルエンドポイントをサポートしていないモデルの場合、以下のいずれかを行ってください:
    • ANTHROPIC_MODELまたはANTHROPIC_SMALL_FAST_MODELを介してサポートされているモデルを指定する、または
    • VERTEX_REGION_環境変数を使用してリージョナルエンドポイントを設定する

429エラーが発生した場合:

  • リージョナルエンドポイントの場合、プライマリモデルと小型/高速モデルが選択したリージョンでサポートされていることを確認
    より良い可用性のためにCLOUD_ML_REGION=globalへの切り替えを検討

引用:https://docs.claude.com/ja/docs/claude-code/google-vertex-ai

まとめ

本記事では、AWS LambdaからGoogle CloudのVertex AIを使用する手順をご紹介いたしました。
今回ご紹介した方法でAWS上で実行されているアプリケーションから、Amazon BedrockのみならずVertex AIとの連携が可能になり、より多くのモデルを選択できるようになります。
これによりAmazon Bedrockで提供されていないモデルも、AWS上で実行されているアプリケーションから利用が可能となります。

モデルの選択肢が増えることで、より最適なモデルを選択できるようになるのでぜひ試してみてください。

NHN テコラスの採用情報はこちら

テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!

yasujun

インフラの勉強と趣味の武道をバランス良く両立していきたいエンジニアです。 よろしくお願いいたします!

Recommends

こちらもおすすめ

Special Topics

注目記事はこちら