この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
Terraformを利用してEC2インスタンスを起動するとき、キーペアを作成し引数で指定しますよね。公式リファレンスや他技術ブログを見ると、新しくキーペアを作る記述を書き、EC2インスタンス起動の際に新キーペアを参照させています。
AWSクラウド上にすでに作成してあるキーペアを利用してEC2インスタンスを起動したい場合はどうすればいいでしょうか。
今回の記事では、既存キーペアを利用してEC2インスタンスを起動する記述を紹介します。
☆☆☆☆☆☆☆☆☆↓Terraformを始めてみたい方はこちらをチェック↓☆☆☆☆☆☆☆☆☆☆
https://cloud5.jp/saitou-terraform-start/
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
既存キーペアを利用するTerraform記述
結論から言いますと、AWSクラウド上に作成済みのキーペアを利用してEC2インスタンスを起動する記述するときは、
キーペアのNameもしくはキーペアIDを指定します。
実際に作成してみていきましょう。
■既存キーペア名確認
ますはマネージメントコンソールで作成済みのキーペアを確認します。
"saitou-keypairs"というキーペアが確認できます。EC2インスタンスを起動するTerraformの記述でキーペア名を指定してみましょう。
■Terraform記述
今回のハンズオン用にファイルを4つ用意しました。環境に合わせて記述を変えていただくところがありますので、よろしくお願いいたします。
【用意するtfファイル】
●main.tf
main.tfファイルで変更する箇所は、"provider"の"region"です。わたしはシンガポールリージョンを利用していますが、東京リージョンを利用している方は"ap-northeast-1"に変更してください。
# ---------------------------
# Terraform
# ---------------------------
terraform {
required_version = ">=0.13"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~>3.0"
}
}
}
# ---------------------------
# Provider
# ---------------------------
provider "aws" {
profile = "terraform"
region = "ap-southeast-1"
}
# ---------------------------
# Variables
# ---------------------------
variable "project" {
type = string
}
variable "user" {
type = string
}
variable "myip" {
type = string
}
●ec2.tf
ec2.tfファイルで変更する箇所は、’resource "aws_instance"’の項目です。
‘resource "aws_instance"’の"key_name"で自身の作成したキーペア名もしくはキーペアIDに変更してください。
# ---------------------------
# EC2 Instance
# ---------------------------
resource "aws_instance" "saitou_test_ec2" {
ami = "ami-06b79cf2aee0d5c92"
instance_type = "t2.micro"
associate_public_ip_address = true
vpc_security_group_ids = [
aws_security_group.sg.id
]
key_name = "saitou-keypairs"
tags = {
Name = "${var.project}-ec2"
User = var.user
}
}
output "saitou_test_ec2_public_ip" {
description = "Public IP address of the EC2 instance"
value = aws_instance.saitou_test_ec2.public_ip
}
●security_group.tf
security_group.tfファイルで変更する箇所は、’resource "aws_security_group"’の項目です。
‘resource "aws_security_group"’の"vpc_id"をEC2インスタンスを起動するVPCのIDに変更してください。
# ---------------------------
# Security Group
# ---------------------------
resource "aws_security_group" "sg" {
name = "${var.project}-sg"
description = "test sg"
vpc_id = "vpc-xxxxxxxxxxxxxxxxx"
tags = {
Name = "${var.project}-sg"
User = var.user
}
}
resource "aws_security_group_rule" "sg_in_myip" {
security_group_id = aws_security_group.sg.id
type = "ingress"
protocol = "-1"
from_port = 0
to_port = 0
cidr_blocks = ["${var.myip}"]
}
resource "aws_security_group_rule" "sg_out_all" {
security_group_id = aws_security_group.sg.id
type = "egress"
protocol = "-1"
from_port = 0
to_port = 0
cidr_blocks = ["0.0.0.0/0"]
}
●terraform.tfvars
security_group.tfファイルで変更する箇所は、"project","user","myip"です。"myip"をはご自身の通信環境のIPアドレスに変更してください
project = "saitou-test"
user = "saitou"
myip = "xx.xx.xx.xx/32"
■Terraform実行
各tfファイルが用意できましたら、"terraform plan"、"terraform apply"の順で実行していきましょう。
↓実行して成功すると以下の結果が出力されます。
aws_instance.saitou_test_ec2: Creation complete after 36s [id=i-xxxxxxxxxxxxxx]
Apply complete! Resources: 4 added, 0 changed, 0 destroyed.
Outputs:
saitou_test_ec2_public_ip = "18.140.113.226"
↓念のため、マネージメントコンソールで起動確認をしてみます。
指定したキーペアでEC2インスタンスを起動することができました。
■接続確認
起動確認できましたが、指定したキーペアで起動されたのか確認してみます。出力されたパブリックIPアドレスにssh接続してみましょう。
↓コマンドプロンプトやSSH接続クライアントソフトで接続確認してみてください。わたしはコマンドプロンプトで接続してみます。キーペアのパスやIPアドレスを変更してください。
ssh -i ./Documents/terraform/src/saitou-keypairs.pem ec2-user@18.140.113.226
↓
AWSクラウド上で作成済みのキーペアを利用して起動したEC2インスタンスに接続することができました。
今回は以上です。
まとめ:既存キーペアを利用してEC2インスタンスを起動する記述
Terraformを利用してAWSクラウド環境構築をしていると、「これってどうやるんだろう」という疑問に対する正解がネット上にないことがあります。今回の既存キーペア利用もそのうちの一つでした。
次回はセキュリティグループのインバウンドルールですべてのトラフィックを許可する記述を紹介します。
☆☆☆☆☆☆☆☆☆↓Terraformを始めてみたい方はこちらをチェック↓☆☆☆☆☆☆☆☆☆☆
https://cloud5.jp/saitou-terraform-start/
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
参考リンク:Terraform公式webサイト
↓ほかの協栄情報メンバーも自動化に関する記事を公開しています。ぜひ参考にしてみてください。
■Terraformの概要と使用方法(higa)
https://cloud5.jp/terraform_summary/
■AWS CodePipeline を利用してS3の静的ウェブサイトの更新を自動化する(tatsuoka)
https://cloud5.jp/tatsuoka-handson-beginner-codepipeline/
■AWS上にopenstackを構築(liuwanying)
https://cloud5.jp/openstack-install/
■Ansibleを利用してwindowsOSのインスタンスを操作する方法(umemoto)
https://cloud5.jp/control-windows-fromansible/