こんにちは、クラスメソッドのヌヌです。
EC2 Instance Connect Endpointを作成できるTerraformのアップデートがありましたので、やってみました。
TerraformのEIC Endpointについて
事前確認
EC2 Instance Connect EndpointはAWS Provider 5.6.0以上のバージョンから作成可能です。 そのため、Terraformで EIC Endpointを作成する前、Providerのバージョンを確認してください。
中身について
EIC Endpointのリソースタイプは aws_ec2_instance_connect_endpoint
です。次のようにコードを作成できます。
# main.tf
resource "aws_ec2_instance_connect_endpoint" "eic_test" {
subnet_id = aws_subnet.test_private_subnet.id # 必須
security_group_ids = [aws_security_group.ssh_eic.id] # オブション
preserve_client_ip = true # オブション
tags = { # オブション
Name = "名前"
}
}
subnet_id
(必須):必須入力項目です。エンドポイントを作成するサブネットIDを定義します。security_group_ids
:エンドポイントに適用するセキュリティグループです。何も定義しない場合、VPCのデフォルトセキュリティグループが適用されます。preserve_client_ip
:クライアントIPアドレスを保存可否を定義します。デフォルトはtrue です。tag
:タグを作成します。
やってみました
コード作成
terraform {
required_providers {
aws = ">= 5.6.0"
}
}
provider "aws" {
region = "ap-northeast-1"
}
resource "aws_vpc" "test" {
cidr_block = "172.31.0.0/16"
}
resource "aws_subnet" "test_private_subnet" {
vpc_id = aws_vpc.test.id
cidr_block = "172.31.0.0/24"
availability_zone = "ap-northeast-1a"
}
resource "aws_route_table" "private_rt" {
vpc_id = aws_vpc.test.id
}
resource "aws_ec2_instance_connect_endpoint" "test_eic" {
subnet_id = aws_subnet.test_private_subnet.id # 必須
security_group_ids = [aws_security_group.ssh_eic.id] # オブション
preserve_client_ip = true # オブション
tags = { # オブション
Name = "eic-test"
}
}
# EIC Endpointのセキュリティグループ
resource "aws_security_group" "ssh_eic" {
name = "test-eic-sg"
description = "EIC Security Group For Test"
vpc_id = aws_vpc.test.id
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["x.x.x.x/x"]
}
egress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
}
resource "aws_instance" "test" {
ami = "ami-0cfc97bf81f2eadc4"
instance_type = "t2.micro"
subnet_id = aws_subnet.test_private_subnet.id
security_groups = [aws_security_group.ssh_ec2.id]
}
resource "aws_security_group" "ssh_ec2" {
name = "test-ec2-sg"
description = "EC2 Instance Security Group For Test"
vpc_id = aws_vpc.test.id
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["x.x.x.x/x"]
}
egress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
}
デプロイ
次のコマンドを実行して作成したTerraformコードをデプロイします。
$ terraform init
$ terraform plan
$ terraform apply
接続確認
デプロイが完了できたら次のコマンドを入力して、接続を確認します。
$ aws ec2-instance-connect ssh --instance-id インスタンスID --connection-type eice
最後に
EIC Endpointがリリーズされてからあまり経ってないですがすぐTerraformで使えることができてるTerraformの速度に驚きました。
EIC EndpointもTerraformで作成しましょう!