Auto Scaling Capacity Providerの再作成時にASGが既に使用されているというエラーが発生した時のメモ

ECSのAuto Scaling Group Capacity Providerの作成とDeactivateを繰り返していて下記のエラーに遭遇した時のメモです。
2019.12.18

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

はじめに

ECSのAuto Scaling Group Capacity Providerの作成とDeactivateを繰り返していて下記のエラーに遭遇した時のメモです。

There was an error creating the capacity provider. Fix the following error and try again. The specified Auto Scaling group ARN is already being used by another capacity provider. Specify a unique Auto Scaling group ARN and try again.

エラーが発生した時の状況

  1. あるAutoScaling Group からCapacity Providerを作成して検証を行ない、検証後同Capacity ProviderをDeactivateした
  2. 再度同じAutoScaling Group からCapacity Providerを作成しようとしたら上記エラーが発生

何が起きているのか

エラーメッセージは「既に当該ASGに対するCapacity Providerがあるで」と言っていますが、マネジメントコンソールには見当たりません。 そこでawscliで確認してみると...

$  aws ecs describe-capacity-providers
{
    "capacityProviders": [
        {
            "status": "ACTIVE",
            "capacityProviderArn": "arn:aws:ecs:ap-northeast-1:331282901948:capacity-provider/FARGATE",
            "name": "FARGATE",
            "tags": []
        },
        {
            "status": "ACTIVE",
            "capacityProviderArn": "arn:aws:ecs:ap-northeast-1:331282901948:capacity-provider/FARGATE_SPOT",
            "name": "FARGATE_SPOT",
            "tags": []
        },
        {
            "status": "ACTIVE",
            "capacityProviderArn": "arn:aws:ecs:ap-northeast-1:XXXXXX:capacity-provider/ec2-t2-med",    <---- これが当該ASGに対応するProvider
            "name": "ec2-t2-med",
            "autoScalingGroupProvider": {
                "autoScalingGroupArn": "arn:aws:autoscaling:ap-northeast-1:XXXXXX:autoScalingGroup:a3b5a176-e600-40fa-b216-a2d3db539042:autoScalingGroupName/ecs-ec2",
                "managedTerminationProtection": "ENABLED",
                "managedScaling": {
                    "status": "ENABLED",
                    "targetCapacity": 80,
                    "maximumScalingStepSize": 10000,
                    "minimumScalingStepSize": 1
                }
            },
            "tags": []
        }
    ]
}

と存在していることがわかります。マネジメントコンソールからDeactivateしても削除される訳ではないことがわかりました。 気になって次の点も調べてみました。

  • 表示されていないCapacity ProviderをCLIでクラスタと紐付け(put-coluster-capacity-providers)するとマネジメントコンソールにも反映される
  • クラスタへの紐付けをしてもスケーリングポリシーは再作成されない(ポリシーはDeactivateした時に削除されたまま)

さらに調べてみるとGitHubのcontainers-roadmapに 「[ECS] Add the ability to delete an ASG capacity provider. #632」というIssueを見つけました。 ドキュメントにも削除については記載されていないので現時点では削除はできず非表示になるだけのようです。

結局どうするのがいいのか

今回は検証目的だったので新たにASGを作り直すことで本来やりたかったことはできましたが、現時点で上記の挙動には注意する必要があると思います。