【AWS】EC2インスタンスを作る方法3つ【AWSコンソール/AWS CLI/Terraform】

AWS, サーバーサイド, 便利ツール

AWSのEC2インスタンスを作る方法はいくつかあります。
コンソールでポチポチ操作するのが直感的で簡単なのですが、これを繰り返し行ったり複数人で行ったりすると、手作業なのでミスが起きたり手間になったりの原因になります。

コンソールでの作成方法をベースに、CLIとTerraformでの作成方法の違いを見ていきたいと思います。

AWS CLIはコマンドベースでAWSコンソールの操作ができるもの。Terraformは設定ファイルを作っておけば勝手に全部やってくれるもの。らしい。

スポンサーリンク

前提

  • 解説で使用しているOS mac OS 10.15.3
  • AWSアカウント、IAMユーザー作成済
  • ACCESS_KEY_ID, SECRET_ACCESS_KEY発行済(参考:AWSアクセスキー作成 – Qiita

※ 僕も初心者なので間違ってるところもあるかもしれませぬが、どうかご容赦を。

『AWSコンソール』からのEC2インスタンス作成

まずはインスタンスを作成するアカウントでログインし、ダッシュボードを開きます。

キーペアの作成

いきなりインスタンスを作り始める前に、ログイン情報を暗号化するために、プライベートキーを使って安全にインスタンスにアクセスできるようにします。

  1. ダッシュボード>キーペア>Create key pair
  2. Nameを指定し、pemを選択してCreate key pair

ダウンロードされた.pemファイルはインスタンスを作るときに使います。
~/.ssh/aws_key.pem など、適当な場所と名前で保存します。

セキュリティグループの作成

セキュリティグループというのはAWSのファイアウォール機能で、受信(インバウンド)と送信(アウトバウンド)の規則を設定できます。(公式ドキュメント
OSに到達する前にネットワークレベルでバケットをフィルタリングできるので、EC2やRDSなど様々なリソースと紐付けるのに使います。

  1. ダッシュボード>セキュリティグループ
  2. セキュリティグループの作成>インバウンド>ルールの追加

SSHで接続したいので、こんな感じで設定します。

  • タイプ:SSH
  • プロトコル:TCP(固定)
  • ポート範囲:22(固定)
  • ソース:カスタム、0.0.0.0/0
  • 説明: 適当に(日本語不可)

アウトバウンドはデフォルトで「全てのトラフィック」が入っていますが、そのままの設定で進みます。

インスタンスの作成

  1. ダッシュボード>インスタンス>インスタンスの作成

インスタンスの設定

  • AMI:Amazon Linux 2 AMI (HVM), SSD Volume Type
  • Type:t2.micro(無料利用枠の対象)
  • 詳細の設定:デフォルト
  • ストレージ:デフォルト
  • タグの追加:なし
  • セキュリティグループの追加:既存のセキュリティグループの追加>作成したセキュリティグループ
  • 既存のキーペアの作成>作成したキーペア名を選択

インスタンスを作成して、しばらくすると起動します。

EC2にSSHで接続

Terminalで次のようにキーペアとパブリックIPを指定してSSHでEC2にログインします。

-i の後には保存したキーペアのパス、ec2-userの後はインスタンス一覧の「IPv4 パブリックIP」を入力します。

接続ができると「Are you sure you want to continue connecting (yes/no)?(接続を続行しますか?)」と聞かれるのでyesと入力します。
見事、SSHで接続できるようになりました。

 

『AWS CLI』からのEC2インスタンス作成

AWS CLIはMacであればTerminalがあればコマンド打ち込むだけですが、awsコマンドを使うにはawscliのインストールが必要です。

インストールしたら $ aws configure などで設定ファイルを作ってあげるんですが、長くなるのでここでは割愛。

基本的にコマンドは $ aws (サービス名) (コマンド) –(パラメータ名) (パラメータ) で記述します。パラメータに何を書いたらわからない場合はコンソールを見ると説明があったりします。

キーペアの作成

キーペアの一覧を表示する

An error occurred (UnauthorizedOperation) when calling the DescribeKeyPairs operation: You are not authorized to perform this operation.

こんなエラーが出るときは、~/.aws/configか~/.aws/credentialsの設定が間違ってるかもです。

キーペアの作成

コンソールでいうとこの画面です。

  • –key-name キーペア名
  • –query ‘KeyMaterial’を指定すると「unencryptedでPEMエンコードされたRSA秘密鍵」を生成する
  • –output 保存するキーペアファイルのパス

パラメータが長くて見にくいので ‘\’ で改行してますが、1行でも実行できるし、このままコピペしても実行できます。

きちんと作成されたか確認

作ったキーペア名で絞り込んで、ヒットすればきちんと作成されてます。

パーミッションの変更

セキュリティグループの作成

セキュリティグループの一覧を表示する

特にセキュリティグループを設定したことがない場合、デフォルトのグループが1つあるだけだと思います。

セキュリティグループの作成

コンソールだとこの画面です。

  • –group-name セキュリティグループ名
  • –description 説明
  • –vpc-id VPC(設定しなければデフォルト)

インバウンドルールの設定

  • –group-id 上で作成したセキュリティグループのID
  • –protocol プロトコル
  • –port ポート番号(SSHなら22番)
  • –cidr ソース

セキュリティグループが作成できたか確認

インスタンスの作成

インスタンスの一覧を表示する

–queryでインスタンスIDだけを出すように絞っています。絞らないと大量の情報が出てきてしまうので。

インスタンスの作成

  • –image-id AMIのID(下図の赤枠部分。describe-imagesコマンドで自分で作成することもできる)

  • –count 起動するインスタンス数
  • –instance-type インスタンスタイプ
  • –key-name キーペア名
  • –security-group-ids セキュリティグループID
  • –subnet-id サブネットID

これを実行すると即時インスタンスができて起動が始まります。

インスタンスができたか確認する

作成前の実行結果よりInstanceId(i-00000000000000000)が増えていればOK。

EC2にSSHで接続

方法と入力内容は2.4と同じです。

パブリックIPは以下で取得できます。

 

『Terraform』からのEC2インスタンス作成

Terraform 0.12系を使って解説します。

準備(Terraformの設定)

コンソールとCLIは順番にやりたいことを実行していましたが、Terraformではファイルに「やることリスト」を記述してからコマンドを実行するだけで、一気にTerraformがやってくれます。

Terraformの簡単な操作と設定を踏まえてインスタンスを作成します。差分管理や変数定義などは今回割愛します。

Terraformのインストール

おきまり。Terraformをまずはインストールしてください。

続いて、適当なディレクトリに「sg.tf」「main.tf」ファイルをそれぞれ作成します。

キーペアの作成

Terraformでもキーペアを作れるのですが、少し手順が増える(正直に言うとよくわからない)ので今回はコンソールかCLIで作っておき(2.2か3.2を参照)、「aws_key」というキーペアがある前提とします。

セキュリティグループの作成

sg.tf ファイルの作成

sg.tf」ファイルをエディタで開き、次のように入力して保存します。.tfファイルはHCLという言語で書きます。

細かい説明は省略しますが、ingressというのがインバウンドのルールで、egressがアウトバウンドのルールです。
設定内容は2.2、3.2と同じです。

もちろん、このファイルを作って保存しただけではセキュリティグループは作られませんが、一旦このまま進みます。

インスタンスの作成

main.tf ファイルの作成

次にsg.tfファイルと同じ階層に「main.tf」ファイルを作成します。

provider “aws”の部分にはEC2だけでなくAWSの様々なリソースで共通する認証情報や環境変数を設定できます。

provider “aws”
  • region(必須項目) AWSリージョン(ap-northeast-1は東京リージョン)
  • profile AWSプロファイル名
  • assume_role スイッチロールするロール名

resource “aws_instance”の部分に作成するインスタンスの情報をセットしていきます。
設定項目はTerraformの公式ドキュメントに詳しく載っていますが、必要最低限だけ記述しました。

aws_instance
  • ami(必須項目) AMIのID
  • key_name キーペア名
  • instance_type インスタンスタイプ
  • tags.name コンソール上で表示されるNameの部分

編集したら保存します。

terraform init の実行

Terminalなどでmain.tfがある階層に移動し、次のコマンドを実行します。

Terraformの実行に必要なプロバイダ用のバイナリファイルをダウンロードしてきます。

と表示されたら成功です。

terraform plan の実行

自分が作成したtfファイルを実行すると何が起こるかを表示します。
入力内容にエラーが有る場合、ここで判明します。

作成するインスタンスの情報(すでに作成済みインスタンスの場合は差分)がズラッと表示されます。
内容を確認し、エラーがなければapplyする準備は完了です。

terraform apply の実行

planの内容で問題がなければ実際にAWSに反映させるコマンドを打ちます。

planをしたときと同じ内容が表示され、本当に実行するか?と聞かれます。

「yes」と入力。どん!

と表示されたらインスタンス作成成功です。

EC2にSSHで接続

2.4、3.4と同じです。

接続できればTerraformでのインスタンス作成とSSH接続は完了です。

まとめ

一見難しそうなCLIとかTerraformも、覚えてしまえばそっちのほうが楽で確実というこの世の摂理。


参考文献