Terraformを使用して、EC2のキーペアを作成する
今回はTerraformでEC2のキーペアを作成し、それを使用してEC2を作成していきます。
キーペアの作成
まずは、Terraformでキーペアを作成していきます。
通常、キーペアを作成するためには、ssh-keygenコマンドを利用しますが、terraformではtlsプロバイダの一つである、tls_private_keyリソースを利用することでキーペアを作成することが可能です。
下記でRSA暗号、4096ビットの秘密鍵/公開鍵のペアを作成します。
resource "tls_private_key" "main" { algorithm = "RSA" rsa_bits = 4096}
これで秘密鍵、公開鍵のペアが作成されるため、以下のように利用します。
AWSのキーペアは公開鍵をopenssh形式で登録する必要があるので、3つめを利用します。
# 秘密鍵(PEMフォーマット)tls_private_key.main.private_key_pem
# 公開鍵(PEMフォーマット)tls_private_key.main.public_key_pem
# 公開鍵(OPENSSHフォーマット)tls_private_key.main.public_key_openssh
作成したキーペアをaws_key_pair
リソースで、キーペアとして登録します。
resource "aws_key_pair" "main" { key_name = "ec2-keypair" public_key = tls_private_key.main.public_key_openssh
tags = { Name = "ec2-keypair" }}
キーペアをローカルファイルに保存
ちなみに、キーペアをファイルとして保存したい場合は、localプロバイダを利用することでローカルにファイルとして保存できます。
以下は、modules/ec2
配下に秘密鍵、公開鍵を保存する例です。
resource "local_file" "keypair_pem" { filename = "${path.module}/keypair.pem" sensitive_content = tls_private_key.main.private_key_pem file_permission = "0600" # 秘密鍵は権限を0600に変更する。}
resource "local_file" "keypair_pub" { filename = "${path.module}/keypair.pub" sensitive_content = tls_private_key.main.public_key_openssh file_permission = "0600" # 公開鍵も権限を0600に変更する。(必須ではない。)}
EC2作成時のキーペア反映
ここまででキーペアを作成したので、あとはEC2インスタンス作成時にキーペアを指定するだけです。
せっかくなので、VPCとサブネットを作成してEC2インスタンスを配置します。
aws_instance
リソースのkey_name
を作成したキーペアを指定してあげればOKです。
resource "aws_vpc" "sample-vpc" { cidr_block = "172.16.0.0/16"
tags = { Name = "sample-vpc" }}
resource "aws_subnet" "sample-subnet" { vpc_id = aws_vpc.sample-vpc.id cidr_block = "172.16.10.0/24" availability_zone = "ap-northeast-1a"
tags = { Name = "sample-subnet" }}
resource "aws_instance" "main" { ami = data.aws_ssm_parameter.amazonlinux.value instance_type = "t2.nano"
key_name = aws_key_pair.main.key_name
subnet_id = aws_subnet.sample-subnet.id
tags = { Name = "sample-instance" }}
ちなみに最新版のAmazonLinux AMIを取得するためには、以下の通りaws_ssm_parameter
のdata
として取得してあげればOKです。
data "aws_ssm_parameter" "amazonlinux" { name = "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2"}