CloudFormation 能否在构建堆栈后填充资源或依赖项?

Posted

技术标签:

【中文标题】CloudFormation 能否在构建堆栈后填充资源或依赖项?【英文标题】:Can CloudFormation populate a resource or dependency after the stack is built? 【发布时间】:2020-10-05 01:57:12 【问题描述】:

堆栈的一个简单示例可能是:

1) 认知用户池。 2) 拉姆达。

有没有办法让我引用它构建时生成的 cognito 用户池 ID,以便它可以在我的 lambda 函数(代码)中使用,或者需要获取并手动输入到我的 repo/config

或者我可以在构建之前指定一个认知用户池 ID 吗?我没有看到任何例子。

谢谢

【问题讨论】:

【参考方案1】:

是的,有几种方法可以做到这一点。可能最简单和最常用的方法是通过lambda environment variables。

以下是 CloudFormation 中此类设置的一些伪代码:

mytemplate.yaml


MyUserCognitoPool:
    Type: AWS::Cognito::UserPool
    Properties: 
        <properties> 


MyLambdaFunction:
Type: AWS::Lambda::Function
Properties: 
  Environment: 
    Variables: 
        POOL_ID: !Ref MyUserCognitoPool
  Code: 
    Code:
        ZipFile:

            import os

            pool_id = os.environ['POOL_ID']

            def handler_name(event, context): 

                print(pool_id)

                return some_value    

【讨论】:

【参考方案2】:

CloudFormation 有一个返回值的概念。 您通常可以使用!Ref MyResource!GetAtt MyResource.someAttribute 来获取相应的值。 AWS CF 文档通常描述返回的值。例如见AWS::Cognito::UserPool return values。 在这种情况下,!Ref MyUserPoolResource 将为您提供自动生成的用户池 ID。

【讨论】:

以上是关于CloudFormation 能否在构建堆栈后填充资源或依赖项?的主要内容,如果未能解决你的问题,请参考以下文章

CloudFormation - 永久删除堆栈

AWS CLI 仅列出当前正在运行的 cloudformation 堆栈的名称?

AWS Amplify:如何重新创建手动删除的 CloudFormation 堆栈

如何使用状态 UPDATE_ROLLBACK_COMPLETE 更新 CloudFormation 堆栈?

AWS Cloudformation 角色无权对角色执行 AssumeRole

CloudFormation 嵌套堆栈名称