Auto Scaling group監視メトリックスがEC2の詳細モニタリングと独立して提供されるようになりました

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、虎塚です。

2016年8月18日のAWSアップデートによって、Auto Scaling groupの監視にEC2の詳細モニタリングが不要になりましたので、ご紹介します。

これまでのAuto Scaling group監視

Auto Scaling groupを使ってシステムを運用する際には、group内に存在するEC2インスタンスと、Auto Scaling group自体の両方を監視します。

Auto Scaling groupの監視で提供されるCloudWatchメトリックスは、たとえば、groupの最大/最小サイズ、InService状態のインスタンスの数やTerminateされたインスタンスの数などです。

Auto Scaling groupの監視では、1分単位でメトリックスを取得します。そのため、Auto Scaling groupの監視メトリックスを使うには、これまではEC2の詳細モニタリング (detailed monitoring) を有効にする必要がありました。これは、有料のオプション設定です。

今回のアップデートは何が素晴らしいか

今回のアップデートで、Auto Scaling groupの監視メトリックスを、EC2インスタンスの詳細モニタリングを有効にすることなく利用できるようになりました。

Auto Scaling group監視の時間粒度を実現するために、EC2の詳細モニタリング必要であるという制約は、いわばサービスの実装の話であり、利用者が考えなくてもよいはずの問題でした。今回、Auto Scaling groupの監視設定がEC2の監視設定に依存しなくなったことは、AWSサービスという抽象度で見ると独立しているEC2監視とAuto Scaling group監視について、設定面でも本来の独立性が実現されたと言えます。

確認

さて、Auto Scaling group監視がEC2詳細モニタリングともはや独立していることを確認しておきましょう。

  • EC2の詳細モニタリングの有効化/無効化は、Launch Configurationで設定する
  • Auto Scaling group監視の有効化/無効化は、Auto Scaling groupで設定する

まず、適当なAMIを指定して、Launch Configuration (lc-20160819) を作成します。AWS Management Console上で作成すれば、EC2の詳細モニタリングはデフォルトでオフになります。

次に、Auto Scaling group (asg-20160819) を作成します。作成したgroupの情報をAWS CLIで確認すると、EnabledMetricsは空になっています。

aws autoscaling describe-auto-scaling-groups \
--auto-scaling-group-names asg-20160819

{
    "AutoScalingGroups": [
        {
            "AutoScalingGroupARN": "arn:aws:autoscaling:ap-northeast-1:123456789012:autoScalingGroup:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:autoScalingGroupName/asg-20160819",
            "DesiredCapacity": 2,
            "EnabledMetrics": [],
            "AutoScalingGroupName": "asg-20160819",
            "MinSize": 2,
            "Instances": [
                {
                    "ProtectedFromScaleIn": false,
                    "AvailabilityZone": "ap-northeast-1c",
                    "InstanceId": "i-00000000",
                    "HealthStatus": "Healthy",
                    "LifecycleState": "InService",
                    "LaunchConfigurationName": "lc-20160819"
                },
                {
                    "ProtectedFromScaleIn": false,
                    "AvailabilityZone": "ap-northeast-1a",
                    "InstanceId": "i-11111111",
                    "HealthStatus": "Healthy",
                    "LifecycleState": "InService",
                    "LaunchConfigurationName": "lc-20160819"
                }
            ],
            "MaxSize": 2,
            "LaunchConfigurationName": "lc-20160819",
[...]
        }
    ]
}

それから、Auto Scaling group監視を有効化します。AWS Management Console上でリンクをクリックするだけ有効化できます。AWS CLIで実施する場合は、次のとおりです。

aws autoscaling enable-metrics-collection \
--auto-scaling-group-name asg-20160819 \
--granularity 1Minute

先ほどと同じコマンドでgroupの情報を確認します。今度はEnableMetricsに値が入っています。

aws autoscaling describe-auto-scaling-groups \
--auto-scaling-group-names asg-20160819

{
    "AutoScalingGroups": [
        {
            "AutoScalingGroupARN": "arn:aws:autoscaling:ap-northeast-1:123456789012:autoScalingGroup:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:autoScalingGroupName/asg-20160819",
            "DesiredCapacity": 2,
            "EnabledMetrics": [
                {
                    "Metric": "GroupDesiredCapacity",
                    "Granularity": "1Minute"
                },
                {
                    "Metric": "GroupMaxSize",
                    "Granularity": "1Minute"
                },
                {
                    "Metric": "GroupInServiceInstances",
                    "Granularity": "1Minute"
                },
                {
                    "Metric": "GroupMinSize",
                    "Granularity": "1Minute"
                },
                {
                    "Metric": "GroupTerminatingInstances",
                    "Granularity": "1Minute"
                },
                {
                    "Metric": "GroupPendingInstances",
                    "Granularity": "1Minute"
                },
                {
                    "Metric": "GroupTotalInstances",
                    "Granularity": "1Minute"
                },
                {
                    "Metric": "GroupStandbyInstances",
                    "Granularity": "1Minute"
                }
            ],
            "AutoScalingGroupName": "asg-20160819",
            "MinSize": 2,
            "Instances": [
                {
                    "ProtectedFromScaleIn": false,
                    "AvailabilityZone": "ap-northeast-1c",
                    "InstanceId": "i-00000000",
                    "HealthStatus": "Healthy",
                    "LifecycleState": "InService",
                    "LaunchConfigurationName": "lc-20160819"
                },
                {
                    "ProtectedFromScaleIn": false,
                    "AvailabilityZone": "ap-northeast-1a",
                    "InstanceId": "i-11111111",
                    "HealthStatus": "Healthy",
                    "LifecycleState": "InService",
                    "LaunchConfigurationName": "lc-20160819"
                }
            ],
            "MaxSize": 2,
            "LaunchConfigurationName": "lc-20160819",
[...]
        }
    ]
}

Auto Scaling group監視が有効になりました。

この時、group内のEC2インスタンスで詳細モニタリングが無効であることを確認します。

aws ec2 describe-instances --instance-ids i-00000000 i-11111111 \
| jq -r '.Reservations[].Instances[] | .InstanceId, .Monitoring.State'

i-00000000
disabled
i-11111111
disabled

EC2の詳細モニタリングは無効のままでした!

アップデート補足: Auto Scaling groupダッシュボードの拡張

上のアップデートと同時に、Auto Scaling groupダッシュボードが拡張されました。複数のAuto Scaling groupのメトリックス値を、グラフ上でまとめて見ることができるようになりました。

ASG

おわりに

独立した監視に感心しました。Auto Scaling group監視とEC2詳細モニタリングの独立は、本来あるべき姿になったといえばそれまでですが、このような地味なところで筋の通ったアップデートをしてくれるAWSはさすがと思います。

Auto Scaling groupを使う時は、ぜひgroup監視を有効にしましょう。

それでは、また。