yy16ki’s diary


スポンサードリンク

AWS CLIでEC2インスタンスの起動から接続まで

業務にてawsを使用することになりました.環境構築には,AWS CLI(Command Line Interface)を使用することにもなったので、awsCLIの操作に慣れるために,簡単な構成作成の手順を残しておきます.

作成対象

今回はaws初心者がよくはじめに作成するであろう,下記の構成をCLIで作成します.

f:id:yy16ki:20220219164129p:plain
作成対象

前提条件

環境構築には,admin権限を持つIAMユーザーを使用します.
CLIでの作業用に,アクセスキーID・シークレットアクセスキーは発行済みとしています.

CLIでの作業

タグ付け用の変数を定義しておきます.

NAME=practice

VPCの作成

VPCは,create-vpcコマンドで作成できます.

aws ec2 create-vpc \
    --cidr-block 10.0.0.0/16 \
    --instance-tenancy default \
    --tag-specifications "ResourceType=vpc,Tags=[{Key=Name,Value=${NAME}-vpc}]"

作成後はIDを取得しておくと,後々の作業がしやすいです.

VPC_ID=$(aws ec2 describe-vpcs --filters Name=tag:Name,Values=${NAME}-vpc \
    --query "Vpcs[*].VpcId" \
    --output text)

実行後,マネジメントコンソールでも確認しておきます.
「practice-vpa」が作成されています.

f:id:yy16ki:20220219165338p:plain
VPCの作成

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

インターネットゲートウェイを作成は,create-internet-gatewayを使用します.

NTERNET_GATEWAY_ID=$(aws ec2 create-internet-gateway \
    --tag-specifications "ResourceType=internet-gateway,Tags=[{Key=Name,Value=${NAME}-igw}]" \
    --query "InternetGateway.InternetGatewayId" \
    --output text)

作成できたらattach-internet-gatewayで先ほどのVPCのIDを指定し,紐付けます.

aws ec2 attach-internet-gateway \
    --internet-gateway-id $INTERNET_GATEWAY_ID \
    --vpc-id $VPC_ID

マネージメントコンソールからも確認します.
状態が「Attached」で,VPC IDが先程作成したVPCのものになっているはずです.

f:id:yy16ki:20220219165857p:plain
インターネットゲートウェイVPCにアタッチ

Subnetの作成

VPC内に,パブリックサブネットを作成します.アベイラビリティーゾーンを指定する場合は、引数[--availability-zone <value>] [--availability-zone-id <value>] のいずれか一方のみの指定でOKです. ここでは、idとしてus-west-2aを指定しています.また,サブネット作成とあわせてIDも変数に格納しています.

PUBLIC_SUBNET_ID=$(aws ec2 create-subnet \
    --vpc-id $VPC_ID \
    --cidr-block 10.0.1.0/24 \
    --availability-zone-id usw2-az1 \
    --tag-specifications "ResourceType=subnet,Tags=[{Key=Name,Value=${NAME}-public-subnet-2a}]" \
    --query "Subnet.SubnetId" \
    --output text)

アベイラビリティーゾーンとして指定可能なIDや名称はaws ec2 describe-availability-zonesで確認可能です.

ルートテーブルの作成と編集

create-route-tableで,ルートテーブルを作成します.

PUBLIC_ROUTE_TABLE_ID=$(aws ec2 create-route-table \
    --vpc-id $VPC_ID \
    --tag-specifications "ResourceType=route-table,Tags=[{Key=Name,Value=${NAME}-public-route}]" \
    --query "RouteTable.RouteTableId" \
    --output text)

作成したルートテーブルに,インターネットゲートウェイへのルートを登録します.

aws ec2  create-route \
    --route-table-id $PUBLIC_ROUTE_TABLE_ID \
    --destination-cidr-block 0.0.0.0/0 \
    --gateway-id $INTERNET_GATEWAY_ID

インターネットゲートウェイへのルートが登録されたルートテーブルをサブネットに紐づけることで,パブリックサブネットとします.

aws ec2 associate-route-table \
    --route-table-id $PUBLIC_ROUTE_TABLE_ID \
    --subnet-id $PUBLIC_SUBNET_ID

f:id:yy16ki:20220219171402p:plain
マネジメントコンソール

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

EC2に付与するセキュリティグループを作成します.

SECURITY_GROUP_ID=$(aws ec2 create-security-group \
  --group-name ${NAME}-ec2-sg \
  --description ${NAME}-ec2-sg \
  --vpc-id $VPC_ID \
  --tag-specifications "ResourceType=security-group,Tags=[{Key=Name,Value=${NAME}-ec2-sg}]" \
  --query "GroupId" --output text)

今回は,自身のIPアドレスからのSSH接続を許可することとします.
curlコマンドでIPアドレスを取得します.

IP=$(curl -s https://api.ipify.org)

作成したセキュリティグループのインバウンドルールに、自身のIPからのSSH接続を許可するルールを追加します.

aws ec2 authorize-security-group-ingress \
  --group-id $SECURITY_GROUP_ID \
  --protocol tcp \
  --port 22 \
  --cidr ${IP}/32

キーペアの作成

EC2インスタンスへのSSH接続用のキーペアを作成します.下記のコマンドは、キーペアの作成と,作業フォルダへのpemファイル作成を実行しています.

aws ec2 create-key-pair \
  --key-name ${NAME}-key \
  --query "KeyMaterial" \
  --output text > ${NAME}-key.pem

EC2インスタンスの作成

作成するEC2インスタンスのAMI IDを指定します.

AMI_ID=$(aws ssm get-parameters --names /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 --query "Parameters[*].Value" --output text) && echo ${AMI_ID}

出力

ami-090bc08d7ae1f3881

こちらは,2022/2時点で無料利用枠で使用開始可能なAMIになります.

f:id:yy16ki:20220219172912p:plain
マシンイメージ

プライベートIPアドレスも指定してみます.プライベートIPアドレスは、サブネットの範囲内であることに注意します.

PRIVATE_IP_ADDRESS="10.0.1.11"

run-instancesインスタンスを起動します.特に引数を指定しない場合は,デフォルトの仕様が適用されますが,キーペアを使用する際はここで--key-nameで対象のキーペアを指定する必要があります.
インスタンスタイプは引数--instance-typet2.microを指定しています.(デフォルトではm1.small)となります.

INSTANCE_ID=$(aws ec2 run-instances \
  --image-id $AMI_ID \
  --instance-type t2.micro \
  --count 1 \
  --subnet-id $PUBLIC_SUBNET_ID \
  --associate-public-ip-address \
  --private-ip-address $PRIVATE_IP_ADDRESS \
  --tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=${NAME}-ec2}]" \
  --security-group-ids $SECURITY_GROUP_ID \
  --key-name ${NAME}-key \
  --query "Instances[*].InstanceId" \
  --output text)

しばらくして,インスタンスが作成されたら,パブリックIPアドレスを取得します.

PUBLIC_IP_ADDRESS=$(aws ec2 describe-instances --instance-id $INSTANCE_ID --query "Reservations[*].Instances[*].PublicIpAddress" --output text)

上述の手順で作成したキーペアとインスタンスのパブリックIPアドレスを指定し,下記コマンドでSSH接続を行います.

ssh -i ${NAME}-key.pem ec2-user@$PUBLIC_IP_ADDRESS

ターミナルに下記の出力が表示されればOKです.

f:id:yy16ki:20220220012503p:plain
EC2への接続確認

まとめ

今回はCLIの基本操作を,簡単な構成を作成しつつ練習しました.
AWS CLIについては,いくつか記事にしようと考えているので,次回以降は少しずつ複雑な構成を作成しいてみたいと思います.
※リソースの削除を忘れずに...


スポンサードリンク