访问AWS自动生成的URL以获取已部署的资源

时间:2018-06-25 15:05:47

标签: amazon-web-services serverless-framework serverless

是否可以在部署完成之前访问已部署资源的自动生成的URL? (例如db主机,lambda函数URL等)

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

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

感谢您的任何建议或指导!

2 个答案:

答案 0 :(得分:2)

如果“在其他资源中使用它们”表示另一个无服务器服务或另一个CloudFormation堆栈,则使用CloudFormation Outputs导出您感兴趣的值。然后使用CloudFormation ImportValue函数在另一个堆栈中引用该值。

请参见https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/outputs-section-structure.htmlhttps://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}     

答案 1 :(得分:1)

要添加到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}