是否可以在部署完成之前访问已部署资源的自动生成的URL? (例如db主机,lambda函数URL等)
部署完成后,我可以访问它们,但是有时我在构建堆栈时需要访问它们。 (例如,在其他资源中使用它们。)
处理此用例的最佳解决方案是什么?我当时正在考虑将它们从CloudFormation模板输出到SSM参数存储中,但是我不确定这是否有可能。
感谢您的任何建议或指导!
答案 0 :(得分:2)
如果“在其他资源中使用它们”表示另一个无服务器服务或另一个CloudFormation堆栈,则使用CloudFormation Outputs导出您感兴趣的值。然后使用CloudFormation ImportValue函数在另一个堆栈中引用该值。
请参见https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/outputs-section-structure.html和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}
答案 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}