Bedrock AgentCoreのCDK L2 Constructを使って見ましたが、私の環境ではハマりポイントがありましたので、解決策を共有します。
AgentCoreのCDK L2 Constructの使い方は本題ではないので省略します。
私はこの記事を参考に実施しました。
【CDK】Amazon Bedrock AgentCore L2 ConstructでStrands Agentsをデプロイしてみた
https://dev.classmethod.jp/articles/cdk-amazon-bedrock-agentcore-l2-construct-strands-agents/
失敗1:何も気にしない場合
とりあえず何も気にせずcdk deployを試しました。
すると、コンテナイメージのビルドとプッシュは成功するのですが、AgentCoreへの登録時に失敗します。
failed: ToolkitError: The stack named *****Stack failed to deploy: UPDATE_ROLLBACK_COMPLETE: Resource handler returned message: "Invalid request provided: Architecture incompatible for uri '*****.dkr.ecr.us-east-1.amazonaws.com/cdk-hnb659fds-container-assets-*****-us-east-1:*****'. Supported architectures: [arm64]
CPUのアーキテクチャが違うと怒られました。AgentCore Runtimeで使用できるコンテナイメージは、CPUのアーキテクチャがarm64である必要があります。
参考:Agent contract requirements
Windows上のWSL2環境の場合、CPUのアーキテクチャがx86_64のため、そのままビルドするとAgentCore Runtimeで使用できません。
✅ コンテナイメージのビルド
✅ ECRへプッシュ
❌ AgentCoreに登録
失敗2:DockerfileのFROMに--platform=linux/arm64を追記
Dockerfileの先頭に、明示的にarm64向けのベースイメージを使用するように指定しました。
- FROM ghcr.io/astral-sh/uv:python3.13-trixie
+ FROM --platform=linux/arm64 ghcr.io/astral-sh/uv:python3.13-trixie
この場合は以下のエラーが出て、コンテナイメージのビルドに失敗するようになりました。
fail: docker build --tag cdkasset-***** . exited with error code 1: #0 building with "default" instance using docker driver
手動で試してみましたが、やはりエラーになります。
docker build -t test .
❌ コンテナイメージのビルド
❌ ECRへプッシュ
❌ AgentCoreに登録
これまでやってた方法を確認
私はこれまでCDKは使わず、手動でコンテナイメージを作成し、CLIでECRにプッシュしてました。その際のコマンドは以下のものです。
参考:Build and deploy ARM64 image
export ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
export AWS_REGION=$(aws configure get region)
export AGENT_NAME=mastra-hono
docker buildx create --use
aws ecr create-repository --repository-name ${AGENT_NAME} --region ${AWS_REGION}
aws ecr get-login-password --region ${AWS_REGION} | docker login --username AWS --password-stdin ${ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com
docker buildx build --platform linux/arm64 -t ${ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${AGENT_NAME}:latest --push .
CDKが内部で実行してるであろうコマンドとちょっと違うことがわかりました。
docker build --tag cdkasset-***** .
docker buildx create --use
docker buildx build --platform linux/arm64 -t ${ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${AGENT_NAME}:latest --push .
CDKの内部で呼ばれるコマンドを変えることはできないと思うので、docker buildを使ってarm64向けのコンテナイメージを作成する必要があることがわかりました。
解決策
こちらに解決策がありました。@ma2shita さん、ありがとうございます!
公式ドキュメントのMulti-platform buildsに、ホストと異なるCPUアーキテクチャのビルドをする方法がいくつか解説されています。
- QEMU
- Multiple native nodes
- Cross-compilation
1つ目の「QEMU」の方法を使うと、docker buildコマンドを使用してCPUアーキテクチャが異なるコンテナイメージを作成できることがわかりました。
2つ目の「Multiple native nodes」がdocker buildx buildを使用するものです。
ドキュメントではQEMUの方法よりもMultiple native nodesやCross-compilationのほうが、パフォーマンス的なメリットがあるとのことで推奨されています
解決方法としては、CDK Deployを行う前に以下のコマンドを実行し、QEMUのバイナリをインストールします。
docker run --privileged --rm tonistiigi/binfmt --install all
Unable to find image 'tonistiigi/binfmt:latest' locally
latest: Pulling from tonistiigi/binfmt
f4700b809f99: Pull complete
2adec5d296ac: Pull complete
Digest: sha256:30cc9a4d03765acac9be2ed0afc23af1ad018aed2c28ea4be8c2eb9afe03fbd1
Status: Downloaded newer image for tonistiigi/binfmt:latest
installing: arm64 OK
installing: riscv64 OK
installing: loong64 OK
installing: mips64 OK
installing: arm OK
installing: s390x OK
installing: ppc64le OK
installing: mips64le OK
{
"supported": [
"linux/amd64",
"linux/amd64/v2",
"linux/amd64/v3",
"linux/arm64",
"linux/riscv64",
"linux/ppc64le",
"linux/s390x",
"linux/386",
"linux/mips64le",
"linux/mips64",
"linux/loong64",
"linux/arm/v7",
"linux/arm/v6"
],
"emulators": [
"WSLInterop-late",
"python3.12",
"qemu-aarch64",
"qemu-arm",
"qemu-loongarch64",
"qemu-mips64",
"qemu-mips64el",
"qemu-ppc64le",
"qemu-riscv64",
"qemu-s390x"
]
}
ホストOSやWSL2を再起動したあとには再度実行する必要があります
このコマンドを実行したあと、--platform=linux/arm64を追記したDockerfileがあれば自動的にarm64向けにビルドされます。
cdk deployでAgentCore Runtimeへの登録も成功します。
✅ コンテナイメージのビルド(arm64)
✅ ECRへプッシュ
✅ AgentCoreに登録
解決策2
Xで困ってるよとポストしたところ、deploy-time-buildを使うと、CodeBuildを使ってビルドできると教えてもらいました!(アキキーさん、ありがとうございます!)
AgentCoreでも使えてます!https://t.co/KHT4gUaiqI
— アキキー☕️ Akihisa Ikeda (@akikii__) December 26, 2025
教えていただいた @har1101 さんの投稿は、Goさんの投稿を参考にされていて、さらにGoさんに紹介したのはtmokmssさんで、tmokmssさんはdeploy-time-buildの作成ということがわかりました。
なんだかエモさを感じます。皆様ありがとうございます。
npm i deploy-time-buildをしたうえで、CDKのスタックをちょっと変えるだけです。
- const agentRuntimeArtifact = agentcore.AgentRuntimeArtifact.fromAsset(
- path.join(__dirname, "../agents/agent")
- );
+ const agentcoreRuntimeImage = new ContainerImageBuild(this, 'AgentWithGatewayImage', {
+ directory: './agents/agent',
+ platform: Platform.LINUX_ARM64,
+ });
const runtime = new agentcore.Runtime(this, "ClaudeAgentRuntime", {
runtimeName: "ClaudeAgent",
- agentRuntimeArtifact: agentRuntimeArtifact,
+ agentRuntimeArtifact: agentcore.AgentRuntimeArtifact.fromEcrRepository(
+ agentcoreRuntimeImage.repository,
+ agentcoreRuntimeImage.imageTag
+ ),
});
すばらしい