使用 boto3 ECS 获得“服务创建不是幂等的”。为啥?

Posted

技术标签:

【中文标题】使用 boto3 ECS 获得“服务创建不是幂等的”。为啥?【英文标题】:Getting "Creation of service was not idempotent" with boto3 ECS. Why?使用 boto3 ECS 获得“服务创建不是幂等的”。为什么? 【发布时间】:2016-01-19 17:28:26 【问题描述】:

我正在像这样打电话给ecs.create_service

createServiceResponse = ecs.create_service(
clientToken='abc123',
cluster=options.cluster,
serviceName=options.service,
desiredCount=1,
taskDefinition='relay:' + str(revision),
role='ecsServiceRole',
loadBalancers=[
    
        'loadBalancerName': options.elb,
        'containerName': 'relay',
        'containerPort': 8080
    
]
)

请注意,clientToken 中的值目前是abc123,但我尝试了各种不同的字符串。该文档说我需要提供它以确保幂等性 (http://boto3.readthedocs.org/en/latest/reference/services/ecs.html) 但是我不断收到此错误:

Traceback (most recent call last):
  File "./deploy.py", line 103, in <module>
    'containerPort': 8080
  File "/usr/local/lib/python2.7/site-packages/botocore/client.py", line 301, in _api_call
  return self._make_api_call(operation_name, kwargs)
  File "/usr/local/lib/python2.7/site-packages/botocore/client.py", line 386, in _make_api_call
   raise ClientError(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred     (InvalidParameterException) when calling the CreateService operation: Creation of service was not idempotent.

为什么?

【问题讨论】:

【参考方案1】:

我想通了。

这是因为我在现有服务上调用 create_service。我应该按如下方式调用update_service

ecs.update_service(

cluster=options.cluster,
service=options.service,
taskDefinition='relay:' + str(revision),    
desiredCount=1) 

【讨论】:

以上是关于使用 boto3 ECS 获得“服务创建不是幂等的”。为啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 boto3 从连接到 ECS 任务的网络接口获取公共 IP

AWS ECS - 如何将任务的执行角色传递给 Boto3?

需要用于 ECS 帮助的 Python Boto3

AWS ECS Docker 容器 Boto3 IAM 权限

我正在尝试使用 python boto3 列出 aws ECS 集群中的所有集群,它最多只能列出 100 个集群,我想要 300 个集群

如何在 boto3 中设置 executionRoleArn 的值?