引用 CF 模板中的现有资源

Em *_* Ae 8 resources template amazon-cloudformation

我们有多个 CloudFormation 脚本来创建我们的堆栈。

现在,我们要编写(自动化)新脚本,这些脚本仅用于更新1 个特定资源(业务需求)。

我遇到的问题是如何在我的更新脚本中引用现有资源?我知道有REF函数,但我相信这只是用于在同一脚本中引用资源。AWS 是否提供了一些东西来引用现有资源?

我已经读到我们可以使用,parameters但还有其他选择吗?

Chr*_*ams 6

我最近不得不为一些引用共享服务的分层部署执行此操作。除了参数之外,还有一些其他选项:

  1. 命名导出:如果您有一些由单独的 CloudFormation 堆栈创建的资源并且您只想引用它们,这是一个不错的选择(例如,基础架构管理员为应用程序团队设置了较低级别的部分,以便在其上进行部署) .

  2. 替换:在许多情况下,您可能只需要引用一个众所周知的名称,该名称是不变的,但 ARN 因 AWS 账户 ID 而异。您可以使用Fn::Sub扩展一些“伪参数”,例如帐户 ID 或区域:

    "TaskRoleArn": { "Fn::Sub": "arn:aws:iam::${AWS::AccountId}:role/YourSharedServiceTaskRole" }

  3. SSM 参数:您可以拥有检索 SSM 属性的动态引用。这对于完全从该值的来源中抽象出来很方便——它可以由 CloudFormation 创建,但实际上也可以是运行一次性命令行脚本的人,它支持密码和其他机密的安全存储,可以配置为防止由目标服务以外的任何人检索(例如 EC2 / ECS IAM 实例角色)——例如,我用它来存储 SES 凭证:

    aws ssm put-parameter --type String --name "/project/mail/EmailHost" --value email-smtp.us-east-1.amazonaws.com aws ssm put-parameter --type String --name "/project/mail/EmailUser" --value <SES_ACCESS_KEY> aws ssm put-parameter --type SecureString --key-id alias/your-well-known-iam-kms-alias --name "/project/mail/EmailPassword" --value <SES PASSWORD>`

  4. :这是最近宣布的一种非常强大的机制,您可以在其中使用 Lambda 函数返回任意 JSON 以包含在模板中。这几乎可以做任何事情,从配置 CloudFormation 堆栈创建者没有直接创建权限的额外资源到在数据库中查找值并返回配置有的模板,例如,从更大的预留池中分配 VPC CIDR由上级组织管理。


Zer*_*net 0

AWS 使用 ARN(AWS 资源名称)来引用资源。以下是一般格式:

arn:分区:服务:区域:帐户 ID:资源 arn:分区:服务:区域:帐户 ID:资源类型/资源 arn:分区:服务:区域:帐户 ID:资源类型:资源

您可以查找更多信息http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html

您还可以在服务文档页面中查找要引用的资源所使用的特定 ARN

  • 您能举一个 CloudFormation 定义的例子吗?一般来说,这是正确的,但是如果我有 ``DomainName: { 'Fn::GetAtt': [ 'WebsiteBucket', 'DomainName' ] }``` 并想用 arn 替换“WebsiteBucket”? (2认同)
  • 此评论并没有真正试图解决这个问题。它不应该解释 ARN 是什么,而应该解释如何在 CloudFormation 中查找它们。 (2认同)