継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

ECS サービスデプロイ状況を確認する API サポートを試してみた

タダです.

ECS 関連アップデートでデプロイ状況を確認できる API のサポートが発表されました.普段デプロイの際はコンソールで確認を行っていたのでその手間が一定解消されそうだと思い,どんな確認が取れるのかを手元で CLI を試してみます.

aws.amazon.com

aws.amazon.com

今回アップデート概要

今回発表された APIlistServiceDeployments, describeServiceRevisions, describeServiceDeployment になります.また,ECS サービスのデプロイ履歴が90 日間保持されてコンソールとAWS CLI で確認が可能になりました.この記事では追加された API の挙動を CLI で確認した内容をまとめていきます.なお,CLI のバージョンは以下のとおりです.

$ aws --version
aws-cli/2.19.4 Python/3.12.7 Darwin/23.5.0 source/arm64

listServiceDeployments

listServiceDeployments では ECS サービスのデプロイごとの状況を確認できるようになっています.list-service-deployments を実行すると以下の例では2回のデプロイを試したのでその状況が表示されました.

awscli.amazonaws.com

$ aws ecs list-service-deployments --cluster example --service blog-demo
{
    "serviceDeployments": [
        {
            "serviceDeploymentArn": "arn:aws:ecs:ap-northeast-1:111222333444:service-deployment/example/blog-demo/xOuzLGQkLj4Fgx4pScx-F",
            "serviceArn": "arn:aws:ecs:ap-northeast-1:111222333444:service/example/blog-demo",
            "clusterArn": "arn:aws:ecs:ap-northeast-1:111222333444:cluster/example",
            "startedAt": "2024-11-10T14:38:15.960000+09:00",
            "createdAt": "2024-11-10T14:38:14.578000+09:00",
            "targetServiceRevisionArn": "arn:aws:ecs:ap-northeast-1:111222333444:service-revision/example/blog-demo/0842152099039089140",
            "status": "IN_PROGRESS"
        },
        {
            "serviceDeploymentArn": "arn:aws:ecs:ap-northeast-1:111222333444:service-deployment/example/blog-demo/TpNdMFMET_zrLGeqX15se",
            "serviceArn": "arn:aws:ecs:ap-northeast-1:111222333444:service/example/blog-demo",
            "clusterArn": "arn:aws:ecs:ap-northeast-1:111222333444:cluster/example",
            "startedAt": "2024-11-10T14:06:20.206000+09:00",
            "createdAt": "2024-11-10T14:06:18.128000+09:00",
            "finishedAt": "2024-11-10T14:26:15.246000+09:00",
            "targetServiceRevisionArn": "arn:aws:ecs:ap-northeast-1:111222333444:service-revision/example/blog-demo/1308369492597490708",
            "status": "ROLLBACK_FAILED",
            "statusReason": "No rollback candidate was found to run the rollback."
        }
    ]
}

コンソールで確認すると,デプロイごとに識別子が振られて後述する API で確認できる,デプロイの関連情報を得られるようになっているようです.

describeServiceDeployments

describeServiceDeployments では ECS タスク数やサーキット ブレーカーのステータスなどデプロイごとの詳細情報を取得できます.listServiceDeployments は全体を見て,describeServiceDeployments では個別のデプロイ詳細を確認するための用途のようですね.

awscli.amazonaws.com

$ aws ecs describe-service-deployments --service-deployment-arns arn:aws:ecs:ap-northeast-1:111222333444:service-deployment/example/blog-demo/xOuzLGQkLj4Fgx4pScx-F
{
    "serviceDeployments": [
        {
            "serviceDeploymentArn": "arn:aws:ecs:ap-northeast-1:111222333444:service-deployment/example/blog-demo/xOuzLGQkLj4Fgx4pScx-F",
            "serviceArn": "arn:aws:ecs:ap-northeast-1:111222333444:service/example/blog-demo",
            "clusterArn": "arn:aws:ecs:ap-northeast-1:111222333444:cluster/example",
            "createdAt": "2024-11-10T14:38:14.578000+09:00",
            "startedAt": "2024-11-10T14:38:15.960000+09:00",
            "updatedAt": "2024-11-10T14:38:16.502000+09:00",
            "sourceServiceRevisions": [
                {
                    "arn": "arn:aws:ecs:ap-northeast-1:111222333444:service-revision/example/blog-demo/1308369492597490708",
                    "requestedTaskCount": 0,
                    "runningTaskCount": 0,
                    "pendingTaskCount": 0
                }
            ],
            "targetServiceRevision": {
                "arn": "arn:aws:ecs:ap-northeast-1:111222333444:service-revision/example/blog-demo/0842152099039089140",
                "requestedTaskCount": 0,
                "runningTaskCount": 0,
                "pendingTaskCount": 0
            },
            "status": "IN_PROGRESS",
            "deploymentConfiguration": {
                "deploymentCircuitBreaker": {
                    "enable": true,
                    "rollback": true
                },
                "maximumPercent": 200,
                "minimumHealthyPercent": 100
            },
            "deploymentCircuitBreaker": {
                "status": "MONITORING",
                "failureCount": 0,
                "threshold": 0
            },
            "alarms": {
                "status": "DISABLED"
            }
        }
    ],
    "failures": []
}

describeServiceRevisions

describeServiceRevisions ではどういった ECS タスクをデプロイしようとしているのか(タスク定義のバージョン,ネットワーク情報,コンテナ名等)を取得できます.従来は個々のタスク定義を見に行っていたのがこの API で確認できるようになりました.

awscli.amazonaws.com

aws ecs describe-service-revisions --service-revision-arns arn:aws:ecs:ap-northeast-1:111222333444:service-revision/example/blog-demo/0842152099039089140
{
    "serviceRevisions": [
        {
            "serviceRevisionArn": "arn:aws:ecs:ap-northeast-1:111222333444:service-revision/example/blog-demo/0842152099039089140",
            "serviceArn": "arn:aws:ecs:ap-northeast-1:111222333444:service/example/blog-demo",
            "clusterArn": "arn:aws:ecs:ap-northeast-1:111222333444:cluster/example",
            "taskDefinition": "arn:aws:ecs:ap-northeast-1:111222333444:task-definition/blog-demo:2",
            "launchType": "FARGATE",
            "platformVersion": "1.4.0",
            "platformFamily": "Linux",
            "loadBalancers": [],
            "serviceRegistries": [],
            "networkConfiguration": {
                "awsvpcConfiguration": {
                    "subnets": [
                        "subnet-xxx",
                        "subnet-xxx"
                    ],
                    "securityGroups": [
                        "sg-xxx"
                    ],
                    "assignPublicIp": "DISABLED"
                }
            },
            "containerImages": [
                {
                    "containerName": "demo",
                    "image": "111222333444.dkr.ecr.ap-northeast-1.amazonaws.com/ecr-public/amazonlinux/amazonlinux:2023"
                }
            ],
            "guardDutyEnabled": false,
            "createdAt": "2024-11-10T14:38:06.544000+09:00"
        }
    ],
    "failures": []
}

まとめ

ECS サービスデプロイに関連する新しい API サポートを受けて AWS CLI で関連コマンドを試してどういった内容を取得できるのかを確認しました.