AWS-Command-Line-Interface

AWS CLIでEC2を起動させる(前編)

ごあいさつ

はじめまして、昨年春に入社した129です。
業務に少し慣れてきたので、技術ブログ投稿を始めました。
まだまだ未熟ですがよろしくお願いします。

ナショナルジオグラフィックや動物映像を流しながら何かするのが癖です。

初投稿はAWS CLIでEC2を起動させ片付けまでをやってみたいと思います。

AWS CLIとは

AWS CLIはコマンドラインからAWSサービスを操作できるツールです。
AWS マネジメントコンソールの操作はすべて AWS CLIから操作できるようです。すごい。

AWSは画面から直観的に操作できるのが良いところですが、
業務で他の人と作業する際だと「右側のメニューの逆三角を~」
と説明することになり効率的ではありません。
※画面で行う方が良いケースもあります。

AWS CLIを使おう

AWS CLIならコマンドを共有するだけで同じ動作が可能になるので業務で使う上では大変便利です。
また自動化などにも使えるので業務効率化ができ、人的ミスを減らせるので使わないのはもったいないです。

その便利なAWS CLIを使ってEC2を起動していきます。

AWS CLIコマンドの基本

始める前にAWS CLIコマンドの構造を説明します。
AWS CLIコマンドの形式は以下のようになっています。

$ aws + コマンド + サブコマンド + パラメータ
意味
aws AWSコマンドを始めますよーの合図。 これが無いとダメ
コマンド 利用したいAWSサービスを入力
サブコマンド 実行したい操作を入力
パラメータ 数値や文字列など、コマンド実行に必要な詳細情報を入力

この構造さえわかっていれば進めやすいと思います。

では始めていきます!

事前準備

AWSアカウントは作成済みとして進めていきます。

作成したアカウントでAWSマネジメントコンソールにログインしていただきます。
コンソール上の検索窓でCLIと入力しするとCloudShellが検索候補に出てくるのでクリックします。
こんな画面がでてきたら準備完了です。

VPCを構築

まずはVPCを準備します。
EC2を起動するのに必要です。広大な大地を準備するイメージです

aws ec2 create-vpc --cidr-block 10.0.0.0/16

コマンドを入力すると以下のようにレスポンスが返ってきます。
(※以降、コマンドとレスポンスを繋げています)

{
    "Vpc": {
        "CidrBlock": "10.0.0.0/16",
        "DhcpOptionsId": "dopt-048d424a4800667c0",
        "State": "pending",
        "VpcId": "vpc-0f39501a0a89139e5",
        "OwnerId": "366496186996",
        "InstanceTenancy": "default",
        "Ipv6CidrBlockAssociationSet": [],
        "CidrBlockAssociationSet": [
            {
                "AssociationId": "vpc-cidr-assoc-0423e1846479eaf8e",
                "CidrBlock": "10.0.0.0/16",
                "CidrBlockState": {
                    "State": "associated"
                }
            }
        ],
        "IsDefault": false
    }
}

"VpcId"はこのあと何度も使いますのでメモしておきましょう

作成したリソースに名前をつける

AWSを使っていくとリソースを作りすぎて、どのリソースが何用かわからなくなってきます。
大事なリソースを消さないために名前をつけておくことが重要です。
名前をつけるためにtagを使います。tagはいろいろな種類があるので
気になる方は調べてみてください。

以下がNameタグをつける場合のコマンドです。

aws ec2 create-tags --resources <リソースID> --tags Key=Name,Value=<名前>

実際にNameタグをつけてみる

実際に先ほど作成したVPCに129blog-vpcと名前をつけます。

aws ec2 create-tags --resources vpc-0f39501a0a89139e5 --tags Key=Name,Value=129blog-vpc

何もレスポンスが返ってこなくて心配なので確認します。

aws ec2 describe-tags  --filters "Name=resource-id,Values=vpc-0f39501a0a89139e5"

{
    "Tags": [
        {
            "Key": "Name",
            "ResourceId": "vpc-0f39501a0a89139e5",
            "ResourceType": "vpc",
            "Value": "129blog-vpc"
        }
    ]
}

作成したVPCに129blog-vpcの名前がついていることが確認できました。
こんな感じでリソースを作ったらすぐに付けるようにすると良いです。

サブネットを作成

VPCに直接EC2を起動させることはできないので、サブネットを作成します。
VPCの10.0.0.0/16という広大な大地に、10.0.1.0/24の範囲でサブネットという土地を作るイメージです。

aws ec2 create-subnet --vpc-id vpc-0f39501a0a89139e5 --cidr-block 10.0.1.0/24 --availability-zone ap-northeast-1a

{
    "Subnet": {
        "AvailabilityZone": "ap-northeast-1a",
        "AvailabilityZoneId": "apne1-az4",
        "AvailableIpAddressCount": 251,
        "CidrBlock": "10.0.1.0/24",
        "DefaultForAz": false,
        "MapPublicIpOnLaunch": false,
        "State": "available",
        "SubnetId": "subnet-0a13302276d0536a8",
        "VpcId": "vpc-0f39501a0a89139e5",
        "OwnerId": "366496186996",
        "AssignIpv6AddressOnCreation": false,
        "Ipv6CidrBlockAssociationSet": [],
        "SubnetArn": "arn:aws:ec2:ap-northeast-1:366496186996:subnet/subnet-0a13302276d0536a8",
        "EnableDns64": false,
        "Ipv6Native": false,
        "PrivateDnsNameOptionsOnLaunch": {
            "HostnameType": "ip-name",
            "EnableResourceNameDnsARecord": false,
            "EnableResourceNameDnsAAAARecord": false
        }
    }
}

こんな感じで返ってきたらOK
"SubnetId"のメモとリソースに名前付けることを忘れずに

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

外と通信をするためにはインターネットゲートウェイが必要なのでまずは作成します。

aws ec2 create-internet-gateway

{
    "InternetGateway": {
        "Attachments": [],
        "InternetGatewayId": "igw-0992104cd3a6357fa",
        "OwnerId": "366496186996",
        "Tags": []
    }
}

"InternetGatewayId"のメモとリソースに名前つけることを忘れずに

インターネットゲートウェイをVPCにアタッチ

作成したインターネットゲートウェイをVPCにアタッチします。

aws ec2 attach-internet-gateway --internet-gateway-id igw-0992104cd3a6357fa --vpc-id vpc-0f39501a0a89139e

ルートテーブル作成

インターネットへの出入り口はできましたが、今の状態ではどのIPアドレス宛の通信を
インターネットゲートウェイに向ければいいかがわかりません。
そのルートをルートテーブルに登録する必要があります。
まずはルートテーブルを作成します。

aws ec2 create-route-table --vpc-id vpc-0f39501a0a89139e5

{
    "RouteTable": {
        "Associations": [],
        "PropagatingVgws": [],
        "RouteTableId": "rtb-068feb97822906517",
        "Routes": [
            {
                "DestinationCidrBlock": "10.0.0.0/16",
                "GatewayId": "local",
                "Origin": "CreateRouteTable",
                "State": "active"
            }
        ],
        "Tags": [],
        "VpcId": "vpc-0f39501a0a89139e5",
        "OwnerId": "366496186996"
    }
}

"RouteTableId"のメモとリソースに名前を付けることを忘れずに

ルートテーブルにインターネットゲートウェイを設定する

デフォルトの状態なのでVPC内宛の通信のルートしか登録されていません。
インターネットゲートウェイを登録することでVPC内宛以外の通信はインターネットゲートウェイへ向くように設定できます。

aws ec2 create-route --route-table-id rtb-068feb97822906517 --destination-cidr-block 0.0.0.0/0 --gateway-id igw-0992104cd3a6357fa

{
    "Return": true
}

"Return": trueが返ってくればOK

サブネットとインターネットゲートウェイを繋げる

インターネット通信用のルートテーブルが作成できましたが、サブネットを関連付ける必要があるので設定します。

aws ec2 associate-route-table --route-table-id rtb-068feb97822906517 --subnet-id subnet-0a13302276d0536a8

{
    "AssociationId": "rtbassoc-05cb1ae8a5a435dd7",
    "AssociationState": {
        "State": "associated"
    }
}

"State": "associated"が返ってくればOK

サブネット内で起動したEC2にパブリックIPアドレスが自動で割り当たるようにする

パブリックIPが割当たらないとSSH接続ができません。設定します。

aws ec2 modify-subnet-attribute --subnet-id subnet-0a13302276d0536a8 --map-public-ip-on-launch 

前半はここまで

長くなってきたので前編はここまでにします。
後編はセキュリティグループの作成、キーペア作成、EC2を起動、後片付けをやっていきます。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA