2016-07-29 10 views
1

私はElastic Beanstalkで "hello world"の複雑さのWebアプリケーションを実行しようとしています。私はElastic BeanstalkのSpring Bootでこれをやっても問題ありません。Elastic BeanstalkでSpring Cloud AWSアプリケーションを実行することはできますか?

しかし、Spring Cloud AWSを使用しようとすると、私は無数の問題に遭遇します。参照ガイドは、Beanstalkでの実行が可能であるとは言及していないので、おそらく私は間違ったツリーを吠えているでしょうか?

私が遭遇する根本的な問題は、使用されている「スタック」(つまりCloudFormationスタック)を識別しようとすると、stackResourceRegistryFactoryBeanが爆発することです。しかし私は、CloudFormationではなくElastic Beanstalkを使用しています。ルート例外は次のとおりです。

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.cloud.aws.core.env.stack.config.StackResourceRegistryFactoryBean]: Factory method 'stackResourceRegistryFactoryBean' threw exception; nested exception is java.lang.IllegalAccessError: tried to access class org.springframework.cloud.aws.core.env.stack.config.AutoDetectingStackNameProvider from class org.springframework.cloud.aws.autoconfigure.context.ContextStackAutoConfiguration$StackAutoDetectConfiguration 
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189) 
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588) 
    ... 89 more 
Caused by: java.lang.IllegalAccessError: tried to access class org.springframework.cloud.aws.core.env.stack.config.AutoDetectingStackNameProvider from class org.springframework.cloud.aws.autoconfigure.context.ContextStackAutoConfiguration$StackAutoDetectConfiguration 
    at org.springframework.cloud.aws.autoconfigure.context.ContextStackAutoConfiguration$StackAutoDetectConfiguration.stackResourceRegistryFactoryBean(ContextStackAutoConfiguration.java:71) 
    at org.springframework.cloud.aws.autoconfigure.context.ContextStackAutoConfiguration$StackAutoDetectConfiguration$$EnhancerBySpringCGLIB$$432c7658.CGLIB$stackResourceRegistryFactoryBean$0(<generated>) 
    at org.springframework.cloud.aws.autoconfigure.context.ContextStackAutoConfiguration$StackAutoDetectConfiguration$$EnhancerBySpringCGLIB$$432c7658$$FastClassBySpringCGLIB$$47c6e7d2.invoke(<generated>) 
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) 
    ... 

用に生成されたEC2インスタンスに存在するタグがあり、「AWS:cloudformationは:IDをスタック」と「AWS:cloudformation:-名を積み重ねる」ことが適切であるならば、そして私の理解がありますBeanstalkは舞台裏でCloudFormationスタックを使用しています。私は手動で@EnableStackConfiguration経由でスタックの名前を指定しようとしましたが、名前が生成されているので、うまくいきません。

私の質問は次のとおりです。 1)Elastic BeanstalkでSpring Cloud AWSベースのアプリケーションを実行することはできますか? 2)そうであれば、特別な手順は必要ですか?たとえば、CloudFormationの読み込みアクセスがその役割に必要であることについて既に知っています。 3)スタックからリソース名を取得しようとするSpring Cloud AWSの部分を無効にする方法はありますか?この時点で私のアプリはこれを必要としません。事前に

おかげで、 K

答えて

0

spring-cloud-awsは、カスタムCloudFormationテンプレートを使用してアプリケーションを実行しているデフォルトで想定しているようです。 Elastic Beanstalkでの場合

、あなたは単に自動的にスタックに関する情報を取得するから辞任するspring-cloud-awsを指示する必要があります:それはドキュメントに記載されていない理由を

cloud.aws.stack.auto = false 

わかりません。基本的なJavaアプリケーションでは、Elastic Beanstalkが当然の選択と思われます。

2

時間がたつにつれ、私はこのトピックに関する自分の質問に答えました。

まず、Elastic Beanstalkは舞台裏でCloudFormationを使用するため、「スタック」が存在するのはこのためです。

次に、Spring Cloud AWSは、同じスタックに作成された可能性のある他のリソースにバインドすることで、DBへの接続を試みます。あなたがそれを期待しているなら、これは合理的です。もしそうでなければ、@barthandが言うように、おそらくcloud.aws.stack.auto = falseでこの機能をオフにするほうが、アプリの起動に失敗するよりも良いでしょう。

第3に、Elastic Beanstalkを使用する場合、インスタンスに実行ロールを関連付ける機会があります。そうしないと、インスタンスのコードはAWS SDKで何もできません。 CloudFormationスタック内のリソースを探索するために、Spring Cloud AWSはいくつかのAPI呼び出しを試みますが、デフォルトではこれらは許可されていません。だから、私の元の質問に答えるために

"Statement": [ 
    { 
     "Effect": "Allow", 
     "Action": [ 
      "cloudformation:DescribeStacks", 
      "cloudformation:DescribeStackEvents", 
      "cloudformation:DescribeStackResource", 
      "cloudformation:DescribeStackResources", 
      "cloudformation:GetTemplate", 
      "cloudformation:List*" 
     ], 
     "Resource": "*" 
    } 
] 

を:彼らは許可にするために、私はロールにこれらの権限を追加

  1. をはい、それは間違いなく可能である春クラウドAWS を実行するために(かつ簡単に!) Elastic Beanstalkのプログラム
  2. 特別要件 - CloudFormationが含まれるように関連付けられている役割に権限を開く必要があるが、
  3. を読み取り操作、または...この情報が誰かを助け、これらの使用cloud.aws.stack.auto = falseを

    希望を無効にします将来的に

+0

ありがとう、これは私にとって非常に役に立ちました。 – shawnjohnson

関連する問題