CDKでリソースグループを作ろうとしたら、以下のようなエラーがでました。
Resource handler returned message: "Model validation failed (#/Tags: expected type: JSONArray, found: JSON Object)"
解決まで時間かかってしまったので、ブログにします。
結論は、リソースグループにつくTagsを「addPropertyOverride」で上書きしました。
github aws/aws-cdk Issue #9040
Contents
リソースグループ作成でModel validation failedのエラーがでる
コードを交えて解説します。
- CDK: version 1.107.0
エラー内容
こんな感じで、リソースグループを定義してみます。
import * as cdk from '@aws-cdk/core';
import * as resourcegroups from '@aws-cdk/aws-resourcegroups';
export class ResourceGroupStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const group = new resourcegroups.CfnGroup(this, "resourcegroup", {
name: "hoge-group3",
})
}
}
「cdk deploy」してみると、以下のようなエラーがでてスタックの作成ができません。
どうも生成されるJSONがよくない様子です。
Resource handler returned message: "Model validation failed (#/Tags: expected type: JSONArray, found: JSONObject)" (RequestToken: c1e3f533-e3d4-3662-272d-98d7bf454cf3, HandlerErrorCode: InvalidRequest)
原因
原因はCDKで生成されるリソースグループのJSONのTag部分のTypeが正しくありませんでした。
失敗する場合と、理想形を見比べます。
まずは、失敗する場合です。上記のCDKで生成されたものです。
resourcegroup:
Type: AWS::ResourceGroups::Group
Properties:
Name: hoge-group
Tags:
Name: hoge-groupe #listになっていない
CloudFormationのドキュメントを見たところ、Tagsの部分のTypeは「List of Tag」でした。
失敗した場合の方とは、Typeが異なっていました。
理想形は以下です。
resourcegroup:
Type: AWS::ResourceGroups::Group
Properties:
Name: hoge-group
Tags:
- Key: Name #listでTag
- Value: hoge-groupe
解決策
CloudFormationを理想形の状態にするために、「addPropertyOverride」を使って「Tags」を書き換えました。
import * as cdk from '@aws-cdk/core';
import * as resourcegroups from '@aws-cdk/aws-resourcegroups';
export class ResourceGroupStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const group = new resourcegroups.CfnGroup(this, "resourcegroup", {
name: "hoge-group",
})
group.addPropertyOverride('Tags', [
{
Key: "Name",
Value: "hoge-group"
}
])
}
}
CloudFormationも意図した状態になり、スタックを作成できました。
resourcegroup:
Type: AWS::ResourceGroups::Group
Properties:
Name: hoge-group4
Tags:
- Key: Name
Value: hoge-group
まとめ
CDKでリソースグループを作成する際のエラーについてでした。
現時点では、対応していない様子だったのでaddPropertyOverrideでCloudFormationを書き換える方法を使いました。
(CDKでTagsのプロパティをしてしても同様)


