2012-10-14 3 views
2

J'implémente CloudFormation dans boto et j'ai rencontré une exception étrange.boto CloudFormation BadRequest (400), Exception: Aucune

[sebastian ~/test_project (develop)]$ ./manage.py --template cf-templates/test_project.json --stack labs --validate 
Validating template cf-templates/test_project.json.. 
Template cf-templates/test_project.json is valid! 
[sebastian ~/test_project (develop)]$ ./manage.py --template cf-templates/test_project.json --stack labs --start 
Creating stack labs with template cf-templates/test_project.json.. 
Traceback (most recent call last): 
    File "./manage.py", line 311, in <module> 
    main() 
    File "./manage.py", line 113, in main 
    start_stack(cf_con, parser, args, config) 
    File "./manage.py", line 261, in start_stack 
    template_body=get_json_from_template(args.template)) 
    File "/usr/local/lib/python2.7/site-packages/boto/cloudformation/connection.py", line 208, in create_stack 
    raise self.ResponseError(response.status, response.reason, body) 
boto.exception.BotoServerError: BotoServerError: 400 Bad Request 
None 

Comme vous pouvez le voir, j'exécute deux commandes. Le premier appelle validate_template et c'est OK. Le second appelle start_stack comme ceci:

cf_con = cloudformation.connect_to_region(
    args.region, 
    aws_access_key_id=config.get(
     args.config_section, 'aws_access_key_id'), 
    aws_secret_access_key=config.get(
     args.config_section, 'aws_secret_access_key')) 

cf_con.create_stack(
    args.stack, 
    template_body=get_json_from_template(args.template)) 

Je ne sais pas vraiment ce que le problème pourrait être que tout ce que je reviens de boto est None dans le message d'erreur. Mais peut-être que c'est une indication de quelque chose?

Tout pointeur dans la bonne direction est très apprécié!

PS. Cela fonctionne correctement pour démarrer la pile à partir d'AWS Console avec le même modèle. DS.

+1

Pourriez-vous essayer d'exécuter ce avec la journalisation de débogage activé? Il serait utile de voir la demande/réponse réelle. Voir https://gist.github.com/1539859 pour plus d'informations sur la configuration de la journalisation du débogage. – garnaat

Répondre

9

Merci pour l'garnaat d'aide, lors du débogage j'ai vu les éléments suivants:

2012-10-14 19:18:58,377 foo [ERROR]:400 Bad Request 
2012-10-14 19:18:58,377 foo [ERROR]:{"Error":{"Code":"InsufficientCapabilitiesException","Message":"Requires capabilities : [CAPABILITY_IAM]","Type":"Sender"},"RequestId":"389d102d-1623-11e2-b536-cb51e58a0a52"} 

J'ai donc ajouté la capacité du code:

cf_con.create_stack(
    args.stack, 
    template_body=get_json_from_template(args.template), 
    capabilities=['CAPABILITY_IAM']) 
+0

Vaguement lié le même est vrai si vous utilisez python AWS cli. Vous devez ajouter --capabilities CAPABILITY_IAM à la ligne de commande. – Sam

Questions connexes