2013-01-17 3 views
1

war 파일을 s3 버킷에 업로드하는 코드가 포함되어 있습니다 (존재하지 않는 경우 버킷을 먼저 생성). 그런 다음 방금 업로드 한 war 파일을 사용하여 탄력적 인 beanstalk 응용 프로그램 버전을 만듭니다.create_application_version을 호출하면 'BotoServerError : 400 Bad Request'가 발생합니다.

/tmp/server_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 = 'foo는-bar23498'

에 위의 네 번째 줄을 변경합니다.

예, 내 자신의 질문에 대답하는 것이 이상하다고 느낍니다 ... 분명히 스택 오버플로 상황에서 권장되는 방법입니다. 나는 다른 누군가를 디버깅 시간을 많이 절약하기를 희망한다.

+0

그리고 기쁩니다. 나는이 오류를 치는 것 같고 그것으로부터 디버그 출력은 inscrutable이다. – davenpcj