TerraformでEC2 Instanceを構築してみよう
【はじめに】
現在、EC2 InstanceをGUIで数クリックですぐ構築できる素晴らしい技術がある反面、同じ設定でInstanceを起動したいとき、同じ作業を何回もやらなければならないのは地道で大変だしヒューマンエラーも起きてしまいますよね。
そこで、今回はTerraformに設定を保存して、いつでも迅速にInstanceの起動・停止を可能にできる環境の構築をしていきたいと思います。
それじゃあやってみよ〜!
<目次>
・Terraform扱い方
・EC2インスタンス設定方法
・ssh接続方法
【前提】
・Terraformがインストールされていること(無料)
・AWSアカウントが作成されていること(無料)
『Terraform扱い方』
早速、Terraformで設定していくためのディレクトリを作成します。
私はVSCode経由のターミナルで作成していきますが、お好きなエディタ等で編集してください。
ファイル場所は任意ですので、今回はデスクトップに保存します。(ちなみに私はMacOSです)
mkdir -p /Users/macuser/Desktop/terraform
では、作業ディレクトリに移動し、ファイルを作成しておきましょう。
cd /Users/macuser/Desktop/terraform
ここまで行ったら、VSCodeの編集画面で作業していきます。
やり方はいろいろありますが、せっかくなのでショートカットキーなんかを使いながら作成してみます。
上の画面になったら、下記を実施します。
もし、ショートカットが嫌な方は、左上のOpen Editorsの右隣にあるプラスボタンを押せばファイルが作成できます。
Command (Ctl) + n ⇨新規ファイル作成
カレントディレクトリ内にファイルが作成され、保存しようとすれば勝手にそのディレクトリが表示されるので楽です。
作成したら早速記入していきましょう。
まずは、下記のように書きます。
"provider"の部分は使いたいサービスを指定します。今回はawsを使用したいので、awsと記入。
"region"は、awsのリージョンを指定します。今回は東京の"ap-northeast-1"でInstanceを作成していきたいと思います。
"profile"だけは少し厄介です。ここではAWS CLIとの連携が必要になるので、その作業をやっていきます。
このURLに行けばAWS CLIのインストールができるので、ない人はURLにいき、自分の環境に合ったものをインストールしてください。
完了したら、AWSアカウントでAccess Keyを作成します。
AWSアカウントログイン後、右上に見える名前をクリックし、Security credentialsをクリックすると下記のような画面がありますので、Access Keyをそこで作成していきます。
作成後は、そこで出てくる、2種類のキーを使うので、頭に入れておきます。
次に、Terminalを開き、下記コマンドを実施後、それぞれ取得したAccess Key等を入力していきます。
aws configure
こんな感じです。Default region等は特にしていなければそのままでもOKです。
本来、Access Key等は絶対に他者に教えないようにしてください。
そうすると、ターミナルから.awsのディレクトリに行くと欲しい情報が隠されています。
cd .aws
cat credentials
実行後の画面を見ると、[default]と書かれていることがわかりました。これがここの"default"にかかってきます。他の名前があると上手く機能しないのでよく確認してください。
それでは、完成したので、ここでプロバイダーであるawsをダウンロードするために下記を実行します。
これをすることで、ようやく書いた設定内容をawsに反映する土台が作成できます。
terraform init
カレントディレクトリにTerraformのconfigファイルがないと上手く機能しませんので注意。
必ず作成したterraformディレクトリに移り、その中にconfigファイルがあることを確認してください。
※失敗バージョンと成功バージョンが載っています⇩⇩
ここまで来たら、Instanceを作成していきましょう。
一旦の完成系はこのようになります。細かく見ていきましょう。
それぞれ項目がありますが、単にGUIで設定していたことをここに明記しているだけなので難しく考える必要はありません。
| 名前 | 内容 |
|---|---|
| app_server | terraform内での名前 |
| ami | Linuxとか、Ubuntuとか。ここではidのようなもので指定 |
| instance_type | 無料のt2.microを設定 |
| key_name | ssh接続ように使用する鍵の名前 |
| vpc_security_group_ids | セキュリティグループのIDを記載 |
| tags | 管理しやすくするためのタグ |
terrafom作成時の文法やフォーマットは、VSCodeで作成するとかなりアシストしてくれるので、そこまで知らなくても今回はOKです。詳しく知りたい方は公式ドキュメント参照してください。
次に、セキュリティグループを作成していきます。
完成系はこちら。こちらも同様に細かく見ていきましょう。
ここでもテーブルに内容を記載しておきます。それぞれの内容の深掘りはまたの機会として、今回はこのまま残りのsshキー作成&Instance起動を行い、終了しましょう。
| 名前 | 内容 |
|---|---|
| ssh_connection | terraform内での名前 |
| name | セキュリティグループの名前 |
| ingress | インバウンドの設定 |
| from_port | ポート設定 |
| to_port | ポート設定 |
| protocol | プロトコル設定 |
| cidr_blocks | アクセス許可するIPの設定 |
『SSH鍵の作成方法』
ここまで来たらあとは鍵を作成して、インスタンス起動してアクセスして終わりです。ラストスパートに差し掛かりましょう。
まず、自分のIPとのSSH接続をセキュリティグループで設定したので、自分のターミナルから作業を行います。
AWSのGUIを操作すればすぐ作成できますが、今回はコマンドを実行して作成してみましょう。
ssh-keygen -t ed25519 -f ~/.ssh/my-key
パスワードが聞かれるので、自分でパスワードを入力し作成します。
実行後はmy-keyとmy-key.pubが作成されます。
鍵のファイルは権限を変えて安全に保管しておきましょう。
chmod 400 ~/.ssh/my-key
次に、公開鍵をaws側に登録したいので、以下コマンドを実行します。
aws ec2 import-key-pair \
--key-name my-key \
--public-key-material fileb://my-key.pub
これで、ローカルで作成した公開鍵をEC2 Instanceで使用できるようになったはずです。
fileb://の後ろは、相対パスか絶対パスにしてください。
今回は鍵のあるディレクトリにいるので、ファイル名のみの記載にしてます。
例:fileb://~/.ssh/my-key.pub
あとはterraformから起動させてみて、検証してみましょう!
起動させるコマンドは下記です。
terraform apply
実行後、こんな形で聞かれるので、yesと打てば作成されます。最後に緑色の箇所が出てくればOKです。
では早速ssh接続してみましょう。接続するためのIPアドレスの調べ方⇩
instanceのあとは、terraformのconfigファイルで指定したterraform内の名前です。
terraform state show aws_instance.app_server
たくさん情報が入っていますので、パブリックIPを探すのが面倒であればgrepで指定しましょう。
terraform state show aws_instance.app_server | grep public_ip
いよいよ、SSH接続をして終了です。
ssh -i ~/.ssh/my-key ubuntu@public_ip
私は今回Ubuntuのamiを選択していたので、ubuntu@となりますが、ご自分の環境に合わせて調整してください。
パブリックIPはInstance起動するごとに変わるので、繋がらないと思ったら要確認
最終的にログインできて、緑のような形でプロンプトが表示されれば完成です!











