2015-10-20 5 views
3

Je fais un appel à ecs.create_service comme ceci:Obtenir "Création de service n'était pas idempotent" avec boto3 ECS. Pourquoi?

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 
    } 
] 
) 

Notez que la valeur clientToken est abc123 au moment, mais j'ai essayé toutes sortes de chaînes différentes. Ce document dit que je dois fournir pour assurer idempotence (http://boto3.readthedocs.org/en/latest/reference/services/ecs.html) mais je continue à obtenir cette erreur:

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. 

Pourquoi?

Répondre

7

Je l'ai compris. C'était parce que j'appelais create_service sur un service existant. J'aurais dû appeler update_service comme suit:

ecs.update_service(

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