gpt4 book ai didi

terraform:如何使资源具有幂等性-即,如果不存在则创建,但如果存在则不执行任何操作

转载 作者:行者123 更新时间:2023-12-04 02:20:27 24 4
gpt4 key购买 nike

我有一些示例代码:

  • 创建 EC2 实例
  • 创建并添加我的公钥

  • 但我希望它是幂等的。即如果 key 存在,那么它仍然会运行并且不会因错误而失败。

    不知道该怎么做。有什么建议么?

    示例代码:
    provider "aws" {
    region = "eu-west-1"
    }

    module ec2 {
    source = "./ec2_instance"
    name = "EC2 Instance"
    }

    resource "aws_key_pair" "my_key" {
    key_name = "my_key"
    public_key = "<string>"
    }

    它是 aws_key_pair.my_key我试图使幂等。

    目前我收到如下错误:
    Error: Error applying plan:

    1 error(s) occurred:

    * aws_key_pair.my_key: 1 error(s) occurred:

    * aws_key_pair.my_key: Error import KeyPair: InvalidKeyPair.Duplicate: The keypair 'my_key' already exists.
    status code: 400, request id: <request id>

    最佳答案

    只要提供者中的所有资源都由 Terraform 创建或由 Terraform 管理,这正是 Terraform 的行为。

    如果您有一个空白的 AWS 账户并针对问题中的代码应用 Terraform,那么它将创建一个 AWS key 对以及您的 ec2 模块中包含的任何内容。

    如果您在此之后运行计划,则不会显示任何更改。

    这就是失败的地方,AWS API 只允许通过可配置的东西使用单一版本的资源,并且它已经存在于 Terraform 所知道的之外。这适用于 AWS key 对,其中每个 AWS 账户/区域组合只能有一个由同一事物命名的 key 对。

    此时您有两个选择:您可以让 Terraform 直接管理 AWS key 对,或者您可以简单地使用数据源引用它,而不是尝试创建新的。

    要让 Terraform 管理 AWS key 对,您可以 import it 通过运行:

    terraform import aws_key_pair.my_key my_key

    相反,如果您只想引用它,您通常可以使用 data source 但在这种情况下,它是不必要的(因此没有 aws_key_pair 数据源),因为您只需按名称引用 key 对,例如在此示例中:
    resource "aws_instance" "web" {
    ami = "am-123456"
    instance_type = "t2.micro"
    key_pair = "my_key"
    }

    关于terraform:如何使资源具有幂等性-即,如果不存在则创建,但如果存在则不执行任何操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51495993/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com