次のサンプルコードが少しあります。
しかし、私はそれがべき等であることを望みます。つまり、キーが存在する場合、キーは引き続き実行され、エラーで失敗することはありません。
その方法がわからない。助言がありますか?
サンプルコード:
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の動作です。
空のAWSアカウントがあり、質問のコードに対してTerraformを適用すると、AWSキーペアとec2
モジュール。
その後、計画を実行すると、変更は表示されません。
これが落ちてくるのは、AWS APIが、設定可能な何かによってリソースの単一バージョンのみを許可し、Terraformが知っている範囲外に既に存在する場合です。これは、AWSアカウント/リージョンの組み合わせごとに、同じもので命名された単一のキーペアのみを持つことができるAWSキーペアに適用されます。
この時点では、2つのオプションがあります。TerraformでAWSキーペアを直接管理するか、新しいキーペアを作成する代わりにデータソースで参照することができます。
TerraformでAWSキーペアを管理するには、次のコマンドを実行して import it を実行します。
terraform import aws_key_pair.my_key my_key
代わりに参照したい場合は、通常 data source を使用できますが、この場合は不要です(したがって、aws_key_pair
データソース)この例のように、名前でキーペアを単純に参照する場合:
resource "aws_instance" "web" {
AMI = "am-123456"
instance_type = "t2.micro"
key_pair = "my_key"
}
既存のmy_key
キーペアをテラフォーム状態にインポートする必要があるようです。リソースをインポートすると、terraformは存在するキーペアを作成しようとしません。
terraform import aws_key_pair.my_key my_key