[JAWS-UG CLI] AutoScaling:#1 起動設定の作成




前提条件
========


AutoScalingへの権限
-------------------

AutoScalingに対してフル権限があること。


EC2への権限
-----------

EC2に対してフル権限があること。


AWS CLIのバージョン
-------------------

以下のバージョンで動作確認済

* AWS CLI 1.10.58

```bash:コマンド:
aws --version
```

結果(例):

      aws-cli/1.10.58 Python/2.7.11 Darwin/15.6.0 botocore/1.4.48


デフォルトVPCの存在
-------------------

デフォルトVPCが存在すること。

```bash:コマンド:
VPC_ID=$( \
        aws ec2 describe-vpcs \
          --filters Name=isDefault,Values=true \
          --query 'Vpcs[].VpcId' \
          --output text \
) \
        && echo ${VPC_ID}
```

結果(例):

      vpc-xxxxxxxx


0. 準備
=======


0.1. リージョンの決定
---------------------

```bash:変数の設定:
AWS_DEFAULT_REGION='ap-northeast-1'
```


0.2. 変数の確認:
----------------

プロファイルが想定のものになっていることを確認します。

```bash:変数の確認:
aws configure list
```

結果(例):

            Name                    Value             Type    Location
            ----                    -----             ----    --------
         profile       ec2as_full-prjZ-mbp13        env    AWS_DEFAULT_PROFILE
      access_key     ****************XXXX shared-credentials-file
      secret_key     ****************XXXX shared-credentials-file
          region        ap-northeast-1        env    AWS_DEFAULT_REGION


0.3. セキュリティグループの指定
-------------------------------

まず、セキュリティグループの一覧を確認します。

```bash:コマンド:
aws ec2 describe-security-groups \
        --query 'SecurityGroups[].GroupName'
```

結果(例):

      [
        "default",
        "ec2-ssh-global-inbound"
      ]

利用するセキュリティグループ名を指定します。

```bash:変数の設定:
VPC_SG_NAME='ec2-ssh-global-inbound'
```

```bash:コマンド:
VPC_SG_ID=$( \
        aws ec2 describe-security-groups \
          --filter Name=group-name,Values=${VPC_SG_NAME} \
          --query 'SecurityGroups[].GroupId' \
          --output text \
) \
        && echo ${VPC_SG_ID}
```

結果(例):

      sg-xxxxxxxx

存在しない場合は、作成します:
http://qiita.com/tcsh/items/77f8c9887634fd67f4d8

```bash:変数の設定:
ARRAY_VPC_SG_ID="${VPC_SG_ID} ${ARRAY_VPC_SG_ID}" \
          && echo ${ARRAY_VPC_SG_ID}
```


0.4. キーペアの指定
-------------------

作成手順: http://qiita.com/tcsh/items/59303d9506ca7d13f744

まず、キーペアの一覧を確認します。

```bash:コマンド:
aws ec2 describe-key-pairs \
        --query 'KeyPairs[].KeyName'
```

結果(例):

      <キーペアー名>

利用するキーペア名を指定します。

```bash:変数の設定:
EC2_KEYPAIR_NAME='<キーペアー名>'
```

利用するキーペアの秘密鍵ファイルを指定します。

```bash:変数の設定:
FILE_SSH_KEY="${HOME}/.ssh/<キーペア秘密鍵のファイル名>" \
        echo ${FILE_SSH_KEY}
```

秘密鍵が存在することを確認しましょう。

```bash:コマンド:
ls ${FILE_SSH_KEY}
```


1. 事前作業
===========


1.1. 起動設定名の決定
---------------------

```bash:変数の設定:
AS_LAUNCH_CONFIG_NAME="launchcongig-handson-$(date +%Y%m%d)" \
        && echo ${AS_LAUNCH_CONFIG_NAME}
```

同名の起動設定が存在しないことを確認します。

```bash:コマンド:
aws autoscaling describe-launch-configurations \
        --launch-configuration-names ${AS_LAUNCH_CONFIG_NAME} 
```

結果:

      {
          "LaunchConfigurations": []
      }


1.2. インスタンスタイプの決定
-----------------------------

```bash:変数の設定:
EC2_INSTANCE_TYPE='t2.micro'
```


1.3. イメージIDの決定
---------------------

AMIを選択します。

```bash:変数の設定:
AMZLINUX_VERSION='2016.03.3'
EC2_IMAGE_NAME="amzn-ami-hvm-${AMZLINUX_VERSION}.x86_64-gp2"
```

```bash:コマンド:
EC2_IMAGE_ID=$( \
        aws ec2 describe-images \
          --filters Name=name,Values="${EC2_IMAGE_NAME}" \
          --query 'Images[].ImageId' --output text \
) \
        && echo ${EC2_IMAGE_ID}
```

結果(例):

      ami-XXXXXXXX


2. 起動設定の作成
=================


2.1. 起動設定の作成
-------------------

```bash:変数の確認:
cat << ETX

        AS_LAUNCH_CONFIG_NAME: ${AS_LAUNCH_CONFIG_NAME}
        EC2_IMAGE_ID:          ${EC2_IMAGE_ID}
        EC2_INSTANCE_TYPE:     ${EC2_INSTANCE_TYPE}
        ARRAY_VPC_SG_ID:       ${ARRAY_VPC_SG_ID}
        EC2_KEYPAIR_NAME:      ${EC2_KEYPAIR_NAME}

ETX
```

```bash:コマンド:
aws autoscaling create-launch-configuration \
        --launch-configuration-name ${AS_LAUNCH_CONFIG_NAME} \
        --image-id ${EC2_IMAGE_ID} \
        --instance-type ${EC2_INSTANCE_TYPE} \
        --security-groups ${ARRAY_VPC_SG_ID} \
        --key-name ${EC2_KEYPAIR_NAME} \
        --associate-public-ip-address
```

結果:

      (戻り値なし)


2.2. 起動設定の確認
-------------------

```bash:コマンド:
aws autoscaling describe-launch-configurations \
        --launch-configuration-names ${AS_LAUNCH_CONFIG_NAME} 
```

結果(例):

      {
        "LaunchConfigurations": [
          {
              "UserData": "",
              "EbsOptimized": false,
              "LaunchConfigurationARN": "arn:aws:autoscaling:ap-northeast-1:XXXXXXXXXXXX:launchConfiguration:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:launchConfigurationName/launchcongig-handson-20160829",
              "InstanceMonitoring": {
                  "Enabled": true
              },
              "ClassicLinkVPCSecurityGroups": [],
              "CreatedTime": "2015-08-01T01:23:45.678Z",
              "BlockDeviceMappings": [],
              "KeyName": "prjx-ap-northeast-1-ec2",
              "SecurityGroups": [
                  "sg-xxxxxxxx"
              ],
              "LaunchConfigurationName": "launchcongig-handson-20160829",
              "KernelId": "",
              "RamdiskId": "",
              "ImageId": "ami-xxxxxxxx",
              "InstanceType": "t2.micro",
              "AssociatePublicIpAddress": true
          }
        ]
      }


完了
====