[解決済み] Terraformを使って既存のVPCにECを立ち上げる方法
質問内容
既存のAWS VPCにTerraformを使ってEC2、RDSなどを新規に作成する必要があるが、既存のサブネット、セキュリティグループ、iamなどはTerraformでは作成されない。
テラフォームインポートを使うのが正しい方法と聞いたのですが(正しいのでしょうか)。テラフォームインポートがどのように機能するかを試すために、まず、既存のVPCの代わりに、既存のEC2をインポートする方法を試しました。
実行前
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
}
で、"terraform apply"を実行します。 を実行すると、既存のEC2のタグが無になり、iamプロファイルも無になる。
既存の vpc、サブネット、セキュリティグループをインポートする方法はまだ試していません。私のシステムは複雑なので、既存の vpc、subnet、security group などの多くの情報を入れなければならないのが怖いです。
vpcのidなど、既存のもののidを指定するだけで、そのidを元に新しいものが作られるような方法はないのでしょうか? などなど。
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 planを実行すると、変更の必要がないことが表示されるはずです。
しかし、質問の答えとしては、はい、既存のリソースをインポートすることなく使用することができます。 ただ、新しいリソースに必要な既存のリソース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}"
}
あくまで一つの方法です。 他にもいろいろありますが、詳しくは以下をご覧ください。 テラフォームの変数に関するドキュメント
関連
-
[解決済み] AWS Lambda Functionに一時ファイルを保存することはできますか?
-
[解決済み] エラー: networkMode 'awsvpc' が指定された場合、ネットワーク構成を提供する必要があります。
-
[解決済み] DNS名foo.を持つRRSetはゾーンバーで許可されていません。
-
[解決済み] プライマリネームサーバが親に登録されていない
-
[解決済み] DynamoDBのBatchGetItemとQueryの違いとは?
-
[解決済み] AWS 0.0.0.0/0と::/0の意味は何ですか?
-
[解決済み] AWS CLIツールからAWSアカウント番号を取得する簡単な方法とは?
-
[解決済み] EC2でインスタンスを削除するには?
-
[解決済み] "保護されていない秘密鍵ファイル!" Amazon EC2インスタンス(AWS)へのSSH利用時のエラーについて
-
[解決済み】LightsailとEC2の違いは何ですか?[クローズド]
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】DynamoDB - キー要素がスキーマと一致しない
-
[解決済み】aws cli: update-kubeconfig が期待通りに動作しない。
-
[解決済み] DynamoDBでカラムを追加する方法
-
[解決済み] AWSでロールを引き受ける際のRoleSessionNameのユースケースとパフォーマンスへの影響について
-
[解決済み] AWSストレージクラス解析とインテリジェントティアリングの比較
-
[解決済み] AWSとPuTTy。悪いサービス要求のssh-connection [閉鎖]。
-
[解決済み] タスク実行時にAWS ECSエラーが発生しました。クラスタにコンテナインスタンスが見つかりませんでした。
-
[解決済み] ウェブサイトがAmazonネームサーバーを持っているが、別のサーバーでホストされている方法
-
[解決済み] AWS CLIツールからAWSアカウント番号を取得する簡単な方法とは?
-
[解決済み] Amazon SNSとAmazon SQSの違いは何ですか?