web-dev-qa-db-ja.com

Terraformを使用して既存のVPCでECを起動する方法

既存の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}"
}
5
user389955

インポート中はリソースの本文を空白のままにすることができますが、インポートしたら、戻って特定の詳細を入力する必要があります。 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つの方法。他にも読むことができるものがあります 変数のテラフォームドキュメント

10
Rick Baker