1

war ファイルを s3 バケットにアップロードするコードをいくつか含めました (バケットが存在しない場合は、最初にバケットを作成します)。次に、アップロードしたばかりの war ファイルを使用して Elastic Beanstalk アプリケーション バージョンを作成します。

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

これは何が原因でしょうか?

4

1 に答える 1

4

このエラーの考えられる原因の 1 つは、バケット名です。どうやらアンダースコアを含む s3 バケット名を持つことができますが、それらのバケットのキーを使用してアプリケーション バージョンを作成することはできません。

上記の 4 行目を次のように変更すると、

BUCKET_NAME = 'foo-bar23498'

それはうまくいくはずです。

はい、私自身の質問に答えるのは奇妙に感じます...明らかに、これはスタックオーバーフローに関するこの状況で推奨されるアプローチです。他の誰かのデバッグ時間を大幅に節約できることを願っています。

于 2013-01-17T02:05:20.633 に答える