2013-01-17 127 views
1

我已經包含了一些將war文件上傳到s3存儲桶的代碼(如果它不存在,首先創建存儲桶)。然後使用剛剛上傳的war文件創建一個彈性beanstalk應用程序版本。調用create_application_version時,會導致「BotoServerError:400錯誤請求」的原因是什麼?

假設/tmp/server_war存在並且是有效的war文件。以下代碼將失敗boto.exception.BotoServerError: BotoServerError: 400 Bad Request

#!/usr/bin/env python 

import time 

import boto 

BUCKET_NAME = 'foo_bar23498' 

s3 = boto.connect_s3() 
bucket = s3.lookup(BUCKET_NAME) 
if not bucket: 
    bucket = s3.create_bucket(BUCKET_NAME, location='') 

version_label = 'server%s' % int(time.time()) 

# uplaod the war file 
key_name = '%s.war' % version_label 
s3key = bucket.new_key(key_name) 
print 'uploading war file...' 
s3key.set_contents_from_filename('/tmp/server.war', 
           headers={'Content-Type' : 'application/x-zip'}) 

# uses us-east-1 by default 
eb = boto.connect_beanstalk() 

eb.create_application_version(
    application_name='TheApp', 
    version_label=version_label, 
    s3_bucket=BUCKET_NAME, 
    s3_key=key_name, 
    auto_create_application=True) 

會造成這種情況嗎?

回答

2

此錯誤的一個可能原因是存儲桶名稱。顯然,您可以使用包含下劃線的s3存儲桶名稱,但無法使用這些存儲桶中的密鑰來創建應用程序版本。

如果更改上面

BUCKET_NAME = '富-bar23498'

它應該工作的第四行。

是的,感覺很奇怪回答我自己的問題......顯然這是堆棧溢出時這種情況的推薦方法。我希望我可以節省其他人大量的調試時間。

+0

我很高興你做到了;我似乎遇到了這個錯誤,並且它的調試輸出是不可思議的。 – davenpcj

相關問題