記事のザックリまとめ
- CDK を使った Bedrock エージェントの作成と、動作検証を行いました
- 作成したエージェントに質問して、動作を確認しました
- エージェントとアクショングループとして設定する Lambda を別リージョンに作成して動作検証を行いました
- 残念ながらエラーで実行できませんでした
- エージェントと Lambda は同一リージョンに作成する必要がありそうです
はじめに
Amazon Bedrock を使ったアプリ開発を進めていて、実現したい機能に対して Bedrock のエージェント機能が重要になるかも?となったため、できることの確認も含めてチーム内で検証しました。この記事で備忘録として残しておこうと思います。どなたかの参考になれば幸いです。
この記事の情報は、2025/07/07 の検証時点のものになります。
AWS の公式ドキュメントなど、最新の情報も一緒に参照ください。
今回の実装内容
全体構成
CDK によるリソース作成
Lambda
- ダミーのレスポンスを返す Lambda を作成します
- 検証用途のため、Lambda のアプリケーションコードはインラインで作成しています
Lambda を作成する CDK コード
import * as cdk from "aws-cdk-lib";
import { Construct } from "constructs";
import * as iam from "aws-cdk-lib/aws-iam";
import * as lambda from "aws-cdk-lib/aws-lambda";
export class LambdaStack extends cdk.Stack {
public readonly actionGroupLambda: lambda.Function;
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
this.actionGroupLambda = new lambda.Function(this, "ActionGroupLambda", {
functionName: "bedrock-agent-action-group-lambda",
runtime: lambda.Runtime.NODEJS_22_X,
handler: "index.handler",
code: lambda.Code.fromInline(`
exports.handler = async (event, context) => {
const actionGroup = event.actionGroup || '';
const functionName = event.function || 'get_weather';
const messageVersion = event.messageVersion || '1.0';
const data = {
"location": "Tokyo",
"temperature": "22°C",
"condition": "Sunny",
"humidity": "65%"
};
const responseBody = {
'TEXT': {
'body': JSON.stringify(data)
}
};
const actionResponse = {
'actionGroup': actionGroup,
'function': functionName,
'functionResponse': {
'responseBody': responseBody
}
};
return {
'response': actionResponse,
'messageVersion': messageVersion
};
};
`),
description: "Lambda function for Bedrock Agent ActionGroup",
});
this.actionGroupLambda.addPermission("BedrockInvokePermission", {
principal: new iam.ServicePrincipal("bedrock.amazonaws.com"),
action: "lambda:InvokeFunction",
sourceArn: `arn:aws:bedrock:${this.region}:${this.account}:agent/*`,
});
}
}
Bedrock エージェント
- 上記で作成した Lambda をアクショングループの関数として設定します
- エージェントへの指示として、特定の質問が来たらアクショングループを使って回答するように指定しておきます
Bedrock エージェントを作成する CDK コード
import * as cdk from "aws-cdk-lib";
import { Construct } from "constructs";
import * as iam from "aws-cdk-lib/aws-iam";
import * as bedrock from "aws-cdk-lib/aws-bedrock";
export interface BedrockTestStackProps extends cdk.StackProps {
lambdaFunctionArn: string;
}
export class BedrockTestStack extends cdk.Stack {
constructor(scope: Construct, id: string, props: BedrockTestStackProps) {
super(scope, id, props);
const bedrockAgentRole = new iam.Role(this, "BedrockAgentRole", {
assumedBy: new iam.ServicePrincipal("bedrock.amazonaws.com"),
description: "IAM role for Bedrock Agent",
managedPolicies: [iam.ManagedPolicy.fromAwsManagedPolicyName("AmazonBedrockFullAccess")],
});
const lambdaFunctionArn = props.lambdaFunctionArn;
const bedrockAgent = new bedrock.CfnAgent(this, "BedrockAgent", {
agentName: "claude-sonnet-agent",
description: "Bedrock agent using Claude 3.7 Sonnet model",
foundationModel: "us.anthropic.claude-3-7-sonnet-20250219-v1:0",
agentResourceRoleArn: bedrockAgentRole.roleArn,
instruction:
"ユーザーからの質問に対して、適切に回答してください。天気の質問の場合は Action group (test-actions) を使うことで、東京の現在の天気を知ることができます。",
idleSessionTtlInSeconds: 60,
autoPrepare: true,
actionGroups: [
{
actionGroupName: "test-actions",
description: "Action group with dummy Lambda functions",
actionGroupExecutor: {
lambda: lambdaFunctionArn,
},
functionSchema: {
functions: [
{
name: "get_weather",
description: "Get current weather information",
},
],
},
},
],
});
}
}
アクショングループとして設定する Lambda 関数について
- Bedrock エージェントからアクショングループに設定した Lambda を呼び出した際の、エージェントのリクエスト・Lambda からエージェントに返却するべきレスポンスは規定の形式があります
- ドキュメントページ:https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/agents-lambda.html
- Lambda からエージェントへのレスポンスは、上記で規定された構造になっていないと期待通り動作しないため、注意しましょう
作成したエージェントをテストしてみる
- 「東京の天気は?」と聞くと、アクショングループとして作成した Lambda 関数のダミーレスポンスをもとに、ユーザーに回答してくれます
さらに試したこと
-
業務での利用を考えて、追加で以下の検証も行ってみました
執筆時点では、マネージドコンソールからは設定できません。Lambda 関数を選択するドロップダウンメニューを開くと、エージェントを作成しているリージョンと同じリージョンに作成されている Lambda の一覧が表示されます。
実行してみると...!
- 実行時に、エラーになりました
まとめ
- この記事では CDK を使った Bedrock エージェントの作成と、動作検証を行いました
- また、エージェントとアクショングループとして設定する Lambda を別リージョンに作成して動作検証を行いました
- こちらはエラーで実行できずでした、今後のアップデートでのサポートに期待したいです...!