访问 AWS 为部署的资源自动生成的 URL

Access AWS auto-generated URL for deployed resources

有没有办法在部署完成之前访问为已部署资源自动生成的 URL? (如数据库主机、lambda 函数 URL 等)

我可以在部署完成后访问它们,但有时我需要在构建堆栈时访问它们。 (例如,在其他资源中使用它们)。

处理这个用例的好的解决方案是什么?我正在考虑将它们从 CloudFormation 模板输出到 SSM 参数存储中,但我不确定这是否可行。

感谢任何建议或指导!

如果 "use them in other resources" 表示另一个无服务器服务或另一个 CloudFormation 堆栈,则使用 CloudFormation Outputs 导出您感兴趣的值。然后使用 CloudFormation ImportValue 函数在另一个堆栈中引用该值。

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/outputs-section-structure.html and https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-importvalue.html

在无服务器框架中,您可以使用 https://serverless.com/framework/docs/providers/aws/guide/variables/#reference-cloudformation-outputs

访问 CloudFormation 输出值

如果您想在同一堆栈中使用自动生成的值,则只需使用 CloudFormation GetAtt 函数即可。参见 https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-getatt.html

例如,我有一个 CloudFormation 堆栈,它为 ElasticSearch 集群输出 URL。

Resources:
    Search:
        Type: AWS::Elasticsearch::Domain
        Properties: <redacted>

Outputs:
    SearchUrl:
        Value: !GetAtt Search.DomainEndpoint
    Export:
        Name: myapp:search-url

假设 CloudFormation 堆栈名称是 "mystack",那么在我的无服务器服务中,我可以通过以下方式引用 SearchUrl:

custom:
    searchUrl: ${cf:mystack.SearchUrl}     

补充一下 bwinant 的回答,如果您想引用位于另一个区域的另一个堆栈中的变量,${cf:<stack name>.<output name>} 将不起作用。有一个名为 serverless-plugin-cloudformation-cross-region-variables 的插件可以实现此目的。你可以这样使用它

plugins:
  - serverless-plugin-cloudformation-cross-region-variables

custom:
  myVariable: ${cfcr:ca-central-1:my-other-stack:MyVariable}