【Terraform×AWS】既存キーペアを利用してEC2インスタンスを起動する記述

Terraformを利用してEC2インスタンスを起動するとき、キーペアを作成し引数で指定しますよね。公式リファレンスや他技術ブログを見ると、新しくキーペアを作る記述を書き、EC2インスタンス起動の際に新キーペアを参照させています。

 

AWSクラウド上にすでに作成してあるキーペアを利用してEC2インスタンスを起動したい場合はどうすればいいでしょうか

 

今回の記事では、既存キーペアを利用してEC2インスタンスを起動する記述を紹介します。

 

 

☆☆☆☆☆☆☆☆☆↓Terraformを始めてみたい方はこちらをチェック↓☆☆☆☆☆☆☆☆☆☆
 
https://cloud5.jp/saitou-terraform-start/
 
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

 

 

既存キーペアを利用するTerraform記述

結論から言いますと、AWSクラウド上に作成済みのキーペアを利用してEC2インスタンスを起動する記述するときは、

 

キーペアのNameもしくはキーペアIDを指定します。

 

 

実際に作成してみていきましょう。

 

 

■既存キーペア名確認

ますはマネージメントコンソールで作成済みのキーペアを確認します。

 

saitou-tf-keypairsキーペア確認

 

"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"

 

 

↓念のため、マネージメントコンソールで起動確認をしてみます。

 

saitou-tf-keypairsインスタンス確認

 

指定したキーペアでEC2インスタンスを起動することができました。

 

 

■接続確認

起動確認できましたが、指定したキーペアで起動されたのか確認してみます。出力されたパブリックIPアドレスにssh接続してみましょう。

 

↓コマンドプロンプトやSSH接続クライアントソフトで接続確認してみてください。わたしはコマンドプロンプトで接続してみます。キーペアのパスやIPアドレスを変更してください。

 

ssh -i ./Documents/terraform/src/saitou-keypairs.pem ec2-user@18.140.113.226

 

 

saitou-tf-keypairs接続確認

 

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/

 

 

Last modified: 2023-07-15

Author