0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS AgentCore がタイムアウトで呼び出せない

Posted at

はじめに

この問題の根本的な解決はできませんでした。
ここに関して知見のある方がいらっしゃれば何卒ご教示ください。

問題

Agent Core をデプロイしたもののソースコードからの実行はおろか、エージェントサンドボックスからの呼び出しも失敗してしまう。

「エンドポイントを正常に呼び出せません。」の一言で一蹴。
image.png

原因

テストしているエージェントのエンドポイントが VPC 内にあるため。
エージェントのエンドポイントを VPC 内に設置するとエージェントサンドボックスからも呼び出すことが出来なくなる。

VPC とは??
Virtual Private Cloud(仮想プライベートクラウド)
雑に説明すると、Lambda などパブリックアクセス可能なリソースを、事前に作成したプライベートなクラウドの中に入れることで外からアクセスできなくするような仕組み。

image.png
引用:例: ウェブサーバーとデータベースサーバーの VPC

以下の記事など読むと良さそう
Amazon VPCを「これでもか!」というくらい丁寧に解説

VPC の設定確認方法

  1. エージェントランタイムから任意のエージェントを選択する
    image.png

  2. 「ホスティングをアップデート」
    image.png

  3. 画面下部より「高度な設定」→ 「セキュリティ」に VPC が選択されていたらエージェントのエンドポイントが VPC 内にある
    image.png

解決策

解決策 1 :エンドポイントをパブリックにアクセス可能にする(非推奨)

上記の設定でセキュリティをパブリックに設定すれば一応サンドボックスからの実行も可能になる。
ただし、デフォルトの設定ではエージェントは VPC 外に設定されるはずで、一度 VPC に設定しているはずなので易々とパブリックに設定するのは危険。

解決策 2 :同一 VPC から呼び出す

解決策だったもの 解決策ではないかもしれないが、エージェントのエンドポイントを同じ VPC 内に設置した Lambda から呼び出すことで動作の確認ができる。
  1. Lambda 関数の作成
    通常通り関数を作成する。
    ロールには以下の管理ポリシーを含んだものを適用する。
    image.png

    • AWSLambdaVPCAccessExecutionRole
      Lambda に VPC アクセス権を与える
      このポリシーを付与しないと以下のエラーが生じる
      The provided execution role does not have permissions to call CreateNetworkInterface on EC2
    • BedrockAgentCoreFullAccess
      AgentCoreへのアクセスを強化する
  2. 作成した Lambda 関数をエージェントのエンドポイントと同じ VPC に配置する
    「設定」→「VPC」から設定する
    image.png

  3. AgentcoreRuntime 用の VPC エンドポイントを作成する
    引用:公式ドキュメント

    VPC connectivity impacts inbound and outbound network traffic from AgentCore services. When you host your application in an AWS VPC, you can establish private connectivity to the AgentCore Runtime and AgentCore Gateway APIs by adding the AgentCore VPC endpoint to your VPC. This enables secure API calls, without internet traversal, through VPC PrivateLink inbound connections.

    日本語訳

    アプリケーションを AWS VPC 内でホストしている場合、AgentCore の VPC エンドポイントを VPC に追加することで、AgentCore Runtime と AgentCore Gateway API へのプライベート接続を確立できます。
    これにより、インターネットを経由せず、VPC PrivateLink のインバウンド接続 を通じて、安全に API 呼び出しを行えるようになります。

    とあるので Agentcore Runtime の VPC エンドポイントを作成します。

    1. 「VPC」→「エンドポイント」→「エンドポイントを作成」
      image.png

    2. タイプに「AWSのサービス」を選択、サービスに「bedrock-agentcore」を選択
      image.png
      image.png

    3. ネットワーク設定に AgentCore Runtime に指定したのと同じ VPC
      image.png

    4. サブネットにも AgentCoreRuntime に設定したものと同じ内容を入力(サブネットIDも選択)
      image.png

    5. セキュリティグループにも AgentCoreRuntime に設定したものと同じ内容を設定する
      ※ 指定するセキュリティグループには以下の設定が行われていることを確認
        ・インバウンドルールでこのセキュリティグループの全てのトラフィックを許可する
        ・アウトバウンドルールで全てのトラフィックを許可する

  4. コードを書き換え、デプロイ〜テスト
    コードはエージェントランタイムの「呼び出しコードを表示」から一部拝借
    image.png

    lambda
    import json
    import boto3
    
    def lambda_handler(event, context):
    
        client = boto3.client('bedrock-agentcore', region_name='ap-northeast-1')
        payload = json.dumps({"prompt": "Explain machine learning in simple terms"})
    
        response = client.invoke_agent_runtime(
            agentRuntimeArn='your agentcore runtime arn!!',
            runtimeSessionId='dfmeoagmreaklgmrkleafremoigrmtesogmtrskhmtkrlshmt',  # Must be 33+ chars
            payload=payload,
            qualifier="DEFAULT" # Optional
        )
        response_body = response['response'].read()
        response_data = json.loads(response_body)
        print("Agent Response:", response_data)
        return {
            'statusCode': 200,
            'body': json.dumps('Hello from Lambda!')
        }
    

    Lambda でコードをデプロイし、テストを実行する
    image.png

上記の「解決策だったもの」で AgentCoreRuntime を呼び出すと以下のエラーが投げられる。
エラーで存在しないとされている「DEFAULT」という名前の AgentCoreRuntime エンドポイントは確実に存在しているため、他のなんらかの障壁でリクエストが AgentCoreRuntime エンドポイントまで辿り着けず呼び出すことが出来なかった。

{
  "errorMessage": "An error occurred (ResourceNotFoundException) when calling the InvokeAgentRuntime operation: No endpoint or agent found with qualifier 'DEFAULT' for agent 'arn:aws:bedrock-agentcore:ap-northeast-1:accountid:runtime/light2agent-tN0ayfBq2Z/runtime-endpoint/DEFAULT'",
  "errorType": "ResourceNotFoundException",
  "requestId": "e557f6ee-70f2-48ab-9c00-a683a6695ab8",
  "stackTrace": [
    "  File \"/var/task/lambda_function.py\", line 9, in lambda_handler\n    response = client.invoke_agent_runtime(\n",
    "  File \"/var/lang/lib/python3.14/site-packages/botocore/client.py\", line 602, in _api_call\n    return self._make_api_call(operation_name, kwargs)\n",
    "  File \"/var/lang/lib/python3.14/site-packages/botocore/context.py\", line 123, in wrapper\n    return func(*args, **kwargs)\n",
    "  File \"/var/lang/lib/python3.14/site-packages/botocore/client.py\", line 1078, in _make_api_call\n    raise error_class(parsed_response, operation_name)\n"
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?