AWS-Command-Line-Interface

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

ごあいさつ

こんにちは、129です。

今回は、AWS CLIでEC2を起動させる(前編)の続きをやっていきます。

ここまで

前編ではサブネットとインターネットゲートウェイを関連付けるところまでしました。
後編はセキュリティグループの作成からやってきたいと思います。

何をやってたんや?と気になる方は前編をご確認ください。
AWS CLIでEC2を起動させる(前編)

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

セキュリティグループは仮想ファイアウォールです。
セキュリティグループには--group-nameという名前をつけるコマンドがあります。
タグとは別物ですが同じ感覚で名前を付けましょう。

--descriptionはこのセキュリティグループの説明を書いておくところです。
日本語だとエラーが出るので英語や日付など、自分がわかるように書いておけばOKです。

aws ec2 create-security-group --group-name "129blog-sg" --description "This is test security group" --vpc-id vpc-0f39501a0a89139e5

{
    "GroupId": "sg-0edb3a7456d030e1d"
}

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

今回はSSH接続が目的なので22番ポートを0.0.0.0/0で許可します。
実際に使う際はセキュアな設定にしてください。

aws ec2 authorize-security-group-ingress --group-id sg-0edb3a7456d030e1d --protocol tcp --port 22 --cidr 0.0.0.0/0

{
    "Return": true,
    "SecurityGroupRules": [
        {
            "SecurityGroupRuleId": "sgr-0c5560638485f0b4d",
            "GroupId": "sg-0edb3a7456d030e1d",
            "GroupOwnerId": "366496186996",
            "IsEgress": false,
            "IpProtocol": "tcp",
            "FromPort": 22,
            "ToPort": 22,
            "CidrIpv4": "0.0.0.0/0"
        }
    ]
}

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

EC2にログインするための秘密鍵を作成します。

aws ec2 create-key-pair --key-name examplekey --query 'KeyMaterial' --output text > examlpekey.pem 

コマンド入力後にカレントディレクトリに鍵が作成されていたらOK
ls -laなどで確認

-rw-rw-r-- 1 cloudshell-user cloudshell-user 1675 Jan  8 21:11 examplekey.pem

こんな感じでできてたらOKです。chmodコマンドでrootだけに実行権限を付与しておきましょう。
chmod 400 examplekey.pem

EC2インスタンス起動

ついにEC2インスタンス起動です。

コンソールで起動する際はAMIをOS名で検索すれば出てくるのですが
AWS CLIの場合AMIIDで指定しないといけません。今回はCentOS7を指定します。
AMIIDはCLIで探すか調べないとでてきません。

今回起動するEC2はCentOS7、EC2×1台、t2.microです
起動に最低限必要な情報を入れていきます。

aws ec2 run-instances --image-id ami-0ddea5e0f69c193a4  --count 1 --instance-type t2.micro  --key-name examplekey  --security-group-ids sg-0edb3a7456d030e1d --subnet-id subnet-0a13302276d0536a8

するとすぐにレスポンスが返ってきます。

{
    "Groups": [],
    "Instances": [
        {
            "AmiLaunchIndex": 0,
            "ImageId": "ami-0ddea5e0f69c193a4",
            "InstanceId": "i-05082b87b95e7dfaa",
            "InstanceType": "t2.micro",
            "KeyName": "examplekey",
            "LaunchTime": "2023-01-08T21:14:04+00:00",
            "Monitoring": {
                "State": "disabled"
            },
            "Placement": {
                "AvailabilityZone": "ap-northeast-1a",
                "GroupName": "",
                "Tenancy": "default"
            },
            "PrivateDnsName": "ip-10-0-0-34.ap-northeast-1.compute.internal",
            "PrivateIpAddress": "10.0.0.34",
            "ProductCodes": [],
            "PublicDnsName": "",
            "State": {
                "Code": 0,
                "Name": "pending"
            },
            "StateTransitionReason": "",
            "SubnetId": "subnet-0a13302276d0536a8",
            "VpcId": "vpc-0f39501a0a89139e5",
            "Architecture": "x86_64",
            "BlockDeviceMappings": [],
            "ClientToken": "ab6e9e27-7e60-461a-a0ac-daee5674ee95",
            "EbsOptimized": false,
            "EnaSupport": true,
            "Hypervisor": "xen",
            "NetworkInterfaces": [

長いので以下略

Enterを長押しするとENDが見えてくるのでqで抜けます。

EC2に名前を付けます

aws ec2 create-tags --resource i-05082b87b95e7dfaa --tags Key=Name,Value=129blog

パブリックIPを確認

aws ec2 describe-instances --instance-id i-05082b87b95e7dfaa

{
    "Reservations": [
        {
            "Groups": [],
            "Instances": [
                {
                    "AmiLaunchIndex": 0,
                    "ImageId": "ami-0ddea5e0f69c193a4",
                    "InstanceId": "i-05082b87b95e7dfaa",
                    "InstanceType": "t2.micro",
                    "KeyName": "examplekey",
                    "LaunchTime": "2023-01-08T21:14:04+00:00",
                    "Monitoring": {
                        "State": "disabled"
                    },
                    "Placement": {
                        "AvailabilityZone": "ap-northeast-1a",
                        "GroupName": "",
                        "Tenancy": "default"
                    },
                    "PrivateDnsName": "ip-10-0-0-34.ap-northeast-1.compute.internal",
                    "PrivateIpAddress": "10.0.0.34",
                    "ProductCodes": [],
                    "PublicDnsName": "",
                    "PublicIpAddress": "IPアドレス",

EC2インスタンスの情報からパブリックIPアドレスが分かります。

SSHでEC2インスタンスにログイン

ログインできるか試します。今回CentOSを選んだのでユーザー名はcentosです。
AmazonLinuxだとec2-userになります。

ssh -i examplekey.pem centos@IPアドレス
===========================================
[centos@ip-10-0-0-34 ~]$ 

ログイン成功しました。ちゃんと起動させることができました。

立つ鳥跡を濁さず

今回は削除までCLIでやっていきます。
作ったものすべて削除していきます。

EC2インスタンスの削除

aws ec2 terminate-instances --instance-id i-05082b87b95e7dfaa

{
    "TerminatingInstances": [
        {
            "CurrentState": {
                "Code": 48,
                "Name": "terminated"
            },
            "InstanceId": "i-05082b87b95e7dfaa",
            "PreviousState": {
                "Code": 80,
                "Name": "stopped"
            }
        }
    ]
}

コマンドが実行されるとレスポンスが返ってきます。

セキュリティグループの削除

aws ec2 delete-security-group --group-id sg-0edb3a7456d030e1d

EC2の時は返ってきましたが何もレスポンスが返ってきません。
念のために確認

aws ec2 describe-security-groups --group-id sg-0edb3a7456d030e1d

An error occurred (InvalidGroup.NotFound) when calling the DescribeSecurityGroups operation: The security group 'sg-0edb3a7456d030e1d' does not exist

存在しないよとエラーが返ってきていれば削除できています。

サブネットの削除

サブネットも何も返ってこないのでセキュリティグループの時みたいに削除できているか確認してください。

aws ec2 delete-subnet --subnet-id subnet-0a13302276d0536a8

ルートテーブルの削除

ルートテーブルも同様です確認してください。

aws ec2 delete-route-table --route-table-id rtb-068feb97822906517

インターネットゲートウェイの削除

VPCからインターネットゲートウェイをデタッチする

インターネットゲートウェイを削除するときはまずVPCからデタッチしないといけません。
でなければエラーがでて削除ができません。

aws ec2 detach-internet-gateway --internet-gateway-id igw-0992104cd3a6357fa --vpc-id vpc-0f39501a0a89139e5

インターネットゲートウェイを削除

aws ec2 delete-internet-gateway --internet-gateway-id igw-0992104cd3a6357fa

VPCを削除

 aws ec2 delete-vpc --vpc-id vpc-0f39501a0a89139e5

キーペアの削除

aws ec2 describe-key-pairs --key-name examplekey

カレントディレクトリに残っているのでそちらも削除

rm examlekey.pem

これで後片付けは終了です。お疲れ様でした。

おわり

今回は簡単にEC2を起動させましたが、より本番環境に近い形で起動させる際は
利用するサービスが増えて複雑な設定をする必要があります。それはまたやっていきましょう。

返信を残す

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

CAPTCHA