1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

terraformでec2サーバーのキーペアを設定して起動する

Last updated at Posted at 2021-08-22

概要

過去にterraformによりAWSのec2インスタンスを作成した

しかし、これではssh接続の際のキーペアが設定されていないため、terraformでec2にキーペアを設定する方法をまとめる

terraformのためには認証キーの登録が必要なため別途以下で対応

キーペアなしでEC2インスタンスを構築

EC2を起動する

EC2をterraformで起動するための最低限のスクリプトは以下の通り
リージョンとAMI, インスタンスタイプをmain.tfに記載する
今回はAmazon Linuxを使用

main.tf
provider "aws" {
  region     = "ap-northeast-1"
}

resource "aws_instance" "default" {
    ami = "ami-09ebacdc178ae23b7" # Amazon Linux 2 AMI (HVM), SSD Volume Type(64 ビット x86)
    instance_type = "t2.micro"
}
$ ls
main.tf
# 初回のみ実行
$ terraform init
# 内容確認
$ terraform plan
# 環境適用
$ terraform apply

起動確認

image.png

EC2を落とす

$ terraform destroy

公開鍵を設定したEC2インスタンスを構築

キーペアを作成する

# キーペアを作成する
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/`user_name`/.ssh/id_rsa): `file_path`/ec2_access_key
Enter passphrase (empty for no passphrase): #今回はパスワードなしEnter
Enter same passphrase again: #今回はパスワードなしEnter

$ ls
ec2_access_key    ec2_access_key.pub    main.tf
# 秘密鍵を.ssh配下に移動
$ mv ./ec2_access_key ~/.ssh/ec2_access_key
$ ls
ec2_access_key.pub    main.tf

main.tfファイルで公開鍵の情報を追加
ついでにec2のタグでインスタンスに名前をつける

main.tf
provider "aws" {
  region     = "ap-northeast-1"
}

resource "aws_key_pair" "default" {
  key_name   = "ec2_access_key"
  public_key = file("./ec2_access_key.pub")
}

resource "aws_instance" "default" {
    ami = "ami-09ebacdc178ae23b7" # Amazon Linux 2 AMI (HVM), SSD Volume Type(64 ビット x86)
    instance_type = "t2.micro"

    key_name = aws_key_pair.default.key_name
    tags = {
        Name = "test-server"
    }
}

ec2インスタンスを起動する

$ terraform plan
$ terraform apply

起動確認

image.png

ssh接続を検証

構築したec2に対して暗号鍵を用いてssh接続してみる

$ ssh -i ~/.ssh/ec2_access_key ec2-user@`public_ip`
ssh: connect to host `public_ip` port 22: Operation timed out

接続できないとのこと
ポート周りの設定をしていなかったためと思われる

ec2のport 22を解放する

main.tfにセキュリティグループの情報を追加する

main.tf
provider "aws" {
  region = "ap-northeast-1"
}

resource "aws_key_pair" "default" {
  key_name = "ec2_access_key"
  public_key = file("./ec2_access_key.pub")
}

resource "aws_security_group" "default" {
  name = "ssh_connection"
  ingress {
    cidr_blocks = ["0.0.0.0/0"]
    protocol = "tcp"
    from_port = 22
    to_port = 22
  }
}

resource "aws_instance" "default" {
    ami = "ami-09ebacdc178ae23b7" # Amazon Linux 2 AMI (HVM), SSD Volume Type(64 ビット x86)
    instance_type = "t2.micro"
    # port
    vpc_security_group_ids = [aws_security_group.default.id]
    # key
    key_name = aws_key_pair.default.key_name
    # name
    tags = {
        Name = "test-server"
    }
}

設定を反映させる

$ terraform plan
$ terraform apply

ssh接続を検証してみる

$ ssh -i ~/.ssh/ec2_access_key ec2-user@`public_ip`
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
4 package(s) needed for security, out of 16 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-`private_ip` ~]$

無事に接続を確認

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?