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

抱歉,如果这是重复的,我会对试图找到解决方案的博客和文章感到有点茫然。


我正在尝试使用 AWS CDK 来部署堆栈 - 特别是在 S3 存储桶上分层的 CloudFront 分布。我想从证书管理器中检索证书,并且我还想更新 R53 中的托管区域。


我想将区域 ID 和证书 ARN 放在 SSM 参数存储中,并让我的 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"

从一些阅读来看,这是意料之中的。但是,我不确定解决它的“最佳实践”方法。我不完全清楚如何使用Lazy来解决这个问题 - 我需要创建一个type并实现该Produce()方法吗?


神不在的星期二
浏览 78回答 2
2回答

慕容森

我无法复制您的错误。以下合成和部署没有错误,正确检索certArn参数ssm作为有效的证书 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}

梦里花落0921

我通过在我的代码中将证书的 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)
打开App,查看更多内容
随时随地看视频慕课网APP