【入門】AWS CLIでEC2インスタンスを立ち上げてみた!
みなさんAWS CLIは利用していますか。
AWS CLIを利用すると、AWSでのインフラ構築をコマンドで行えるようになります。
今回は自分がCLIを初めて使用した時の、EC2インスタンスを起動するまでの手順をまとめたので解説します。
この記事は アイソルート Advent Calendar 2020 の21日目の記事です。
こんにちは。モバイルソリューショングループのnakada.rです。
AWSを利用しはじめてからよく名前を耳にしていたAWS CLI。
実際にどういったことができるのかあまり理解していませんでした。
今回はCLIからEC2インスタンスを起動することを通して、CLIでどういった操作ができるのか試してみました。
目次
AWS CLIとは?
“AWS コマンドラインインターフェース (CLI) は、AWS サービスを管理するための統合ツールです。
ダウンロードおよび設定用の単一のツールのみを使用して、コマンドラインから AWS の複数のサービスを制御し、スクリプトを使用してこれらを自動化することができます。”
公式サイトに記載してある説明を引用させていただきました。
AWS CLIを使用することでコマンドラインからサービスの構築を行うことができます。
GUIであるマネージメントコンソールを利用することなく、コマンドベースで全てのサービスを操作可能です。
CLIコマンドの基本
CLIコマンドを理解するために以下の簡単な例をみてみましょう。
$ aws ec2 create-vpc --cidr-block 0.0.0.0/0 // aws + コマンド + サブコマンド + パラメータ
このようにコマンドの構成は大きく4つに分けられ
- aws: 固定のおまじない
- コマンド: AWSサービスを指定
- サブコマンド: 実行する操作を指定
- パラメータ: 操作に必要な一般的な CLI オプションまたはパラメータ
となっています。
これさえ覚えていれば記述してあるコマンドが何を操作しているのかすぐに理解できますので、押さえておきましょう!
EC2インスタンス起動手順
では実際に、CLIを使ってEC2インスタンスを起動するための環境を構築していきます。
なお、AWS CLIはあらかじめインストールしてあり、コマンドを実行できる状態になっていることとします。
VPCの構築
最初にEC2インスタンスを配置するVPCを構築します。
以下コマンドを実行することで新しいVPCを作成することができます。
パラメータでCIDRを指定していることがわかりますね。
早速実行してみましょう!
$ aws ec2 create-vpc --cidr-block 10.10.0.0/16
実行後、上の画像のようなレスポンスが返ってきます。
無事にVPCが作成されていることが確認できましたね。
VpcIdに関しては今後の設定に利用するのでメモしておきましょう。
サブネットの作成
VPCときたらサブネットの作成です。
以下のコマンドを実行してサブネットを作成しましょう!
$ aws ec2 create-subnet --vpc-id vpc-038ca5f041ba10038 \ --cidr-block 10.10.0.0/24 \ --availability-zone ap-northeast-1a
無事に作成したサブネットの情報がレスポンスとして返ってきたら成功です。
コマンドのプロパティの記述が少し長くなっていますが、順番にみていくと
- サブネットを作成するVPCのid
- サブネットのCIDRブロック
- サブネットを配置するアベイラビリティーゾーン
と設定している項目が理解しやすいコマンドになっていますね。
インターネットゲートウェイの構築
次にVPC内のリソースがインターネットと接続するためのインターネットゲートウェイを作成します。
以下のコマンドを実行することでインターネットゲートウェイの作成、およびVPCへのアタッチが可能です。
<>内のプロパティはご自身で作成したリソースのIDに適宜置き換えてください。
$ aws ec2 create-internet-gateway // インターネットゲートウェイの作成 $ aws ec2 attach-internet-gateway --internet-gateway-id <作成したインターネットゲートウェイid> \ --vpc-id <メモしたVpcId> // 作成したインターネットゲートウェイをアタッチ
これでインターネットゲートウェイも作成完了です。
だんだん要領は掴めてきたかと思います!
ルートテーブルの作成とルートの紐付け
ルートテーブルを作成してインターネットゲートウェイとサブネットを紐付けていきます。
以下コマンドを実行してルートテーブルを作成しましょう。
$ aws ec2 create-route-table --vpc-id <VpcId>
レスポンスで返ってきたルートテーブルIDをメモしましょう。
そして以下コマンドでルートを作成します。
$ aws ec2 create-route --route-table-id <ルートテーブルID> \ --destination-cidr-block 0.0.0.0/0 \ --gateway-id <インターネットゲートウェイID> //
これはインターネットゲートウェイの全てのトラフィック(0.0.0.0/0)をポイントとするルートテーブルでルートを作成しています。
この状態ではまだサブネットとルートテーブルは関連づけられていません。
サブネットがインターネットゲートウェイを介して外部と通信ができるようにするため、
インターネットゲートウェイと紐付けましょう。
以下コマンドを実行します。
$ aws ec2 associate-route-table --route-table-id rtb-0ffe70c354d2cb71f \ --subnet-id subnet-05b63b261a2dfebf7 //ルートをルートテーブルに紐付け
これでサブネットがVPC外部と通信できる状態、すなわちパブリックサブネットになりました!
加えてサブネット内で起動したインスタンスにパブリックIPアドレスが自動的に割り当てられるようにします。
aws ec2 modify-subnet-attribute --subnet-id <サブネットID> --map-public-ip-on-launch
この設定をしないとサブネット内のインスタンスにパブリックIPアドレスが付与されずアクセスできません。
また、EC2インスタンスは再起動するとIPアドレスが変更される仕様のため、
その変更を手動で設定する必要もこのコマンドで無くなります。
セキュリティブループの作成
以下のコマンドを実行してEC2インスタンスに割り当てるセキュリティグループを作成します。
aws ec2 create-security-group --group-name "test-scg" --description "This is test security group" --vpc-id <VPC ID>
セキュリティグループを正しく設定しておかないと、
せっかくEC2インスタンスを起動しても外部からアクセスできないただの箱になってしまいます。(悲しい…)
以下コマンドを実行してセキュリティグループのインバウンドルールを設定します。
$ aws ec2 authorize-security-group-ingress --group-id <セキュリティグループID> \ --protocol tcp --port 22 --cidr 0.0.0.0/0
この設定により22番ポート(SSH)による、EC2インスタンスへの全てのアクセス(0.0.0.0/0)が許可されました。
なおこの設定は誰でもアクセスできる無防備な状態ですので、実際に運用する際にはしっかり設定しましょう!
EC2にアクセスするためのキーペアの作成
EC2インスタンスにアクセスするために使用するキーペアも事前に作成します。
$ aws ec2 create-key-pair --key-name TestKeyPair --query 'KeyMaterial' --output text > TestKeyPair.pem
作業ディレクトリにpemファイルがダウンロードされていれば成功です。
忘れずにpemファイルに読み込み権限も与えておきましょう。
chmod 400 TestKeyPair.pem
以上でキーペアは準備完了です。
EC2インスタンスの起動
いよいよお待ちかね、EC2インスタンスを起動します!
これまでに作成したセキュリティグループID, サブネットIDを使用します。
今回のインスタンスの構成は、テスト起動の王道である(だと思っている) Amazon Linux 2 AMI + t2.microを使用します。
以下コマンドを実行してEC2インスタンスを起動しましょう。
$ aws ec2 run-instances \ --image-id ami-00f045aed21a55240 \ --count 1 \ --instance-type t2.micro \ --key-name TestKeyPair \ --security-group-ids sg-03f4cd9f726c9b3f8 \ --subnet-id subnet-05b63b261a2dfebf7
レスポンスが返ってきたらインスタンスIDをメモしておきましょう。
インスタンスが無事に起動したか以下コマンドを実行して確認します。
aws ec2 describe-instances --instance-id <インスタンスID>
ステータスがrunningになっていることが確認できたら起動成功です。
最後に作成したキーペアを使用してEC2インスタンスにSSH接続してみましょう。
ssh -i "TestKeyPair.pem" ec2-user@<インスタンスのパブリックIPアドレス>
見覚えのあるコンソール画面にたどり着けました!
さいごに
今回はAWS CLI を使ったEC2インスタンスの起動方法について解説しました。
CLIを使うことでEC2を起動する環境の構築とインスタンスの起動をコンソールから行うことができました!
それぞれのコマンドも何をしているのか直感的で理解しやすかったかと思います。
各リソースの設定もすべてパラメータとして記述するため、各サービスでどういった設定をする必要があるのかの勉強にもなりそうですね。
細かい設定値まで理解したうえでAWSインフラを構築できるエンジニアになりたいものです。
明日の記事は namiki.t さんによる 【ノーコード】Amazon Honeycode で Todo リストを作ってみたです、お楽しみに!