📝
【Terraform】EC2の作成(AMIの検索、取得)
はじめに
下記のEC2を作成していきます。
EC2の最新版のAMIイメージを自動的に取得できるようにaws_ami
を使用していきます。
- AMIの検索、aws_amiで取得
- キーペア作成
- EC2の構築
AMIの検索
今回はAmazon Linux 2 AMI (HVM) - Kernel 5.10, SSD Volume Type
をインストール。
AWS CLIで下記コマンドを実行。
#AMI IDはマネジメントコンソールから。
$ aws ec2 describe-images --image-ids AMI ID
RootDeviceType
やVirtualizationType
を参照していく。
aws_ami
- owners : enum[] : 所有者。self,amazon,aws-marketplace,microsoft
- most_recent : bool : 最新のものを選択するかどうか
- executable_users : string[] : 実行ユーザー。selfまたはアカウントID
- filter : block : name,valuesの値を設定。
data.tf
data "aws_ami" "app" {
most_recent = true
owners = ["self", "amazon"]
filter {
name = "name"
values = ["amzn2-ami-kernel-5.10-hvm-2.0.*.0-x86_64-gp2"]
}
filter {
name = "root-device-type"
values = ["ebs"]
}
filter {
name = "virtualization-type"
values = ["hvm"]
}
}
キーペア作成
通常マネジメントコンソール上でキーペアを作成する時は、AWS側に公開鍵が保存されますが、
Terraformの場合、ローカルでssh-keygen
を使用し、秘密鍵・公開鍵を作成し、AWSに公開鍵を登録します。
key-gen
- 対象ディレクトリで
ssh-keygen
を実行。 - srcに移動させ、秘密鍵には.pemで保存。
aws_keypair
- key_name : string : キーペア名
- public_key : string : 公開鍵
- tags : object : タグ
appserver.tf
#------------------
#key pair
#------------------
resource "aws_key_pair" "keypair" {
key_name = "${var.project}-${var.environment}-keypair"
public_key = file("./src/udemy_terraform-dev-keypair.pub")
tags = {
Name = "${var.project}-${var.environment}-keypair"
Project = var.project
Env = var.environment
}
}
EC2の作成
aws_instance(基本設定)
- ami : string : AMI ID
- instance_type : enum : インスタンスタイプ
- tags : object : タグ
aws_instance(ネットワーク)
- string_id : string : サブネットID
- associate_public_ip_address : bool : 自動割り当てパブリックID
- vpc_security_group_ids : string[] : セキュリティグループID
aws_instance(その他)
- iam_instance_profile : string : IAMロール
- key_name : string : キーペア名
- user_data : string : ユーザーデータ
appserver.tf
#------------------
#EC2 Instance
#------------------
resource "aws_instance" "app_server" {
#基本設定
ami = data.aws_ami.app.id
instance_type = "t2.micro"
#ネットワーク
subnet_id = aws_subnet.public_subnet_1a.id
associate_public_ip_address = true
vpc_security_group_ids = [aws_security_group.app_sg.id, aws_security_group.opmng_sg.id]
#その他
key_name = aws_key_pair.keypair.key_name
tags = {
Name = "${var.project}-${var.environment}-app-ec2"
Project = var.project
Env = var.environment
Type = "app"
}
}
Discussion