Inactive な Greengrass V2 Component デプロイメントを削除する Python スクリプト

Inactive な Greengrass V2 Component デプロイメントを削除する Python スクリプト

Takahiro Iwasa
Takahiro Iwasa
2 min read
Greengrass

AWS IoT Greengrass V2 コンポーネントのデプロイメントは、ユーザーが前のバージョンに迅速にロールバックできるように、リビジョンとして保存されます。 ただし、手動でそれらを削除するにはリビジョンが多すぎる時があります。 Inactive なデプロイメントをすべてクリアするための Python スクリプトを作成しました。

以下のコードで inactive_deployments_deleter.py を作成してください。

import argparse
from time import sleep

import boto3

client = boto3.client('greengrassv2')


def list_inactive_deployments(arn: str, next_token: str = '') -> list:
    """ List inactive deployments.

    Args:
        arn (str): ARN of an AWS IoT Thing/Thing Group
        next_token (str): Next token returned by `list_deployments` API

    Returns:
        list: All INACTIVE deployments
    """

    result = client.list_deployments(
        targetArn=arn,
        historyFilter='ALL',
        nextToken=next_token,
        maxResults=100,
    )
    deployments = result.get('deployments', [])
    deployments = [deployment for deployment in deployments if deployment.get('deploymentStatus') == 'INACTIVE']

    if result.get('nextToken'):
        sleep(0.5)
        deployments.extend(list_inactive_deployments(arn, result.get('nextToken')))

    return deployments


def delete_deployments(deployments: list) -> None:
    """ Delete deployments.

    Args:
        deployments (list): Deployments returned by `list_deployments` API
    """

    for deployment in deployments:
        client.delete_deployment(deploymentId=deployment.get('deploymentId'))
        sleep(0.5)


def parse_args() -> argparse.Namespace:
    parser = argparse.ArgumentParser()
    parser.add_argument('--target-arn', required=True)
    return parser.parse_args()


def main() -> None:
    args = parse_args()
    deployments = list_inactive_deployments(args.target_arn)
    delete_deployments(deployments)


if __name__ == '__main__':
    main()

以下のように --target-arn 引数を指定してスクリプトを実行してください。

python inactive_deployments_deleter.py --target-arn "arn:aws:iot:ap-northeast-1:<AWS_ACCOUNT_ID>:thing/<YOUR_THING_NAME>"
Takahiro Iwasa

Takahiro Iwasa

Software Developer at KAKEHASHI Inc.
Involved in the requirements definition, design, and development of cloud-native applications using AWS. Now, building a new prescription data collection platform at KAKEHASHI Inc. Japan AWS Top Engineers 2020-2023.