2012-10-14 24 views
2

我在boto中實現了CloudFormation並遇到了一個奇怪的例外。boto CloudFormation BadRequest(400),例外:無

[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 

正如你所看到的,我正在執行兩個命令。第一個呼叫validate_template,這是可以的。第二個要求start_stack這樣的:

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

我真的不知道這個問題可能是什麼,因爲所有我回來從博託是錯誤消息None。但也許這是某種跡象?

任何指針正確的方向是高度讚賞!

PS。使用相同的模板從AWS控制檯啓動堆棧工作良好。 DS。

+1

你能嘗試運行這個與調試啓用日誌記錄?看到實際的請求/響應將很有用。有關設置調試日誌記錄的信息,請參閱https://gist.github.com/1539859。 – garnaat

回答

9

感謝您的幫助garnaat,調試時我看到以下內容:

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"} 

所以我增加了功能的代碼:

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

如果你正在使用python AWS cli,那麼也同樣如此。您必須在命令行中添加--capabilities CAPABILITY_IAM。 – Sam

相關問題