Inactive な Greengrass V2 Component デプロイメントを削除する Python スクリプト
岩佐 孝浩
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>"