【问题标题】:Custom CloudFormation Resources in TerraformTerraform 中的自定义 CloudFormation 资源
【发布时间】:2018-03-02 17:38:56
【问题描述】:

我正在试用 Terraform,并且正在将我更有趣的 CloudFormation 堆栈之一转换为 TF。作为堆栈的关键部分包括以下声明,该声明指定模板的自定义资源 - 一个 Lambda,它查询 AMI 列表并根据作为过滤器的描述为上下文选择最新的。

  LatestAMI:
    Type: Custom::LatestAMI
    Properties:
      ServiceToken: arn:aws:lambda:us-east-1:XXXXXXX:function:GetLatestAMI
      Description: ubuntu-16.04

我查看了 Terraform 文档,但似乎无法找到如何指定此资源。 CloudFormation 中是否有用于自定义资源的 Terraform 模拟?

【问题讨论】:

    标签: amazon-cloudformation terraform


    【解决方案1】:

    您发布的 CF 代码调用 lambda 函数来获取最新的 ami id(使用 Description: ubuntu-16.04 过滤。在 terraform 中有更简单的方法。

    你需要数据源aws_ami

    https://www.terraform.io/docs/providers/aws/d/ami.html

    使用此数据源获取已注册 AMI 的 ID 以用于其他资源。

    data "aws_ami" "latest_ami" {
      most_recent      = true
      executable_users = ["all"]
    
      filter {
        name   = "owner-alias"
        values = ["amazon"]
      }
    
      filter {
        name   = "name"
        values = ["*ubuntu-16.04*"]
      }
    }
    

    【讨论】:

    • 有趣!这绝对看起来适用于这个用例,但是我有一些其他模板使用自定义资源做更复杂的事情。如果有一种方法可以指定自定义资源,那就太好了——这只是一个例子。
    • 那么您还需要将该 lambda 函数 arn:aws:lambda:us-east-1:XXXXXXX:function:GetLatestAMI 转换为 terraform。
    猜你喜欢
    • 1970-01-01
    • 2019-08-02
    • 2018-03-10
    • 2020-10-09
    • 2021-04-06
    • 2021-03-09
    • 1970-01-01
    • 2022-11-23
    • 2019-11-30
    相关资源
    最近更新 更多