TerraformにおけるEC2キーペアのインポートエラーの対処方法

2022.03.22

こんにちは!休みの日に友達と二郎に行って、完全制覇まで残りわずかとなったつくぼし(tsukuboshi0755)です!

最近IaC初心者の自分がTerrraformで遊んでいる検証している最中で、EC2キーペアをインポートする際にエラーが発生し、解決するのに結構苦戦してしまったため共有してみたいと思います。

環境

$ terraform -v

Terraform v1.1.7
on darwin_arm64

エラー内容

①EC2用のキーペアをssh-keygenコマンドにて作成

$ ssh-keygen -t rsa -b 2048 -f ~/.ssh/tf-demo.pem

main.tfファイルを以下の通り作成

main.tf

(中略)
resource "aws_key_pair" "example_key" {
key_name   = var.key_name
public_key = file(~/.ssh/tf-demo.pem)
}
(中略)

terraform applyコマンドを実施した所、以下の通りエラーが発生

$ terraform apply
(中略)
╷
│ Error: error importing EC2 Key Pair (tf-demo): InvalidParameterValue: Value for parameter PublicKeyMaterial is invalid. Length exceeds maximum of 2048.
│ 	status code: 400, request id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
│
│   with aws_key_pair.example_key,
│   on  [main.tf](http://main.tf/) line XX, in resource "aws_key_pair" "example_key":
│   XX: resource "aws_key_pair" "example_key" {
│
╵

エラーメッセージで「キーの長さが最大値である2048を超えてるよ!」と言われたものの、キーの作成時に2048ビットで指定しているので、こんなエラー出ないはずなんだけど...

と困惑しながら怪しい所を片っ端から探っていたら、意外な所でエラー原因が見つかりました。

エラー原因

aws_key_pairリソースのpublic_key項目で、公開鍵ではなく秘密鍵を間違えて指定していたのが原因でした。   (しょーもないミスです笑)

きちんと公開鍵を指定したら、エラーが起こらずに指定したキーペアをインポートできました。

main.tf

(中略)
resource "aws_key_pair" "example_key" {
key_name   = var.key_name
public_key = file(~/.ssh/tf-demo.pem.pub) # 秘密鍵ではなく公開鍵を指定
}
(中略)

エラーの原因はとても初歩的なものだったのですが、エラーメッセージを読むだけではすぐに解決方法に辿り着けませんでした。(ビット数に惑わされた。。。)

また当たり前かもしれませんが、秘密鍵と公開鍵の名前は非常に似通ったものになりがちなため、エラーを突き止めるまでに時間がかかってしまいました。

最後に

皆さんも、EC2キーペアのインポート作業中に似たようなエラーメッセージが出てきたら、きちんと公開鍵を指定できているか今一度確かめると良いかもしれません。

以上、つくぼしでした!