在 ECS 中有条件地创建任务定义

问题描述 投票:0回答:1

我有一个 boto3 脚本,它更新(创建新版本)ECS 任务定义并使用新任务定义更新 ECS 服务。

import boto3
import json

client = boto3.client("ecs", region_name="us-east-1")

task_def_resp = client.register_task_definition(
    containerDefinitions=[<some_container_definitions>],
    executionRoleArn="arn:aws:iam::xxxxxxxxxxx:role/ecsTaskExecutionRole",
    family= "AWSSampleApp2",
    networkMode="awsvpc",
    requiresCompatibilities= ["FARGATE"],
    cpu= "256",
    memory= "512")
...
...
update_svc_resp = client.create_service(
    cluster="xxxxxxxx", 
    serviceName="xxxxxxxxxxxxxx",
    taskDefinition=task_def_resp.get('taskDefinition').get('taskDefinitionArn'),
    desiredCount=1,
    networkConfiguration={
        'awsvpcConfiguration': {
            'subnets': ['xxxxxxxxxxx'],
            'securityGroups': ["xxxxxxxxxxxxx"]
        }
    },
    launchType='FARGATE',
)
...
...

代码运行得很好。但是,即使任务定义没有更改,每当我调用此脚本时,都会总是创建新的修订版(版本)。

我的想法是,是否可以比较任务定义(查找任务定义是否包含任何更改)并仅在包含某些更改时创建新修订版?

如有任何建议,我们将不胜感激。

谢谢。

python amazon-web-services boto3 aws-sdk boto
1个回答
0
投票

这是一个老问题,所以我认为它早已解决,但我会指出

describe_task_definition
端点,您实际上可以在其中获取当前定义,检查是否需要应用您的更改。 https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ecs/client/describe_task_definition.html

IaC 工具非常方便,但是如果您的应用程序的这一部分,直接使用 API 比调用 terraform 或 cloudformation 更有效。如果您也进行动态更改,那么绝对可以帮助优化。

© www.soinside.com 2019 - 2024. All rights reserved.