【问题标题】:How best to retrieve AWS SSM parameters from the AWS CDK?如何最好地从 AWS CDK 检索 AWS SSM 参数?
【发布时间】:2022-01-20 00:49:55
【问题描述】:

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

我正在尝试使用 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"

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

【问题讨论】:

  • cdk.context.json中缓存的certArn参数值是多少?
  • 当它失败时,它不会走那么远 - 不会创建 cdk.context.json

标签: amazon-web-services go aws-cdk aws-ssm


【解决方案1】:

我无法复制您的错误。以下合成和部署没有错误,正确地从 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
}

【讨论】:

  • 是的 - 我还创建了一个简单的函数来测试它,并得到了相同的结果。这可能是因为我将值传递给 CloudFront 分配,并且在某些时候,虽然 Cert ARN 的值仍然是 dummy-value,但有一些验证失败。我不确定。如果有时间,我会在这个周末再看一次!
  • 我已重做所需的代码,但无法重现问题。谁知道发生了什么,前几天这让我发疯了大约一个小时......
【解决方案2】:

我通过将证书的 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-15
    • 2021-09-24
    • 1970-01-01
    • 2021-12-01
    • 2020-08-19
    • 2021-01-07
    • 1970-01-01
    • 2022-07-07
    相关资源
    最近更新 更多