既存のAWSVPCで、Terraformを使用していくつかの新しいEC2、RDSなどを作成する必要があります。また、既存のサブネット、セキュリティグループ、iamなどはTerraformによって作成されていません。手動で作成されます。
正しい方法はテラフォームインポートを使用することだと聞きました(正しいですか?)。テラフォームインポートがどのように機能するかをテストするために、既存のVPCの代わりに既存のEC2をインポートする方法を最初にテストしました。これは、既存のVPCで誤って何かを変更したくないためです。
実行する前に
terraform import aws_instance.example i-XXXXXXXXXX
Ec2.tfファイルに次のような非常に詳細なEC2リソースを作成する必要があるようです。
resource "aws_instance" "example" {
iam_instance_profile = XXXXXXXXXX
instance_type = XXXXXXX
AMI = XXXXXXX
tags {
Name = XXXXX
Department = XXXX
....
}
}
私が書くだけなら:
resource "aws_instance" "example" {
}
aMIとインスタンスタイプを見逃したことがわかりました。
私が書いた場合:
resource "aws_instance" "example" {
instance_type = XXXXXXX
AMI = XXXXXXX
}
次に「terraformapply」を実行すると、既存のEC2のタグがゼロに変更され、iamプロファイルがゼロに変更されます。
既存のvpc、サブネット、セキュリティグループをインポートする方法はまだ試していません。恐れ入りますが、既存のvpc、サブネット、セキュリティグループなどの情報をたくさん入れなければなりません。システムが複雑です。
テラフォームコードで非常に多くの詳細を示す必要があると予想されますか? vpcのIDのような既存のもののIDを単に示すだけで、新しいものが既存のIDに基づいて作成されるようにする方法はありませんか? sth。お気に入り:
data "aws_subnet" "public" {
id = XXXXXXX
}
resource "aws_instance" "example" {
instance_type = "t2.micro"
AMI = "${var.master_AMI}"
......
subnet_id = "${aws_subnet.public.id}"
}
インポート中はリソースの本文を空白のままにすることができますが、インポートしたら、戻って特定の詳細を入力する必要があります。 terraform showコマンドを使用してインポートされたリソースを確認し、すべてのリソースの詳細を入力できるため、terraformプランを実行しようとしても、変更は必要ありません。
しかし、あなたの質問に答えるために、はい、あなたはそれらをインポートする必要なしにあなたの既存のリソースを使うことができます。新しいリソースに必要な既存のリソースIDを保持する変数ファイルを作成するだけで、必要なものを参照できます。
したがって、次のような.varsファイルを作成できます。
variable "AMI_id" {
description = "AMI ID"
default = "AMI-xxxxxxxx"
}
variable "subnet_prv1" {
description = "Private Subnet 1"
default = "subnet-xxxxxx"
}
次に、main.tfでリソースを作成します。
resource "aws_instance" "example" {
instance_type = "t2.micro"
AMI = "${var.AMI_id}"
......
subnet_id = "${var.subnet_prv1}"
}
それについて行くためのただ1つの方法。他にも読むことができるものがあります 変数のテラフォームドキュメント