terraform:如何使资源幂等-即,如果不存在,则创建,如果存在,则不执行任何操作
我有一些示例代码:terraform:如何使资源幂等-即,如果不存在,则创建,如果存在,则不执行任何操作,terraform,Terraform,我有一些示例代码: 创建一个EC2实例 创建并添加我的公钥 但我希望它是幂等的。i、 e.如果密钥存在,则它仍将运行,不会因错误而失败 我不知道该怎么做。有什么建议吗 示例代码: provider "aws" { region = "eu-west-1" } module ec2 { source = "./ec2_instance" name = "EC2 Instance" } resource "aws_key_pair" "my_key" { key_name
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>"
}
这正是Terraform的行为,只要提供者中的所有资源都由Terraform创建或管理 如果您有一个空白的AWS帐户,并针对问题中的代码应用Terraform,那么它将创建一个AWS密钥对以及
ec2
模块中包含的任何内容
如果在此之后运行计划,则不会显示任何更改
这是因为AWS API只允许一个资源的单一版本,它是可配置的,并且它已经存在于Terraform所知道的范围之外。这适用于AWS密钥对,其中每个AWS帐户/区域组合只能有一个由同一事物命名的密钥对
此时,您有两个选择:您可以让Terraform直接管理AWS密钥对,或者您可以简单地使用数据源引用它,而不是尝试创建一个新的
要使Terraform管理AWS密钥对,您可以运行:
terraform import aws_key_pair.my_key my_key
相反,如果您只想引用它,您通常可以使用,但在这种情况下,它将是不必要的(因此没有aws\u key\u pair
数据源),因为您只需按名称引用密钥对,如本例中所示:
resource "aws_instance" "web" {
ami = "am-123456"
instance_type = "t2.micro"
key_pair = "my_key"
}
看起来您需要将现有的
my_-key
keypair导入您的地形状态。导入资源后,terraform将不会尝试创建存在的密钥对
terraform import aws_key_pair.my_key my_key
请提供您的示例代码
terraform import aws_key_pair.my_key my_key