
Kiro が Kimi K3 をサポート、Claude、GPT のモデルと成果物を比較してみた
はじめに
2026年10月15日、Kiro で Kimi K3 が experimental として利用可能になりました。
Kimi K3 は Moonshot AI のオープンウェイトモデルで、コンテキストウィンドウは 1M トークンです。この記事では、5モデルに同じ2つの依頼を出して回答を並べました。比べたのは Kimi K3、Claude Opus 5.5、Claude Sonnet 5.5、GPT-5.6 Terra、GPT-5.6 Luna です。依頼は、CloudFormation テンプレートの脆弱性指摘と、ウェブ三層テンプレートからの draw.io 構成図の作成です。
使う前に確認すること
Kimi K3 の対象プランは Pro、Pro+、Pro Max、Power です。Free tier では、モデル選択に表示されません。Enterprise は、管理者がモデルアクセス管理を有効にしてKimi K3 を承認済みリストに追加すると選べます。選べるのは US geography のユーザーのみです。ただし experimental のため、リクエストは US 内に限らず、世界中の商用 AWS リージョンで処理され得ます。
Kimi K3 は Kiro Excluded Models に名指しで含まれます。experimental、pre-release、preview、beta と指定されたモデルも同じ扱いです。Kiro Excluded Models には、AWS Service Terms の Section 50.10 の出力補償は適用されません。今回比べる Opus 5.5、Terra、Luna も、kiro-cli chat --list-models では Experimental preview と表示されます。
claude-opus-5.5 2.00x credits Experimental preview of Claude Opus 5.5 model with 1M context window
claude-sonnet-5.5 1.30x credits Claude Sonnet 5.5 model with 1M context window
...
gpt-5.6-terra 2.20x credits Experimental preview of OpenAI GPT 5.6 Terra with 1M context window
gpt-5.6-luna 0.60x credits Experimental preview of OpenAI GPT 5.6 Luna with 1M context window
...
kimi-k3 2.40x credits Experimental preview of Kimi K3. Kimi K3 is a Kiro Excluded Model. For more info, see documentation.
検証の条件
実行した kiro-cli のバージョンは、脆弱性指摘の Kimi K3、Opus 5.5、Sonnet 5.5 が 2.31.0、それ以外の実行がすべて 2.32.0 です。いずれもツールを1つも信頼しない設定にして、空のディレクトリから実行しました。同じ依頼を5モデルに1回ずつ出しました。以降の値はすべてこの1回のものです。依頼文は prompt.txt に保存しました。モデルごとに変えたのは --model と、Opus 5.5 だけに付けた --effort medium です。筆者の環境では設定で Opus 5.5 の effort が high になるため、モデル自体の既定である medium を明示しました。Kimi K3、Sonnet 5.5、Terra、Luna は --effort を指定しておらず、実行時の effort は出力に出ませんでした。
kiro-cli chat --model kimi-k3 --trust-tools= --output-format stream-json "$(cat prompt.txt)"
kiro-cli chat --model claude-opus-5.5 --effort medium --trust-tools= --output-format stream-json "$(cat prompt.txt)"
kiro-cli chat --model claude-sonnet-5.5 --trust-tools= --output-format stream-json "$(cat prompt.txt)"
kiro-cli chat --model gpt-5.6-terra --trust-tools= --output-format stream-json "$(cat prompt.txt)"
kiro-cli chat --model gpt-5.6-luna --trust-tools= --output-format stream-json "$(cat prompt.txt)"
構成図の依頼も同じコマンドで、prompt.txt の中身だけを替えました。構成図の依頼は、5モデル分を並列に実行しました。消費クレジット(meteringUsage)と所要時間(turnDurationMs)は、stream-json の最後の metadata イベントから取りました。
CloudFormation テンプレートの脆弱性を指摘させる
入力は、セキュリティグループの全開放、IMDSv1、暗号化なしの EBS、パブリック IP、未使用リソースなどを仕込んだ自作のダミーテンプレートです。依頼文は「このテンプレートのセキュリティ上の問題を、リソースとプロパティ名を示して指摘して。修正案も。」で、この1行のあとにテンプレート全文を続けました。
入力テンプレート(148 行)
問題を意図的に仕込んだ検証用のテンプレートです。デプロイしないでください。
AWSTemplateFormatVersion: '2010-09-09'
Description: Sample EC2 stack with security group, EBS volume, ENI, EIP and launch template
Parameters:
VpcId:
Type: AWS::EC2::VPC::Id
SubnetId:
Type: AWS::EC2::Subnet::Id
LatestAmiId:
Type: AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>
Default: /aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64
Resources:
Ec2SsmRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service: ec2.amazonaws.com
Action: sts:AssumeRole
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
Ec2InstanceProfile:
Type: AWS::IAM::InstanceProfile
Properties:
Roles:
- !Ref Ec2SsmRole
AppSG:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Security group for the application
VpcId: !Ref VpcId
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: 3389
ToPort: 3389
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIpv6: '::/0'
- IpProtocol: tcp
FromPort: 3389
ToPort: 3389
CidrIpv6: '::/0'
- IpProtocol: tcp
FromPort: 8080
ToPort: 8080
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: 3306
ToPort: 3306
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: 5432
ToPort: 5432
CidrIp: 0.0.0.0/0
AuxSG:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Security group for auxiliary use
VpcId: !Ref VpcId
AppInstance:
Type: AWS::EC2::Instance
Properties:
InstanceType: t3.micro
ImageId: !Ref LatestAmiId
IamInstanceProfile: !Ref Ec2InstanceProfile
MetadataOptions:
HttpTokens: optional
HttpEndpoint: enabled
NetworkInterfaces:
- DeviceIndex: 0
SubnetId: !Ref SubnetId
AssociatePublicIpAddress: true
GroupSet:
- !Ref AppSG
DataVolume:
Type: AWS::EC2::Volume
Properties:
AvailabilityZone: !GetAtt AppInstance.AvailabilityZone
Size: 1
Encrypted: false
VolumeAttachment:
Type: AWS::EC2::VolumeAttachment
Properties:
Device: /dev/xvdf
InstanceId: !Ref AppInstance
VolumeId: !Ref DataVolume
ExtraENI:
Type: AWS::EC2::NetworkInterface
Properties:
SubnetId: !Ref SubnetId
GroupSet:
- !Ref AppSG
SourceDestCheck: false
ENIAttachment:
Type: AWS::EC2::NetworkInterfaceAttachment
Properties:
DeviceIndex: 1
InstanceId: !Ref AppInstance
NetworkInterfaceId: !Ref ExtraENI
SpareEIP:
Type: AWS::EC2::EIP
Properties:
Domain: vpc
AppLaunchTemplate:
Type: AWS::EC2::LaunchTemplate
Properties:
LaunchTemplateData:
InstanceType: t3.micro
ImageId: !Ref LatestAmiId
MetadataOptions:
HttpTokens: optional
HttpEndpoint: enabled
NetworkInterfaces:
- DeviceIndex: 0
AssociatePublicIpAddress: true
Groups:
- !Ref AppSG
BlockDeviceMappings:
- DeviceName: /dev/xvda
Ebs:
VolumeSize: 8
Encrypted: false
Outputs:
InstanceId:
Value: !Ref AppInstance
SecurityGroupId:
Value: !Ref AppSG
指摘の件数
正解表は、このテンプレートに当てはまる Security Hub の EC2 コントロール 22 件を基準に、リソースとプロパティの組を1件として数え直した21件です。1件が複数のコントロールに当たることも、1つのコントロールが複数の件にまたがることもあるため、件数はコントロール数と一致しません。
正解表 21 件
| # | リソース | 問題 | 対応コントロール |
|---|---|---|---|
| 1 | AppSG | SecurityGroupIngress 22/tcp が CidrIp: 0.0.0.0/0 | EC2.13, EC2.18, EC2.19, EC2.53 |
| 2 | AppSG | 3389/tcp が CidrIp: 0.0.0.0/0 | EC2.14, EC2.18, EC2.19, EC2.53 |
| 3 | AppSG | 22/tcp と 3389/tcp が CidrIpv6: ::/0 | EC2.13, EC2.14, EC2.18, EC2.19, EC2.54 |
| 4 | AppSG | 8080/tcp が 0.0.0.0/0 | EC2.18, EC2.19 |
| 5 | AppSG | 3306/tcp と 5432/tcp が 0.0.0.0/0 | EC2.18, EC2.19 |
| 6 | AppSG | タグなし | EC2.43 |
| 7 | AuxSG | どこにもアタッチされていない | EC2.22 |
| 8 | AppInstance | MetadataOptions.HttpTokens: optional | EC2.8 |
| 9 | AppInstance | NetworkInterfaces[0].AssociatePublicIpAddress: true | EC2.9 |
| 10 | AppInstance | タグなし | EC2.38 |
| 11 | DataVolume | Encrypted: false | EC2.3 |
| 12 | DataVolume | タグなし | EC2.45 |
| 13 | ExtraENI(ENIAttachment) | SourceDestCheck: false | EC2.180 |
| 14 | AppInstance / ENIAttachment | ENI を2枚目(DeviceIndex: 1)として追加している | EC2.17 |
| 15 | ExtraENI | タグなし | EC2.35 |
| 16 | SpareEIP | インスタンスにも ENI にも関連付けられていない(EIPAssociation なし) | EC2.12 |
| 17 | SpareEIP | タグなし | EC2.37 |
| 18 | AppLaunchTemplate | MetadataOptions.HttpTokens: optional | EC2.170 |
| 19 | AppLaunchTemplate | NetworkInterfaces[0].AssociatePublicIpAddress: true | EC2.25 |
| 20 | AppLaunchTemplate | BlockDeviceMappings[0].Ebs.Encrypted: false | EC2.181 |
| 21 | AppLaunchTemplate | タグなし | EC2.175 |
採点では最終回答の本文だけを見ました。
| モデル | 正解表 21 件のうち指摘した件数 | 正解表にない正しい指摘 |
|---|---|---|
| Kimi K3 | 13 | 2 |
| Opus 5.5 | 14 | 2 |
| Sonnet 5.5 | 14 | 3 |
| GPT-5.6 Terra | 13 | 1 |
| GPT-5.6 Luna | 13 | 1 |
5モデルすべてが指摘した13件は、次のとおりです。括弧内は正解表の番号です。
- AppSG:22、3389、22 と 3389 の IPv6(::/0)、8080、3306 と 5432 の全開放(#1〜#5)
- AppInstance と AppLaunchTemplate:IMDSv1 とパブリック IP(#8、#9、#18、#19)
- DataVolume と AppLaunchTemplate:暗号化なし(#11、#20)
- ExtraENI:SourceDestCheck(#13)
- SpareEIP:未関連付け(#16)
Kimi K3、Terra、Luna の件数が1件少ないのは、Opus 5.5 と Sonnet 5.5 が挙げた未使用の AuxSG を指摘しなかったためです。
5モデルすべてが指摘しなかったのは7件でした。AppSG・AppInstance・DataVolume・ExtraENI・SpareEIP・AppLaunchTemplate の6件のタグなしと、ENI を2枚目として追加している構成です。どの最終回答にも、タグが付いていないことへの指摘は出ていません。共通して指摘した13件と共通して落とした7件で 21 件中 20 件を占め、5モデルの差は AuxSG の1件だけでした。
指摘の中身
正解表にない正しい指摘のうち、アウトバウンド未指定(SecurityGroupEgress がなく全許可になる)は5モデルに共通でした。Opus 5.5 と Sonnet 5.5 はこれに加えて、AppInstance の BlockDeviceMappings が未指定の点を挙げました。この場合、ルートボリュームの暗号化はアカウント設定に依存します。
AppLaunchTemplate がどのリソースからも参照されていない点は、5モデルのうち Kimi K3 だけが挙げました。実際、入力テンプレートで AppLaunchTemplate が出てくるのは定義の1か所だけです。Sonnet 5.5 だけが挙げたのは、LatestAmiId が SSM パラメータ型のため、スタックを更新するたびに Parameter Store の最新値へ解決される点です。
Kimi K3 と Opus 5.5 の回答には、ドキュメントと食い違う記述が1か所ずつありました。Kimi K3 は補足で次のように書いています。
- `Ec2SsmRole` / `ManagedPolicyArns`: `AmazonSSMManagedInstanceCore` は標準的な選択ですが、S3 の `ssm:GetObject` 系が広めなので、厳密な最小権限が必要なら独自ポリシーに置き換える検討余地があります。
aws iam get-policy-version で取得した AmazonSSMManagedInstanceCore(既定バージョン v2)に含まれるのは、ssm:、ssmmessages:、ec2messages: で始まるアクションだけです。S3 のアクションは含まれません。ssm:GetObject というアクションもそもそも存在しません。
Opus 5.5 は、自身の回答にある指摘表の13行目(AppLaunchTemplate の暗号化なし)に次のように書いています。
ルートボリュームが暗号化されません。アカウントのデフォルト暗号化が有効でも、`false` を明示すると効かなくなるので要注意です。
EBS のドキュメントによると、暗号化のデフォルト設定はリージョン単位です。リージョンでデフォルト暗号化を有効にすると、そのリージョン内の個々のボリュームやスナップショットでは無効にできません。
Sonnet 5.5、Terra、Luna の回答では、同種の食い違いは見つかりませんでした。
修正案の形は5モデルで異なります。Opus 5.5 は15行の指摘表と、修正版テンプレート全文を出しました。許可元の SG ID や KMS キーはパラメータとして追加されていて、テンプレート単体で参照先がそろっています。Sonnet 5.5 は重大度別の指摘と、修正用の YAML を1ブロックで出しました。Terra は13行の指摘表と、修正の骨子の YAML を1ブロックで出しました。Luna は20行の指摘表と、項目別の YAML を出しました。Kimi K3 は項目ごとの説明に YAML の抜粋を添える形です。
Kimi K3 の AppSG の抜粋には、AlbSG を参照する次の行があります。
SourceSecurityGroupId: !Ref AlbSG
入力テンプレートにも抜粋にも AlbSG は定義されていません。Terra と Luna の修正案にも、定義のない AlbSG を参照する同じ行があります。Kimi K3 と Terra はコメントで、Luna は「AlbSG は例示です」という注記で、ALB を置く場合の例だと添えています。
draw.io の構成図を作らせる
入力は、2 AZ の VPC、ALB、EC2 2台、RDS(Multi-AZ)、IGW、NAT ゲートウェイからなるウェブ三層の自作ダミーテンプレートです。ALB は2つの public サブネットに配置しました。依頼文の全文は、「描画結果」の節の折りたたみに載せました。要点は、draw.io 形式の XML をコードブロック1つで答えること、AWS アーキテクチャアイコンを使うこと、VPC とサブネットを枠で表すこと、リソース間を線でつなぐことです。さらに、描くのはサービス名のラベルを付けたアイコン、線、エリア(枠)だけにして、コメント、凡例、注記、線の上のラベルは入れないよう指定しました。見た目や配置の細部は任せました。
入力テンプレート
AWSTemplateFormatVersion: '2010-09-09'
Description: Three-tier web application (ALB, EC2, RDS) in a new VPC across two AZs
Parameters:
LatestAmiId:
Type: AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>
Default: /aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64
InstanceType:
Type: String
Default: t3.micro
DbInstanceClass:
Type: String
Default: db.t3.micro
Resources:
Vpc:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
EnableDnsSupport: true
EnableDnsHostnames: true
Tags:
- Key: Name
Value: web3-vpc
Igw:
Type: AWS::EC2::InternetGateway
IgwAttachment:
Type: AWS::EC2::VPCGatewayAttachment
Properties:
VpcId: !Ref Vpc
InternetGatewayId: !Ref Igw
PublicSubnetA:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref Vpc
CidrBlock: 10.0.0.0/24
AvailabilityZone: ap-northeast-1a
PublicSubnetC:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref Vpc
CidrBlock: 10.0.1.0/24
AvailabilityZone: ap-northeast-1c
AppSubnetA:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref Vpc
CidrBlock: 10.0.10.0/24
AvailabilityZone: ap-northeast-1a
AppSubnetC:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref Vpc
CidrBlock: 10.0.11.0/24
AvailabilityZone: ap-northeast-1c
DbSubnetA:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref Vpc
CidrBlock: 10.0.20.0/24
AvailabilityZone: ap-northeast-1a
DbSubnetC:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref Vpc
CidrBlock: 10.0.21.0/24
AvailabilityZone: ap-northeast-1c
PublicRouteTable:
Type: AWS::EC2::RouteTable
Properties:
VpcId: !Ref Vpc
PublicDefaultRoute:
Type: AWS::EC2::Route
DependsOn: IgwAttachment
Properties:
RouteTableId: !Ref PublicRouteTable
DestinationCidrBlock: 0.0.0.0/0
GatewayId: !Ref Igw
PublicSubnetAAssoc:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref PublicSubnetA
RouteTableId: !Ref PublicRouteTable
PublicSubnetCAssoc:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref PublicSubnetC
RouteTableId: !Ref PublicRouteTable
NatEip:
Type: AWS::EC2::EIP
Properties:
Domain: vpc
NatGateway:
Type: AWS::EC2::NatGateway
Properties:
AllocationId: !GetAtt NatEip.AllocationId
SubnetId: !Ref PublicSubnetA
AppRouteTable:
Type: AWS::EC2::RouteTable
Properties:
VpcId: !Ref Vpc
AppDefaultRoute:
Type: AWS::EC2::Route
Properties:
RouteTableId: !Ref AppRouteTable
DestinationCidrBlock: 0.0.0.0/0
NatGatewayId: !Ref NatGateway
AppSubnetAAssoc:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref AppSubnetA
RouteTableId: !Ref AppRouteTable
AppSubnetCAssoc:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref AppSubnetC
RouteTableId: !Ref AppRouteTable
DbRouteTable:
Type: AWS::EC2::RouteTable
Properties:
VpcId: !Ref Vpc
DbSubnetAAssoc:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref DbSubnetA
RouteTableId: !Ref DbRouteTable
DbSubnetCAssoc:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref DbSubnetC
RouteTableId: !Ref DbRouteTable
AlbSg:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: ALB
VpcId: !Ref Vpc
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: 0.0.0.0/0
AppSg:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: App servers
VpcId: !Ref Vpc
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 8080
ToPort: 8080
SourceSecurityGroupId: !Ref AlbSg
DbSg:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Database
VpcId: !Ref Vpc
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 3306
ToPort: 3306
SourceSecurityGroupId: !Ref AppSg
Alb:
Type: AWS::ElasticLoadBalancingV2::LoadBalancer
Properties:
Type: application
Scheme: internet-facing
Subnets:
- !Ref PublicSubnetA
- !Ref PublicSubnetC
SecurityGroups:
- !Ref AlbSg
AppTargetGroup:
Type: AWS::ElasticLoadBalancingV2::TargetGroup
Properties:
VpcId: !Ref Vpc
Protocol: HTTP
Port: 8080
TargetType: instance
HealthCheckPath: /health
Targets:
- Id: !Ref AppInstanceA
- Id: !Ref AppInstanceC
HttpListener:
Type: AWS::ElasticLoadBalancingV2::Listener
Properties:
LoadBalancerArn: !Ref Alb
Protocol: HTTP
Port: 80
DefaultActions:
- Type: forward
TargetGroupArn: !Ref AppTargetGroup
AppInstanceA:
Type: AWS::EC2::Instance
Properties:
ImageId: !Ref LatestAmiId
InstanceType: !Ref InstanceType
SubnetId: !Ref AppSubnetA
SecurityGroupIds:
- !Ref AppSg
AppInstanceC:
Type: AWS::EC2::Instance
Properties:
ImageId: !Ref LatestAmiId
InstanceType: !Ref InstanceType
SubnetId: !Ref AppSubnetC
SecurityGroupIds:
- !Ref AppSg
DbSubnetGroup:
Type: AWS::RDS::DBSubnetGroup
Properties:
DBSubnetGroupDescription: Database subnets
SubnetIds:
- !Ref DbSubnetA
- !Ref DbSubnetC
Database:
Type: AWS::RDS::DBInstance
Properties:
Engine: mysql
DBInstanceClass: !Ref DbInstanceClass
AllocatedStorage: 20
MultiAZ: true
PubliclyAccessible: false
DBSubnetGroupName: !Ref DbSubnetGroup
VPCSecurityGroups:
- !Ref DbSg
MasterUsername: admin
ManageMasterUserPassword: true
機械採点
検査は19項目で、主な項目は次のとおりです。
- XML として読める
- id が一意で、線の始点と終点が存在する
- サブネットが VPC の枠の中にあり、EC2・RDS・NAT が正しいサブネットの中にある
- IGW が VPC の枠の外縁にまたがるか、枠の外にある
- ALB が public サブネットの枠の中か、2つの public サブネットの間にある
- サブネットの枠どうしや、アイコンなどの図形どうしが重ならず、子が親の枠からはみ出さない
線の経路は検査に含まれません。
| モデル | 合格した項目 | 不合格の項目 |
|---|---|---|
| Kimi K3 | 19 / 19 | なし |
| Opus 5.5 | 19 / 19 | なし |
| Sonnet 5.5 | 18 / 19 | IGW が VPC の枠の内側に収まっている |
| GPT-5.6 Terra | 18 / 19 | RDS が DB サブネットの枠の中にない(RDS を1つだけ、2つの DB サブネットの間に置く) |
| GPT-5.6 Luna | 16 / 19 | RDS が DB サブネットの枠の中にない、IGW が VPC の枠の内側に収まっている、図形の重なりが1件 |
Opus 5.5 以外の4モデルは、サブネット6枚とも、親をたどると VPC に行き着きます。Opus 5.5 の XML は全図形が絶対座標で、サブネット6枚はいずれも VPC の子要素になっていません。検査は座標で内外を判定するため、この点で不合格にはなりません。
描画結果
構成図の依頼文です。この依頼文のあとに、入力テンプレートの全文を続けました。
構成図の依頼文
次の CloudFormation テンプレートの構成図を、draw.io(diagrams.net)で開ける形式で作ってください。ツールは使えません。
要件:
- 回答は、`.drawio` ファイルの中身全体(`<mxfile>` から `</mxfile>` まで、圧縮なしの XML)を、```xml のコードブロック 1 つだけで出してください。ブロックは回答の中で 1 つにしてください
- AWS のアーキテクチャアイコン(draw.io の AWS 図形)を使う
- VPC とサブネットは枠(グループ)で表し、リソースを置いた場所が分かるようにする
- リソース間の関係や通信の流れを、線(矢印)でつなぐ
- アイコンと枠には、リソースの名前が分かるラベルを付ける
- 描くのは、サービス名のラベルを付けたアイコン、線、エリア(枠)だけにする。XML のコメント、凡例、注記や説明のテキスト図形、線の上のラベルは入れない
構成図の見た目や配置の細部は任せます。
draw.io デスクトップ版のヘッドレス描画で出力しました。
- Kimi K3

- Opus 5.5

- Sonnet 5.5

- GPT-5.6 Terra

- GPT-5.6 Luna

筆者の目視では次の違いがありました。
| モデル | AZ の枠 | ALB の位置 | RDS の Multi-AZ | 線と文字の重なり、配置 |
|---|---|---|---|---|
| Kimi K3 | あり(AZ の枠の中にサブネット3枚ずつ) | PublicSubnetA の中だけ | Primary と Standby の2つ。Standby に線がない | NAT から IGW への線が VPC の枠をぐるりと回る |
| Opus 5.5 | あり(破線) | 2つの public サブネットの間 | Primary と Standby の2つを、点線の両矢印でつなぐ | 少ない(NAT への破線が AppSubnetC の見出しに重なる) |
| Sonnet 5.5 | なし(AZ はサブネット名に書く) | 2つの public サブネットの間 | Primary と Standby の2つを、点線の両矢印でつなぐ | 少ない(NAT への破線が AppSubnetC の見出しに重なる) |
| GPT-5.6 Terra | なし(AZ はサブネット名に書く) | 2つの public サブネットの間 | 1つだけ。2つの DB サブネットの間に置く | サブネット名が縦書きで、ラベルの2行が重なる。長い線が複数のサブネットを横切る |
| GPT-5.6 Luna | なし | 2つの public サブネットの間 | 1つだけ。DbSubnetGroup の枠の中で、2つの DB サブネットの間に置く | 破線が多数の図形とラベルを横切る。ルートテーブルを VPC の枠の中の下端に置く |
Luna の EC2 アイコンは、アイコン名の指定が誤っていて、グリフのない橙の四角で描画されました。XML では EC2 に resIcon=mxgraph.aws4.ec2_instance が指定されていて、resIcon=mxgraph.aws4.ec2 に替えるとグリフが出ます。
クレジットと所要時間
倍率は表示値、クレジットは実測値です。
| モデル(倍率) | 脆弱性指摘 クレジット | 脆弱性指摘 所要時間 | 構成図 クレジット | 構成図 所要時間 |
|---|---|---|---|---|
| Kimi K3(2.40x) | 1.20 | 30 秒 | 6.12 | 231 秒 |
| Opus 5.5(2.00x) | 1.55 | 52 秒 | 2.96 | 98 秒 |
| Sonnet 5.5(1.30x) | 0.83 | 32 秒 | 2.82 | 122 秒 |
| GPT-5.6 Terra(2.20x) | 1.07 | 28 秒 | 1.73 | 43 秒 |
| GPT-5.6 Luna(0.60x) | 0.44 | 28 秒 | 0.76 | 53 秒 |
クレジットの多い順は、倍率の大きい順と一致しませんでした。構成図では Terra が Opus 5.5 と Sonnet 5.5 を下回り、脆弱性指摘では Kimi K3 と Terra が Opus 5.5 を下回りました。
まとめ
2026年9月の Amazon Bedrock での提供開始に続き、Kiro でも Kimi K3 が experimental として選べるようになりました。
Artificial Analysis の報告(2026年7月)では、Kimi K3 の総合性能は Opus 4.8 や GPT-5.5 と同程度で、Fable 5 や GPT-5.6 Sol には及ばないとされています。
今回の評価では、CloudFormation テンプレートの脆弱性指摘は5モデルの指摘がほぼ重なり、Kimi K3 だけが挙げた指摘もありました。
Claude や GPT が解けない課題の対応や、見落とした点を拾うセカンドオピニオン役として、Kimi K3 をお試しください。











