2016-10-19 52 views
2

Terraform 0.7.7を使用しています。TerraformはAmazon EC2でキーペアをインポートできません

私は、次の持つ単純なテラフォームファイルを持っている:私はグーグルで見つけ

aws_key_pair.personal: Creating... 
    fingerprint: "" => "<computed>" 
    key_name: "" => "mschuchard-us-east" 
    public_key: "" => "ssh-rsa pubkey hash mschuchard-us-east" 
aws_instance.personal: Creating... 
    ami:      "" => "ami-c481fad3" 
    availability_zone:  "" => "<computed>" 
    ebs_block_device.#:  "" => "<computed>" 
    ephemeral_block_device.#: "" => "<computed>" 
    instance_state:   "" => "<computed>" 
    instance_type:   "" => "t2.micro" 
    key_name:     "" => "<computed>" 
    network_interface_id:  "" => "<computed>" 
    placement_group:   "" => "<computed>" 
    private_dns:    "" => "<computed>" 
    private_ip:    "" => "<computed>" 
    public_dns:    "" => "<computed>" 
    public_ip:    "" => "<computed>" 
    root_block_device.#:  "" => "<computed>" 
    security_groups.#:  "" => "<computed>" 
    source_dest_check:  "" => "true" 
    subnet_id:    "" => "<computed>" 
    tenancy:     "" => "<computed>" 
    vpc_security_group_ids.#: "" => "<computed>" 
aws_instance.personal: Creation complete 
aws_eip.ip: Creating... 
    allocation_id:  "" => "<computed>" 
    association_id: "" => "<computed>" 
    domain:   "" => "<computed>" 
    instance:   "" => "i-0ab94b58b0089697d" 
    network_interface: "" => "<computed>" 
    private_ip:  "" => "<computed>" 
    public_ip:   "" => "<computed>" 
    vpc:    "" => "<computed>" 
aws_eip.ip: Creation complete 
Error applying plan: 

1 error(s) occurred: 

* aws_key_pair.personal: Error import KeyPair: InvalidKeyPair.Duplicate: The keypair 'mschuchard-us-east' already exists. 
status code: 400, request id: 51950b9a-55e8-4901-bf35-4d2be234abbf 

唯一のヘルプは*.tfstateファイルを吹き飛ばすことだった:

provider "aws" { 
    access_key = "${var.access_key}" 
    secret_key = "${var.secret_key}" 
    region  = "${var.region}" 
} 

resource "aws_instance" "personal" { 
    ami   = "${lookup(var.amis, var.region)}" 
    instance_type = "t2.micro" 
} 

resource "aws_eip" "ip" { 
    instance = "${aws_instance.personal.id}" 
} 

resource "aws_key_pair" "personal" { 
    key_name = "mschuchard-us-east" 
    public_key = "${var.public_key}" 
} 

Terraform apply次のエラーを生成します私は試したが、それは助けにはならなかった。私はこのキーペアでguiを使ってEC2インスタンスを起動することができ、簡単にsshを実行できますが、同じ機能キーペアを使用しようとするとTerraformはエラーになります。

答えて

5

キーペアが既にAWSアカウントに存在しているが、Terraformはその状態ファイルでその情報を知りませんので、毎回それを作成しようとしているというエラーが表示されます。

ここでは2つの方法があります。まず、AWSアカウントから削除し、Terraformにアップロードさせて、Terraformによって管理され、状態ファイルに格納されるようにするだけです。 https://www.terraform.io/docs/providers/awsこれによると、

terraform import aws_key_pair.personal mschuchard-us-east 
+1

私の場合、インポートには 'aws_key_pair.personal'があります。とにかく、しばらくの間、資格情報と戦って、Terraformに資格証明ファイルを使用させることをあきらめた後、 'terraform apply'をインポートして実行しました。次に、リソースが実際にやっていたことと、 'key_name'をインスタンスに関連付ける方法を理解しました。 Terraformはユーザーにとって使い勝手が悪く、高度なチュートリアルが本当に必要です。インポートコマンドを編集して、この回答を受け入れます。 –

+0

また、EC2のインスタンスダッシュボードを見て、私も 'vpc_security_group_ids'が必要であることを認識しました。今私は実際にTerraformによって作成されたEC2インスタンスにうまくいきますが、$ {aws_instance.personal.public_dns}の出力は完全に不正確です。 –

2

エラーは、AWSにキーペアがすでに存在し、Terraformを使用して作成されたものかコンソールを使用して作成されたものかを示していません。

正しい地域はAWSコンソールEC2 -> Key Pairsに表示されます。 Terraformを使用してインポートを再試行する前に、コンソールを使用して削除する必要があります。

+0

待ち:

はまた、あなたの状態のファイルに、既存のリソースをインポートするには、テラフォームimportコマンドを使用することができます/r/key_pair.html Terraformを使用してキーペアを作成することはできません。また、コンソールからキーペアを削除した場合、Terraformで公開鍵を指定する方法をどのように知っていますか? –

+0

正しいですが、Terraformを使用してEC2キーペアを作成することはできませんが、ローカルで作成して(秘密裏に)公開キーを取得できます( 'ssh-keygen -y -f myssh.key> myssh.pub')これをリソース 'aws_key_pair'に入れることができます。 –

関連する問題