如何在AWS CDK中获取ServiceCatalog产品的ProvisioningArtifactIds?
在AWS CDK中获取CloudFormation Product的ProvisioningArtifactId
问题描述
我在AWS CDK文档里找不到获取CloudFormation Product的ProvisioningArtifactIds(示例值:pa-4abcdjnxjj6ne)的方法。CloudFormation原生可以通过!GetAtt Product.ProvisioningArtifactIds返回该值,但CDK的高层API没有暴露对应的属性。我需要这个ID来完成同一堆栈内CloudFormation Product与CfnServiceActionAssociation的关联。
当前代码如下:
创建CloudFormation Product:
product = aws_servicecatalog.CloudFormationProduct(self, "Product", product_name="My Product", owner="Product Owner", product_versions=[servicecatalog.CloudFormationProductVersion( product_version_name="v1", cloud_formation_template=servicecatalog.CloudFormationTemplate.from_product_stack(S3BucketProduct(self, "S3BucketProduct")) )])
创建关联:
aws_servicecatalog.CfnServiceActionAssociation( self, "serviceId", product_id=product.product_id, provisioning_artifact_id="????", # 此处需填入获取到的ID service_action_id=myServiceAction.attr_id, )
解决方案
CDK的高层CloudFormationProduct封装了底层的CfnCloudFormationProduct资源,我们可以通过访问底层资源来获取ProvisioningArtifactIds:
- 从高层
CloudFormationProduct实例中获取对应的底层Cfn资源 - 使用
get_att方法获取ProvisioningArtifactIds属性,由于该属性返回的是列表,若只创建了一个产品版本,取第一个元素即可
修改后的关联代码示例:
# 获取底层CfnCloudFormationProduct资源 cfn_product = product.node.default_child as aws_servicecatalog.CfnCloudFormationProduct # 创建服务动作关联,提取第一个ProvisioningArtifactId aws_servicecatalog.CfnServiceActionAssociation( self, "serviceId", product_id=product.product_id, provisioning_artifact_id=cfn_product.get_att("ProvisioningArtifactIds").list_get(0), service_action_id=myServiceAction.attr_id, )
说明
node.default_child会返回当前构造对象对应的底层CloudFormation资源,这里就是CfnCloudFormationProductget_att("ProvisioningArtifactIds")对应CloudFormation中的!GetAtt操作,返回所有产品版本的Artifact ID列表list_get(0)用于提取列表中的第一个元素,适合仅创建单个产品版本的场景;若有多个版本,可根据版本名称或索引调整
内容的提问来源于stack exchange,提问作者GeoCom
相关产品推荐
相关产品推荐

