1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[AWS]コマンドラインからVPCを作成してみよう!その3[AWSCLI]

Last updated at Posted at 2015-07-16

最近友人ととても良いお肉を食べました。
その際「高級肉は耐えごたえあるからレストランだと少量でてくるんだ」とかいう豆知識を聞きましたが・・・
本当だと思った。
油が強すぎて全然たべれない。
年・・・なんですかね。

日々老いを感じています。吉田です。


ようやくインスタンス立てますよ!
気づいたら3回目ですが今回で完成です!

今回のやること

  1. キーペアの作成
  2. セキュリティグループの作成
  3. インスタンスを立てる!

#1. キーペアの作成
キーペアに関してはマネジメントコンソールからやったほうが良いかも。と個人的には思いました。

###[create-key-pair]コマンド
必要オプションは一つだけ

--key-name

ただし一点注意が必要です。
このコマンドを実行すると標準出力(JSON形式)で秘密鍵の情報が帰ってきます。
マネジメントコンソールで作った時みたいにダウンロードができるとかそういったことはないので自分でファイルに書き出す必要があります。
標準出力される内容は、鍵情報以外にも

  • KeyName
  • KeyFingerprint
    が含まれます。
    つまりこんな感じです。
Kye.pem

{
    "KeyMaterial": "RSA PRIVATE KEY", 
    "KeyName": "hogehogeKey", 
    "KeyFingerprint": "nagaimojiretu"
}

必要な情報は”KeyMaterial”の値である RSA PRIVATE KEY に該当する部分です。

-----BEGIN RSA PRIVATE KEY----- から -----END RSA PRIVATE KEY----- までをファイルに書き出し実行権限を与えてください。


余談

サンプル
aws ec2 create-key-pair --key-name ./hogehogeKey | jq -r '.KeyMaterial' >> ./hogehogeKey.pem

「jq」が使えれば、こんな感じにしてあげると必要な情報だけをファイルに書き出せます。
あとは実行権限をつけてあげれば使えますね。


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

###[create-security-group]コマンド
セキュリティ・グループを作成するコマンド

オプション  意味     何を書けばいいか
--group-name SGの名前     hogehogeSG
--description SGの説明    "My hogehogeSG"
 --vpc-id VPCを明示的に指定する  vpc-xxxxxxxx
サンプル
 aws ec2 create-security-group --group-name hogehogeSG --description "My hogehogeSG"
表示
{
    "GroupId": "sg-xxxxxxxx"
}

このidあとで何回か使います。


###[authorize-security-group-ingress]コマンド
なげぇよ・・・

authorize:(権威などを)与える
ingress:入り口...security-group-ingress
egress:出口...security-group-egress

長いだけです。
inboundルールとoutboundルールの編集を行います。
ええ、本当にいつも通り(マネジメントコンソールでやってる)の手順ですね。

オプション  意味     何を書けばいいか
--group-id 設定するSGをidで指定 sg-xxxxxxxx
--protocol プロトコルを選択 tcp / udp
--port 穴を開けるポート 22,80,8080とか 1010-2020 みたいな
--cidr 通信を許可するIPの範囲 0.0.0.0/0 = anywhere
--source-group セキュリティグループで指定   sg-xxxxxxxx 
サンプル
 aws ec2 authorize-security-group-ingress --group-id sg-xxxxxxxx --protocol tcp --port 22 --cidr 0.0.0.0/0

やっぱなげぇよ!\(>ヮ<)/

コマンドが成功しても何も返されません。
できているか確認してみましょう。

サンプル
aws ec2 describe-security-groups --group-ids sg-xxxxxxxx
表示(一部抜粋)

{
    "SecurityGroups": [
        {
            "IpPermissionsEgress": [
            
            ], 
            "Description": "" 
            "IpPermissions": [
                {
                    "ToPort": 22, 
                    "IpProtocol": "tcp", 
                    "IpRanges": [
                        {
                            "CidrIp": "0.0.0.0/0"
                        }
                    ], 
                    "UserIdGroupPairs": [], 
                    "FromPort": 22
                }
            ], 
            "GroupName": "hogehogeSG", 
            "VpcId": "vpc-xxxxxxxx", 
            "OwnerId": "xxxxxxxxxxxx", 
            "GroupId": "sg-xxxxxxxx"
        }

inboundだけです。長くなるので。
適宜整形して確認してください。

他にも穴を開ける必要がある際は都度 [authorize-security-group-ingress] コマンドを実行してください。


##追記
パブリックIPを自動で振る設定
現在はパブリックIPが自動で振られていないのでその設定をしておきます。

サンプル
aws ec2 modify-subnet-attribute --subnet-id subnet-xxxxxxxx --map-public-ip-on-launch

--map-public-ip-on-launch

このオプションを設定することでインスタンスを立てるときにパブリックIPが振られます。

--

#3. インスタンスを立てる!
やっとインスタンスを立てるところまできました!お待ちかねのEC2です!


注意
今回はami-idを事前にマネジメントコンソール上で確認しています。
コマンドで確認しても良いのですがさすがにめんどくさすぎるで・・・
今回使用するAIM−id: ami-5e842b5e (AmasonLinuxです)


###[run-instances]コマンド
オプションすごい多いです。
最小限、使うのだけ行きます。
サンプルコマンドを適時自分の環境に合わせて修正し、実行してください。

オプション  意味     何を書けばいいか
--image-id 使用するAMIを指定します ami-xxxxxxxx
--count 同一のインスタンスを何台立てるか指定します 数字
--instance-type インスタンスタイプを指定 t2.micro など
--key-name 秘密鍵の名前を指定 キーペア名
--security-group-ids 使用するSG(複数可) sg-xxxxxxxx sg-aaaaaaaa
--subnet-id インスタンスを立てるサブネットを指定 subnet-xxxxxxxx
サンプル
aws ec2 run-instances --image-id ami-5e842b5e --count 1 --instance-type t2.micro --key-name hogehogeKey --security-group-ids sg-xxxxxxxx --subnet-id subnet-xxxxxxxx

どうでしょう?
難しい、敷居が高い!と思いがちなcliですが慣れてくるとそこまで難しくないですよね?
helpコマンドや公式リファレンスを見れば大抵のことはわかると思います。
今後もCLIのネタはどんどん投稿していきますのでお楽しみに〜


最後にインスタンスを立てた(成功した)際の結果をのっけておきます。
こんな感じのが帰って来たら無事成功です。


表示
{
    "OwnerId": "xxxxxxxxxxxx", 
    "ReservationId": "r-xxxxxxxx", 
    "Groups": [], 
    "Instances": [
        {
            "Monitoring": {
                "State": "disabled"
            }, 
            "PublicDnsName": null, 
            "RootDeviceType": "ebs", 
            "State": {
                "Code": 0, 
                "Name": "pending"
            }, 
            "EbsOptimized": false, 
            "LaunchTime": "2015-07-16T01:55:02.000Z", 
            "PrivateIpAddress": "10.0.1.xxx", 
            "ProductCodes": [], 
            "VpcId": "vpc-xxxxxxxx", 
            "StateTransitionReason": null, 
            "InstanceId": "i-xxxxxxxx", 
            "ImageId": "ami-5e842b5e", 
            "PrivateDnsName": "ip-10-0-1-xxx.ap-northeast-1.compute.internal", 
            "KeyName": "hogehogetKey", 
            "SecurityGroups": [
                {
                    "GroupName": "hogehogeSG", 
                    "GroupId": "sg-xxxxxxxx"
                }
            ], 
            "ClientToken": null, 
            "SubnetId": "subnet-xxxxxxxx", 
            "InstanceType": "t2.micro", 
            "NetworkInterfaces": [
                {
                    "Status": "in-use", 
                    "MacAddress": "***********", 
                    "SourceDestCheck": true, 
                    "VpcId": "vpc-xxxxxxxx", 
                    "Description": null, 
                    "NetworkInterfaceId": "eni-xxxxxxxx", 
                    "PrivateIpAddresses": [
                        {
                            "Primary": true, 
                            "PrivateIpAddress": "10.0.1.xxx"
                        }
                    ], 
                    "Attachment": {
                        "Status": "attaching", 
                        "DeviceIndex": 0, 
                        "DeleteOnTermination": true, 
                        "AttachmentId": "eni-attach-xxxxxxxx", 
                        "AttachTime": "2015-07-16T01:55:02.000Z"
                    }, 
                    "Groups": [
                        {
                            "GroupName": "hogehogeSG", 
                            "GroupId": "sg-xxxxxxxx"
                        }
                    ], 
                    "SubnetId": "subnet-xxxxxxxx", 
                    "OwnerId": "************", 
                    "PrivateIpAddress": "10.0.1.xxx"
                }
            ], 
            "SourceDestCheck": true, 
            "Placement": {
                "Tenancy": "default", 
                "GroupName": null, 
                "AvailabilityZone": "ap-northeast-1c"
            }, 
            "Hypervisor": "xen", 
            "BlockDeviceMappings": [], 
            "Architecture": "x86_64", 
            "StateReason": {
                "Message": "pending", 
                "Code": "pending"
            }, 
            "RootDeviceName": "/dev/xvda", 
            "VirtualizationType": "hvm", 
            "AmiLaunchIndex": 0
        }
    ]
}

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?