Auto Scaling 設定メモ

何回やっても忘れるのでメモorz

1. セキュリティグループ作成
1. ターゲットグループ作成
1. ロードバランサー作成
1. 起動設定作成
1. Auto Scaling グループ作成
   - ターゲットグループへの紐付けはココで。
   - スケールグループサイズの設定もココで。


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

以下のセキュリティグループを作成する。

- LB 設定用 (HTTP)
   1. 以下のルールで作成する。
      - タイプ: **HTTP**
      - ソース: **任意の場所**
      - 説明: (適当に。)
   1. 作成後, (`sg-` で始まる) グループ ID をコピーしておく。
- 分散先 EC2 設定用 (HTTP via LB, SSH)
   1. HTTP は以下のルールで作成する。
      - タイプ: **HTTP**
      - ソース: **カスタム, _先ほどコピーしたグループ ID_**
      - 説明: (適当に。)
   1. SSH のルールは接続元を絞って許可する。


## ターゲットグループ作成

Auto Scaling からの紐付けは, また後で。

- ターゲットグループ名: (適当に。)
- パス: (適当に。)


- `$ aws elbv2 describe-target-groups --names test-tg91`

```json
{
    "TargetGroups": [
        {
            "HealthCheckPath": "/test.html",
            "HealthCheckIntervalSeconds": 30,
            "VpcId": "vpc-ee5d1f89",
            "Protocol": "HTTP",
            "HealthCheckTimeoutSeconds": 5,
            "TargetType": "instance",
            "HealthCheckProtocol": "HTTP",
            "LoadBalancerArns": [
                "arn:aws:elasticloadbalancing:ap-northeast-1:************:loadbalancer/app/test-alb91/9cdbb712936551ed"
            ],
            "UnhealthyThresholdCount": 2,
            "HealthyThresholdCount": 5,
            "TargetGroupArn": "arn:aws:elasticloadbalancing:ap-northeast-1:************:targetgroup/test-tg91/45eb087acba8c8ec",
            "Matcher": {
                "HttpCode": "200"
            },
            "HealthCheckPort": "traffic-port",
            "Port": 80,
            "TargetGroupName": "test-tg91"
        }
    ]
}
```


## ロードバランサー作成

- 名前: (適当に。)
- アベイラビリティーゾーン: **(全部)**
- セキュリティグループ: **(先ほど LB 用に作成したもの。)**
- ターゲットグループ: **既存のターゲットグループ**


- `$ aws elbv2 describe-load-balancers --names test-alb91`

```json
{
    "LoadBalancers": [
        {
            "IpAddressType": "ipv4",
            "VpcId": "vpc-ee5d1f89",
            "LoadBalancerArn": "arn:aws:elasticloadbalancing:ap-northeast-1:************:loadbalancer/app/test-alb91/9cdbb712936551ed",
            "State": {
                "Code": "active"
            },
            "DNSName": "test-alb91-2120475592.ap-northeast-1.elb.amazonaws.com",
            "SecurityGroups": [
                "sg-0836de3bf55e10755"
            ],
            "LoadBalancerName": "test-alb91",
            "CreatedTime": "2018-08-30T01:23:36.810Z",
            "Scheme": "internet-facing",
            "Type": "application",
            "CanonicalHostedZoneId": "Z14GRHDCWA56QT",
            "AvailabilityZones": [
                {
                    "SubnetId": "subnet-1a111a53",
                    "ZoneName": "ap-northeast-1a"
                },
                {
                    "SubnetId": "subnet-747e3b2f",
                    "ZoneName": "ap-northeast-1c"
                },
                {
                    "SubnetId": "subnet-c6110cee",
                    "ZoneName": "ap-northeast-1d"
                }
            ]
        }
    ]
}
```


## 起動設定作成

- 以下の通りに辿り, **CentOS 7 (x86_64) - with Updates HVM** を探す。
   1. AWS Marketplace
   1. Infrastructure Software
   1. CentOS
   1. Free
- インスタンスタイプは初期値 (t2.micro) で。
- 詳細設定
   - 名前: (適当に。)
   - ユーザーデータ: **(後述)**
- ストレージ
   - 合わせて削除: **チェック有り**
- セキュリティグループ: **(先ほど EC2 用に作成したもの。)**
- キーペア: (適当に。)


### ユーザーデータ

```bash
#!/bin/bash
echo -e "Defaults:centos\t\!requiretty" | sed -e 's/\\//' > /etc/sudoers.d/ansible
yum -y upgrade
yum -y install httpd
echo '<!DOCTYPE html><html><head><title>TEST</title></head><body><h1>TEST PAGE</h1><p>This is a test page.</p></body></html>' > /var/www/html/test.html
systemctl enable httpd
systemctl reboot
```


- `$ aws autoscaling describe-launch-configurations --launch-configuration-names test-lc91`

```json
{
    "LaunchConfigurations": [
        {
            "UserData": "IyEvYmluL2Jhc2gKZWNobyAtZSAiRGVmYXVsdHM6Y2VudG9zXHRcIXJlcXVpcmV0dHkiIHwgc2VkIC1lICdzL1xcLy8nID4gL2V0Yy9zdWRvZXJzLmQvYW5zaWJsZQp5dW0gLXkgdXBncmFkZQp5dW0gLXkgaW5zdGFsbCBodHRwZAplY2hvICc8IURPQ1RZUEUgaHRtbD48aHRtbD48aGVhZD48dGl0bGU+VEVTVDwvdGl0bGU+PC9oZWFkPjxib2R5PjxoMT5URVNUIFBBR0U8L2gxPjxwPlRoaXMgaXMgYSB0ZXN0IHBhZ2UuPC9wPjwvYm9keT48L2h0bWw+JyA+IC92YXIvd3d3L2h0bWwvdGVzdC5odG1sCnN5c3RlbWN0bCBlbmFibGUgaHR0cGQKc3lzdGVtY3RsIHJlYm9vdAo=",
            "EbsOptimized": false,
            "LaunchConfigurationARN": "arn:aws:autoscaling:ap-northeast-1:************:launchConfiguration:35af0148-a29a-45c5-acb1-6a88dfc76c37:launchConfigurationName/test-lc91",
            "InstanceMonitoring": {
                "Enabled": false
            },
            "ClassicLinkVPCSecurityGroups": [],
            "CreatedTime": "2018-08-30T01:24:45.065Z",
            "BlockDeviceMappings": [
                {
                    "DeviceName": "/dev/sda1",
                    "Ebs": {
                        "DeleteOnTermination": true,
                        "SnapshotId": "snap-0a738fee1d3ea1e78",
                        "VolumeSize": 8,
                        "VolumeType": "gp2"
                    }
                }
            ],
            "KeyName": "********-key",
            "SecurityGroups": [
                "sg-0d57a71bd16dce9b4"
            ],
            "LaunchConfigurationName": "test-lc91",
            "KernelId": "",
            "RamdiskId": "",
            "ImageId": "ami-8e8847f1",
            "InstanceType": "t2.micro"
        }
    ]
}
```


## Auto Scaling グループ作成

- グループ名: (適当に。)
- サブネット: **(選べるだけ全部。)**
- ロードバランシング: **チェック有り**
- ターゲットグループ: **(先ほど作成したターゲットグループ。)**
- ヘルスチェックのタイプ: **ELB**


- `$ aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names test-asg91`

```json
{
    "AutoScalingGroups": [
        {
            "AutoScalingGroupARN": "arn:aws:autoscaling:ap-northeast-1:************:autoScalingGroup:6343056b-d007-4c2d-9eba-7c1f7448f4ca:autoScalingGroupName/test-asg91",
            "ServiceLinkedRoleARN": "arn:aws:iam::************:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling",
            "TargetGroupARNs": [
                "arn:aws:elasticloadbalancing:ap-northeast-1:************:targetgroup/test-tg91/45eb087acba8c8ec"
            ],
            "SuspendedProcesses": [],
            "DesiredCapacity": 2,
            "Tags": [
                {
                    "ResourceType": "auto-scaling-group",
                    "ResourceId": "test-asg91",
                    "PropagateAtLaunch": true,
                    "Value": "test_web",
                    "Key": "role"
                }
            ],
            "EnabledMetrics": [],
            "LoadBalancerNames": [],
            "AutoScalingGroupName": "test-asg91",
            "DefaultCooldown": 300,
            "MinSize": 2,
            "Instances": [
                {
                    "ProtectedFromScaleIn": false,
                    "AvailabilityZone": "ap-northeast-1a",
                    "InstanceId": "i-068c005654c10b78c",
                    "HealthStatus": "Healthy",
                    "LifecycleState": "InService",
                    "LaunchConfigurationName": "test-lc91"
                },
                {
                    "ProtectedFromScaleIn": false,
                    "AvailabilityZone": "ap-northeast-1c",
                    "InstanceId": "i-0c5cb80894c73f594",
                    "HealthStatus": "Healthy",
                    "LifecycleState": "InService",
                    "LaunchConfigurationName": "test-lc91"
                }
            ],
            "MaxSize": 2,
            "VPCZoneIdentifier": "subnet-747e3b2f,subnet-c6110cee,subnet-1a111a53",
            "HealthCheckGracePeriod": 300,
            "TerminationPolicies": [
                "Default"
            ],
            "LaunchConfigurationName": "test-lc91",
            "CreatedTime": "2018-08-30T01:26:08.450Z",
            "AvailabilityZones": [
                "ap-northeast-1a",
                "ap-northeast-1c",
                "ap-northeast-1d"
            ],
            "HealthCheckType": "ELB",
            "NewInstancesProtectedFromScaleIn": false
        }
    ]
}
```


どっとはらい。