しょーもないことなのですが、若干時間かかったので。
やろうとしたこと
TerraformでEC2インスタンスを作成する際にSSHキーをインポートしたかった。
出たエラー
planが通ったのでapplyすると...
$ terraform apply -var-file=vars.tfvars
こういう感じで怒られました。
Error: Error import KeyPair: InvalidKey.Format: Key is not in valid OpenSSH public key format
status code: 400, request id: 28fb3e7c-653f-41c2-a2ec-212d69b8a5e9
該当箇所のコード
main.tf
#略
# SSH key for EC2
resource "aws_key_pair" "ec2-key-pair" {
key_name = var.ssh_key_name
public_key = var.ssh_key_path
}
#略
変数ファイルと値は以下のような感じです
variables.tf
# AWS credential
variable "access_key" {}
variable "secret_key" {}
# EC2 SSH key
variable "ssh_key_name" {}
variable "ssh_key_path" {}
# AMI id
variable "ami_id" {}
vars.tfvars
access_key = "XXXXXXXXXXXXXXXXXXXX"
secret_key = "XXXXXXXXXXXXXXXXXXXX"
ssh_key_name = "terraform_test_rsa"
ssh_key_path = "~/.ssh/terraform_test_rsa.pub"
ami_id = "ami-00000000000000"
とりあえず公式を確認してみる
鍵ファイルの中身自体をpublic_keyの値に持たせるのが正解らしいです。全然読んでませんでした。
で、さらに確認するとこういう関数があるみたいでして...
ということで修正します。
修正
main.tf
# SSH key for EC2
resource "aws_key_pair" "ec2-key-pair" {
key_name = var.ssh_key_name
public_key = file(var.ssh_key_path)
}
これで再度applyするとうまく実行されました。