🙆

【AWS】AWSCLIにてEC2インスタンスを構築する(VPC作成から実施)

2021/10/19に公開

はじめに

昨日、MacOSにAWSCLIをインストールする記事を執筆しました。
今回は、インストールしたAWSCLIを使用し、AWSにEC2インスタンスを構築する流れをアウトプットしたいと思います。

【AWS】MacOSにてAWSCLIを利用できるようにする。

今回構築する構成

前提条件

  • AWSCLIをインストールしたMacOSよりEC2インスタンス構築作業を実施
  • 作業用ユーザー作成済み

今回構築するEC2インスタンス

項目 設定
VM名 TestEC2
インスタンスタイプ t2.micro
OS AmazonLinux2
vCPU 1
メモリ(GiB) 1
ルートデバイス名 /dev/sda1:8GiB(/)

構築手順

①AWSに接続

コマンド
aws configure

実行した場合、以下が要求されるため入力する。

項目 入力内容 備考
AWS Access Key ID AKI****************** 先程控えたアクセスキーID
AWS Secret Access Key aa********************** 先程控えたシークレットアクセスキー
Default region name ap-northeast-1 リージョン(東京:ap-northeast-1)
Default output format text "text","JSON","table"のどれかを指定(今回はtext)
実行例
satton@satsuton ~ % aws configure
AWS Access Key ID [****************KQMD]: AKI******************
AWS Secret Access Key [****************hAIY]: aa*********************
Default region name [None]: ap-northeast-1
Default output format [None]: text
satton@satsuton ~ %

②VPC構築

1.VPCを構築する。

コマンド
aws ec2 create-vpc --cidr-block <CIDRブロック(IPv4)>
実行例
satton@satsuton ~ % aws ec2 create-vpc --cidr-block 10.10.0.0/16
VPC     10.10.0.0/16    dopt-40260f27   default False   555246305565    pending vpc-04a9922007e0c1c9b
CIDRBLOCKASSOCIATIONSET vpc-cidr-assoc-0332cdc05d169503a        10.10.0.0/16
CIDRBLOCKSTATE  associated
satton@satsuton ~ %

2.VPCにタグ付けをする。

コマンド
aws ec2 create-tags --resources <VPCID> --tags Key=Name,Value=<タグ名>
実行例
satton@satsuton ~ % aws ec2 create-tags --resources vpc-04a9922007e0c1c9b --tags Key=Name,Value=TestVPC
satton@satsuton ~ %

3.作成したVPCの情報を確認する。

コマンド
aws ec2 describe-vpcs --vpc-id <VPCID>
実行例
satton@satsuton ~ % aws ec2 describe-vpcs --vpc-id vpc-04a9922007e0c1c9b
VPCS    10.10.0.0/16    dopt-40260f27   default False   555246305565    available       vpc-04a9922007e0c1c9b
CIDRBLOCKASSOCIATIONSET vpc-cidr-assoc-0332cdc05d169503a        10.10.0.0/16
CIDRBLOCKSTATE  associated
TAGS    Name    TestVPC
satton@satsuton ~ %

③サブネットの作成

1.サブネット作成

コマンド
aws ec2 create-subnet --vpc-id <VPCID> \
> --cidr-block <CIDRブロック(IPv4)> \
> --availability-zone <アベイラビリティゾーン>
実行例
satton@satsuton ~ % aws ec2 create-subnet --vpc-id vpc-04a9922007e0c1c9b \
> --cidr-block 10.10.0.0/24 \
> --availability-zone ap-northeast-1a
SUBNET  False   ap-northeast-1a apne1-az4       251     10.10.0.0/24    False   False   555246305565    available       arn:aws:ec2:ap-northeast-1:555246305565:subnet/subnet-095e22dabe85bcf35 subnet-095e22dabe85bcf35        vpc-04a9922007e0c1c9b
satton@satsuton ~ %

2.サブネットにタグ付けをする。

コマンド
aws ec2 create-tags --resources <サブネットID> --tags Key=Name,Value=<タグ名>
実行例
satton@satsuton ~ % aws ec2 create-tags --resources subnet-095e22dabe85bcf35 --tags Key=Name,Value=PublicSubnet
satton@satsuton ~ %

3.サブネットが作成できていることを確認する。

コマンド
aws ec2 describe-subnets --subnet-id <サブネットID>
実行例
satton@satsuton ~ % aws ec2 describe-subnets --subnet-id subnet-095e22dabe85bcf35
SUBNETS False   ap-northeast-1a apne1-az4       251     10.10.0.0/24    False   False   False   555246305565    available       arn:aws:ec2:ap-northeast-1:555246305565:subnet/subnet-095e22dabe85bcf35 subnet-095e22dabe85bcf35        vpc-04a9922007e0c1c9b
TAGS    Name    PublicSubnet
satton@satsuton ~ %

④インターネットゲートウェイ作成

1.インターネットゲートウェイを作成する。

コマンド
aws ec2 create-internet-gateway
実行例
satton@satsuton ~ % aws ec2 create-internet-gateway
INTERNETGATEWAY igw-0a1f89904b2a52dcc   555246305565
satton@satsuton ~ % 

2.VPCに作成したインターネットゲートウェイを紐付ける。

コマンド
aws ec2 attach-internet-gateway --internet-gateway-id <インターネットゲートウェイID> --vpc-id <VPCID>
実行例
satton@satsuton ~ % aws ec2 attach-internet-gateway --internet-gateway-id igw-0a1f89904b2a52dcc --vpc-id vpc-04a9922007e0c1c9b
satton@satsuton ~ %

3.インターネットゲートウェイにタグ付けを実施する。

コマンド
aws ec2 create-tags --resources <インターネットゲートウェイID> --tags Key=Name,Value=<タグ名>
実行例
satton@satsuton ~ % aws ec2 create-tags --resources igw-0a1f89904b2a52dcc --tags Key=Name,Value=TestGateway
satton@satsuton ~ %

4.作成したインターネットゲートウェイの情報を確認する。

コマンド
aws ec2 describe-internet-gateways --internet-gateway-id <インターネットゲートウェイID>
実行例
satton@satsuton ~ % aws ec2 describe-internet-gateways --internet-gateway-id igw-0a1f89904b2a52dcc
INTERNETGATEWAYS        igw-0a1f89904b2a52dcc   555246305565
ATTACHMENTS     available       vpc-04a9922007e0c1c9b
TAGS    Name    TestGateway
satton@satsuton ~ % 

⑤ルートテーブルの作成とルートの紐付け

1.ルートテーブルを作成する。

コマンド
aws ec2 create-route-table --vpc-id <VPCID>
実行例
satton@satsuton ~ % aws ec2 create-route-table --vpc-id vpc-04a9922007e0c1c9b
ROUTETABLE      555246305565    rtb-0598bfef79c123779   vpc-04a9922007e0c1c9b
ROUTES  10.10.0.0/16    local   CreateRouteTable        active
satton@satsuton ~ %

2.ルートテーブルにタグ付けをする。

コマンド
aws ec2 create-tags --resources <ルートテーブルID> --tags Key=Name,Value=<タグ名>
実行例
satton@satsuton ~ % aws ec2 create-tags --resources rtb-0b8a7b808937d7298  --tags Key=Name,Value=TestRouteTable
satton@satsuton ~ %

3.ルートを作成する。

コマンド
aws ec2 create-route --route-table-id <ルートテーブルID> \
--destination-cidr-block 0.0.0.0/0 \
--gateway-id <インターネットゲートウェイID>
実行例
satton@satsuton ~ % aws ec2 create-route --route-table-id rtb-0b8a7b808937d7298 \
--destination-cidr-block 0.0.0.0/0 \
--gateway-id igw-0a1f89904b2a52dcc
True
satton@satsuton ~ %

4.サブネットとルートテーブルを関連付ける。

コマンド
aws ec2 associate-route-table --route-table-id <ルートテーブルID> \
--subnet-id <サブネットID>
実行例
satton@satsuton ~ % aws ec2 associate-route-table --route-table-id rtb-0b8a7b808937d7298 \
--subnet-id subnet-095e22dabe85bcf35
rtbassoc-0af94899748cc0539
ASSOCIATIONSTATE        associated
satton@satsuton ~ %

5.パブリックIPアドレスが自動的に割り当てられるよう設定する。

コマンド
aws ec2 modify-subnet-attribute --subnet-id <サブネットID> --map-public-ip-on-launch
実行例
satton@satsuton ~ % aws ec2 modify-subnet-attribute --subnet-id  subnet-095e22dabe85bcf35  --map-public-ip-on-launch
satton@satsuton ~ %

6.ルートテーブルの情報を確認する。

コマンド
aws ec2 describe-route-tables --route-table-id <ルートテーブルID>
実行例
satton@satsuton ~ % aws ec2 describe-route-tables --route-table-id rtb-0b8a7b808937d7298
ROUTETABLES     555246305565    rtb-0b8a7b808937d7298   vpc-04a9922007e0c1c9b
ASSOCIATIONS    True    rtbassoc-09c93a4fcd16d39be      rtb-0b8a7b808937d7298
ASSOCIATIONSTATE        associated
ASSOCIATIONS    False   rtbassoc-0af94899748cc0539      rtb-0b8a7b808937d7298   subnet-095e22dabe85bcf35
ASSOCIATIONSTATE        associated
ROUTES  10.10.0.0/16    local   CreateRouteTable        active
ROUTES  0.0.0.0/0       igw-0a1f89904b2a52dcc   CreateRoute     active
TAGS    Name    TestRouteTable
satton@satsuton ~ %

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

1.セキュリティグループを作成する。

コマンド
aws ec2 create-security-group --group-name "<セキュリティグループ名>" --description "<セキュリティグループの説明>" --vpc-id <VPCID>
実行例
satton@satsuton ~ % aws ec2 create-security-group --group-name "Test-Scg" --description "This is test security group" --vpc-id vpc-04a9922007e0c1c9b
sg-049e2aa1c9d101b85
satton@satsuton ~ %

2.作成したセキュリティグループにインバウンドルールを設定する。

コマンド
aws ec2 authorize-security-group-ingress --group-id <セキュリティグループID> \
> --protocol tcp --port 22 --cidr <マイIP>
実行例
satton@satsuton ~ % aws ec2 authorize-security-group-ingress --group-id sg-049e2aa1c9d101b85 \
> --protocol tcp --port 22 --cidr 111.239.164.112/32
True
SECURITYGROUPRULES      111.239.164.112/32      22      sg-049e2aa1c9d101b85    555246305565    tcp     False   sgr-0e52e133955f6e9c0   22
satton@satsuton ~ % 

111.239.164.112/32はマイIPになります。(セキュリティグループ作成時の画面にて確認)

3.作成したセキュリティグループの情報を確認する。

コマンド
aws ec2 describe-security-groups --group-id <セキュリティグループID>
実行例
satton@satsuton ~ % aws ec2 describe-security-groups --group-id sg-049e2aa1c9d101b85
SECURITYGROUPS  This is test security group     sg-049e2aa1c9d101b85    Test-Scg        555246305565    vpc-04a9922007e0c1c9b
IPPERMISSIONS   22      tcp     22
IPRANGES        111.239.164.112/32
IPPERMISSIONSEGRESS     -1
IPRANGES        0.0.0.0/0
satton@satsuton ~ % 

⑦EC2インスタンスにアクセスするためのキーペアの作成

1.キーペアを作成する。

コマンド
aws ec2 create-key-pair --key-name <キーペア名> --query 'KeyMaterial' --output text > <ファイル出力先>
実行例
satton@satsuton ssh % cd /Users/satton/ssh/
satton@satsuton ssh % aws ec2 create-key-pair --key-name TestKeyPair --query 'KeyMaterial' --output text > TestKeyPair.pem
satton@satsuton ssh %

※上記の例では、キーペアを格納したいディレクトリに移動し、キーペアを作成している。

2.作成したキーペアのパーミッションを変更する。

コマンド
chmod 400 TestKeyPair.pem
実行例
satton@satsuton ssh % ls -l TestKeyPair.pem
-rw-r--r--  1 satton  staff  1679 10 19 12:33 TestKeyPair.pem
satton@satsuton ssh % chmod 400 TestKeyPair.pem
satton@satsuton ssh %
satton@satsuton ssh % ls -l TestKeyPair.pem
-r--------  1 satton  staff  1679 10 19 12:33 TestKeyPair.pem
satton@satsuton ssh %

⑧EC2インスタンス作成

1.EC2インスタンス作成

  • 必要パラメータ
項目 設定 備考
イメージID ami-00f045aed21a55240 「AmazonLinux2」のAMI
カウント 1 作成するEC2インスタンスの台数
インスタンスタイプ t2.micro インスタンスのサイズ
キー名 TestKeyPair 作成したキー名
※「.pem」はつけない。
セキュリティグループID sg-049e2aa1c9d101b85 作成したセキュリティグループのID
サブネットID subnet-095e22dabe85bcf35 作成したパブリックサブネットのID
タグ Key=Name,Value=TestEC2 EC2インスタンスに「TestEC2」を付与
  • コマンド
コマンド
aws ec2 run-instances \
--image-id ami-00f045aed21a55240 \
--count 1 \
--instance-type t2.micro \
--key-name TestKeyPair \
--security-group-ids sg-049e2aa1c9d101b85 \
--subnet-id subnet-095e22dabe85bcf35 \
--tag-specific 'ResourceType=instance,Tags=[{Key=Name,Value=TestEC2}]'
実行例
satton@satsuton ssh % aws ec2 run-instances \
--image-id ami-00f045aed21a55240 \
--count 1 \
--instance-type t2.micro \
--key-name TestKeyPair \
--security-group-ids sg-049e2aa1c9d101b85 \
--subnet-id subnet-095e22dabe85bcf35 \
--tag-specific 'ResourceType=instance,Tags=[{Key=Name,Value=TestEC2}]'

555246305565    r-0192b1f31f62f9f6d
INSTANCES       0       x86_64  53ae6151-336d-467c-b15d-7ea5f0939f11    False   True    xen     ami-00f045aed21a55240   i-0a28bee7ceaea84f9     t2.micro        TestKeyPair     2021-10-19T03:56:31+00:00       ip-10-10-0-12.ap-northeast-1.compute.internal   10.10.0.12
              /dev/xvda       ebs     True            subnet-095e22dabe85bcf35        hvm     vpc-04a9922007e0c1c9b
CAPACITYRESERVATIONSPECIFICATION        open
CPUOPTIONS      1       1
ENCLAVEOPTIONS  False
METADATAOPTIONS enabled disabled        1       optional        pending
MONITORING      disabled
NETWORKINTERFACES               interface       06:69:22:78:0a:13       eni-05007c8b80e4bc45b   555246305565    10.10.0.12      True    in-use  subnet-095e22dabe85bcf35        vpc-04a9922007e0c1c9b
ATTACHMENT      2021-10-19T03:56:31+00:00       eni-attach-05adf634ea5b6343d    True    0       0       attaching
GROUPS  sg-049e2aa1c9d101b85    Test-Scg
PRIVATEIPADDRESSES      True    10.10.0.12
PLACEMENT       ap-northeast-1a         default
SECURITYGROUPS  sg-049e2aa1c9d101b85    Test-Scg
satton@satsuton ssh % 

2.EC2インスタンスが作成されたことを確認

コマンド
aws ec2 describe-instances --instance-id <インスタンスID>

→STATEが「running」であることを確認し、「パブリックIPアドレス」を控える。

実行例
satton@satsuton ssh % aws ec2 describe-instances --instance-id i-0a28bee7ceaea84f9
RESERVATIONS    555246305565    r-0192b1f31f62f9f6d
INSTANCES       0       x86_64  53ae6151-336d-467c-b15d-7ea5f0939f11    False   True    xen     ami-00f045aed21a55240   i-0a28bee7ceaea84f9     t2.micro        TestKeyPair     2021-10-19T03:56:31+00:00       ip-10-10-0-12.ap-northeast-1.compute.internal   10.10.0.12
              52.68.113.84    /dev/xvda       ebs     True            subnet-095e22dabe85bcf35        hvm     vpc-04a9922007e0c1c9b
BLOCKDEVICEMAPPINGS     /dev/xvda
EBS     2021-10-19T03:56:32+00:00       True    attached        vol-0a7315611a7ddf7d8
CAPACITYRESERVATIONSPECIFICATION        open
CPUOPTIONS      1       1
ENCLAVEOPTIONS  False
HIBERNATIONOPTIONS      False
METADATAOPTIONS enabled disabled        1       optional        applied
MONITORING      disabled
NETWORKINTERFACES               interface       06:69:22:78:0a:13       eni-05007c8b80e4bc45b   555246305565    10.10.0.12      True    in-use  subnet-095e22dabe85bcf35        vpc-04a9922007e0c1c9b
ASSOCIATION     amazon          52.68.113.84
ATTACHMENT      2021-10-19T03:56:31+00:00       eni-attach-05adf634ea5b6343d    True    0       0       attached
GROUPS  sg-049e2aa1c9d101b85    Test-Scg
PRIVATEIPADDRESSES      True    10.10.0.12
ASSOCIATION     amazon          52.68.113.84 ← パブリックIPアドレス
PLACEMENT       ap-northeast-1a         default
SECURITYGROUPS  sg-049e2aa1c9d101b85    Test-Scg
STATE   16      running ← ここを確認(runningになっていればOK)
TAGS    Name    TestEC2
satton@satsuton ssh % 

3.EC2インスタンスへの接続確認

コマンド
ssh -i "<pemファイル指定>" ec2-user@<パブリックIPアドレス>
実行例
satton@satsuton ssh % ssh -i "TestKeyPair.pem" ec2-user@52.68.113.84
The authenticity of host '52.68.113.84 (52.68.113.84)' can't be established.
ECDSA key fingerprint is SHA256:iFQE7Ti9IfkwibxDXimZkQjHDLZgt1X0rEcoZdhSdLs.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '52.68.113.84' (ECDSA) to the list of known hosts.

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

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

参考

【入門】AWS CLIでEC2インスタンスを立ち上げてみた!
[AWS]コマンドラインからVPCを作成してみよう!その1[AWSCLI]

Discussion