AWS CDK Creating RAM Resource Share with Python CfnResourceShare results in Template format error: JSON not well-formed
AWS CDK Creating RAM Resource Share with Python CfnResourceShare results in Template format error: JSON not well-formed
我们 运行 一个 CodePipline 将 python CDK 代码版本 1.91.0 合成到 Cloudformation 模板并执行它们。
目前我正在尝试设置一个 Transit Gateway 并与组织和一些帐户共享它。创建基本共享没有问题,但是一旦我添加了中转网关的 resource_arn(请注意,我出于测试目的静态地这样做),Cloudformation 模板验证失败,声称 合成了 Json 模板格式不正确。在最后} 我用纯 Json 验证器、云形成构建器和 CLI aws cloudformation 验证器验证了完整的 json 模板,它绝对没问题。
所以我可能 运行 陷入边缘情况,或者对 Transit Gateway Arn 做一些根本性的错误。
from aws_cdk import (
aws_ram as ram,
)
ram.CfnResourceShare(
self,
id="TransitGWRessourceShare",
name="TransitGWRessourceShare",
allow_external_principals=False,
principals=[
"arn:aws:organizations::1234567890:ou/o-123456asdf/ou-123-asbasdf",
"1234567890",
],
resource_arns=[
"arn:aws:ec2:eu-central-1:1234567890:transit-gateway/tgw-XXXX",
],
)
经过大量尝试后,我发现资源 arn 导致了问题,并且使用合成 json 模板的猫,我能够揭示一些 mysterious点··在合成的同时加
Codepipline 步骤的 Cat 输出
"TransitGW": {
"Type": "AWS::EC2::TransitGateway",
"Properties": {
"AmazonSideAsn": XXXX,
"AutoAcceptSharedAttachments": "enable",
"DefaultRouteTableAssociation": "disable",
"DefaultRouteTablePropagation": "disable",
"DnsSupport": "enable",
"MulticastSupport": "disable",
],
"VpnEcmpSupport": "enable"
},
},
"TransitGWRessourceShare": {
"Type": "AWS::RAM::ResourceShare",
"Properties": {
"Name": "TransitGWRessourceShare",
"AllowExternalPrincipals": false,
"Principals": [
"arn:aws:organizations::123456789:ou/o-xxxx/ou-xxxx-xxxx",
"123456789"
],
"ResourceArns": [
"arn:aws:ec2:eu-central-1:··1234567890:transit-gateway/tgw-XXXX"
]
},
"Metadata": {
"aws:cdk:path": "automation-cicd/dev/InfraBase/TransitGWRessourceShare"
}
},
感谢任何帮助
因为它可能会在将来帮助某人 - 我会自己出去 ;)
我发现由于 arn 的副本在中转网关 arn 的行中有一些零宽度 space 字符。
https://en.wikipedia.org/wiki/Zero-width_space
在很多编辑器中它是不可见的之前我从未遇到过它,我能够在 vi 中看到它。
"arn:aws:ec2:eu-central-1:<200b><200b>1234567890:transit-gateway/tgw-XXXX"
生成合成模板
"arn:aws:ec2:eu-central-1:··1234567890:transit-gateway/tgw-XXXX"
我们 运行 一个 CodePipline 将 python CDK 代码版本 1.91.0 合成到 Cloudformation 模板并执行它们。
目前我正在尝试设置一个 Transit Gateway 并与组织和一些帐户共享它。创建基本共享没有问题,但是一旦我添加了中转网关的 resource_arn(请注意,我出于测试目的静态地这样做),Cloudformation 模板验证失败,声称 合成了 Json 模板格式不正确。在最后} 我用纯 Json 验证器、云形成构建器和 CLI aws cloudformation 验证器验证了完整的 json 模板,它绝对没问题。
所以我可能 运行 陷入边缘情况,或者对 Transit Gateway Arn 做一些根本性的错误。
from aws_cdk import (
aws_ram as ram,
)
ram.CfnResourceShare(
self,
id="TransitGWRessourceShare",
name="TransitGWRessourceShare",
allow_external_principals=False,
principals=[
"arn:aws:organizations::1234567890:ou/o-123456asdf/ou-123-asbasdf",
"1234567890",
],
resource_arns=[
"arn:aws:ec2:eu-central-1:1234567890:transit-gateway/tgw-XXXX",
],
)
经过大量尝试后,我发现资源 arn 导致了问题,并且使用合成 json 模板的猫,我能够揭示一些 mysterious点··在合成的同时加
Codepipline 步骤的 Cat 输出
"TransitGW": {
"Type": "AWS::EC2::TransitGateway",
"Properties": {
"AmazonSideAsn": XXXX,
"AutoAcceptSharedAttachments": "enable",
"DefaultRouteTableAssociation": "disable",
"DefaultRouteTablePropagation": "disable",
"DnsSupport": "enable",
"MulticastSupport": "disable",
],
"VpnEcmpSupport": "enable"
},
},
"TransitGWRessourceShare": {
"Type": "AWS::RAM::ResourceShare",
"Properties": {
"Name": "TransitGWRessourceShare",
"AllowExternalPrincipals": false,
"Principals": [
"arn:aws:organizations::123456789:ou/o-xxxx/ou-xxxx-xxxx",
"123456789"
],
"ResourceArns": [
"arn:aws:ec2:eu-central-1:··1234567890:transit-gateway/tgw-XXXX"
]
},
"Metadata": {
"aws:cdk:path": "automation-cicd/dev/InfraBase/TransitGWRessourceShare"
}
},
感谢任何帮助
因为它可能会在将来帮助某人 - 我会自己出去 ;)
我发现由于 arn 的副本在中转网关 arn 的行中有一些零宽度 space 字符。
https://en.wikipedia.org/wiki/Zero-width_space
在很多编辑器中它是不可见的之前我从未遇到过它,我能够在 vi 中看到它。
"arn:aws:ec2:eu-central-1:<200b><200b>1234567890:transit-gateway/tgw-XXXX"
生成合成模板
"arn:aws:ec2:eu-central-1:··1234567890:transit-gateway/tgw-XXXX"