如何最好地从 AWS CDK 检索 AWS SSM 参数?

How best to retrieve AWS SSM parameters from the AWS CDK?

抱歉,如果这是重复的,我会有点盲目地浏览博客和文章,试图找到解决方案。

我正在尝试使用 AWS CDK 部署 Stack - 特别是在 S3 Bucket 上分层的 CloudFront Distribution。我想从证书管理器中检索证书,我还想更新 R53 中的托管区域。

我想将区域 ID 和证书 ARN 放入 SSM Parameter Store,并让我的 CDK 应用程序从那里提取正确的 ID/ARN,以免将其留在我的代码中。

我目前正在我的 Go 代码中提取这样的值:

certArn := awsssm.StringParameter_ValueFromLookup(stack, certArnSSM)
certificate := awscertificatemanager.Certificate_FromCertificateArn(stack, wrapName("certificate"), certArn)

其中certArnSSM是参数的路径。

然而,当我 运行 synth 我得到这个:

panic: "ARNs must start with \"arn:\" and have at least 6 components: dummy-value-for-/dev/placeholder/certificateArn"

从某些 reading 看来,这是预料之中的。但是,我不确定 'best practice' 解决它的方法。我不太清楚如何使用 Lazy 来解决这个问题 - 我是否需要创建一个 type 并实施 Produce() 方法?

我通过在我的代码中将证书的 UUID 设为变量,然后手动构建 ARN 来解决这个问题。不过感觉解决问题的方法不对。

createdArn := jsii.String(fmt.Sprintf("arn:aws:acm:us-east-1:%s:certificate/%s", *sprops.Env.Account, certUuid))
certificate := awscertificatemanager.Certificate_FromCertificateArn(stack, wrapName("certificate"), createdArn)

我无法重现您的错误。以下合成和部署没有错误,从 ssm 中正确检索 certArn 参数作为有效的证书 arn 查找输入:

func NewCertLookupStack(scope constructs.Construct, id string, props *awscdk.StackProps) awscdk.Stack {
    stack := awscdk.NewStack(scope, &id, &props)

    certArn := awsssm.StringParameter_ValueFromLookup(stack, jsii.String("/dummy/certarn"))
    certificate := awscertificatemanager.Certificate_FromCertificateArn(stack, jsii.String("Certificate"), certArn)

    awscdk.NewCfnOutput(stack, jsii.String("ArnOutput"), &awscdk.CfnOutputProps{
        Value: certificate.CertificateArn(), // demonstrate it works: the correct cert arn storeed as a stack output
    })

    return stack
}