AWS ECS - 使用Boto3更新任务定义

3

使用boto3,我们可以创建一个新的任务定义:

client = boto3.client('ecs')
client.register_task_definition(...)

我们如何更新现有的任务定义?只是使用更改和相同的族名称进行另一个调用吗?

1
你读过 boto3 的文档吗?有几个 update_ 方法。 - DeepSpace
1
它们都不是任务定义相关的函数:update_capacity_provider()、update_cluster()、update_cluster_settings()、update_container_agent()、update_container_instances_state()、update_service()、update_service_primary_task_set()、update_task_set()。 - Flo
我知道这很老,但今天我自己也被这个问题搞烦了。你需要描述任务定义并提取容器定义,然后使用register_task_definition创建一个新版本 - 传入现有的容器定义,但修改镜像标签(可能是您想要更改的内容)和任何其他需要更改的内容。真是令人恼火... - Trevor Griffiths
2个回答

8

如上所述,您需要使用register_task_definition为任务定义创建新版本。非常令人烦恼的是,即使您可能只想更改其中一个参数,您仍需要再次传入所有参数。这将创建一个新版本。

这非常令人恼火,因为这是标准ECS部署的工作流程。即创建更新了图像标记的新任务定义版本。为什么没有一些内置功能可以做到这一点...

我所做的就是调用describe_task_definition,更新响应字典以修改您想要的内容,删除任何无法在调用register_task_definition时用作kwargs的键,然后调用register_task_definition并传入该字典。对我而言完全有效。

existing_task_def_response = ecs_client.describe_task_definition(
    taskDefinition=ecs_task_definition_name,
)
new_task_definition = existing_task_def_response['taskDefinition']
#edit the image tag here
new_task_definition['containerDefinitions'][0]['image'] = yournewimagetagforexample

#drop all the keys from the dict that you can't use as kwargs in the next call. could be explicit here and map things
remove_args=['compatibilities', 'registeredAt', 'registeredBy', 'status', 'revision', 'taskDefinitionArn', 'requiresAttributes' ]
for arg in remove_args:
    new_task_definition.pop(arg)

reg_task_def_response = ecs_client.register_task_definition(
**new_task_definition
)

1
更新现有任务定义
您不能这样做。您必须创建现有任务定义的新版本。然后,您还需要更新ECS服务以使用新的任务版本。再次运行register_task_definition应该会自动为您创建新版本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接