我有一个 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',
)
...
...
代码运行得很好。但是,即使任务定义没有更改,每当我调用此脚本时,都会总是创建新的修订版(版本)。
我的想法是,是否可以比较任务定义(查找任务定义是否包含任何更改)并仅在包含某些更改时创建新修订版?
如有任何建议,我们将不胜感激。
谢谢。
这是一个老问题,所以我认为它早已解决,但我会指出
describe_task_definition
端点,您实际上可以在其中获取当前定义,检查是否需要应用您的更改。 https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ecs/client/describe_task_definition.html
IaC 工具非常方便,但是如果您的应用程序的这一部分,直接使用 API 比调用 terraform 或 cloudformation 更有效。如果您也进行动态更改,那么绝对可以帮助优化。