2016-07-29 4 views
1

Ich versuche, eine Web-Anwendung der "Hallo Welt" -Komplexität auf Elastic Beanstalk auszuführen. Ich habe kein Problem mit Spring Boot auf Elastic Beanstalk.Ist es möglich, eine Spring Cloud AWS-Anwendung auf Elastic Beanstalk auszuführen?

Aber wenn ich versuche, Spring Cloud AWS zu verwenden, stoße ich auf eine Vielzahl von Problemen. Der Referenzführer erwähnt nie, dass das Laufen auf Bohnenstange möglich ist, also belle ich vielleicht den falschen Baum auf?

Die Wurzel Problem, das ich zu stoßen scheinen die stackResourceRegistryFactoryBean Sprengung beim Versuch, den „Stapel“ zu identifizieren, verwendet wird - das heißt, die Cloudformation-Stack. Aber ich verwende Elastic Beanstalk, nicht CloudFormation. Die Wurzel Ausnahme ist:

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

Es gibt Tags vorhanden auf der erzeugten EC2-Instanz für "aws: Cloudformation: Stack-ID" und "aws: Cloudformation: Stack-namen", wenn es relevant ist, und mein Verständnis ist, dass Bohnenstange verwendet Cloudformation hinter den Kulissen Stacks. Ich habe versucht, den Namen des Stapels manuell über @EnableStackConfiguration anzugeben, aber da der Name generiert wird, würde ich das lieber nicht tun, auch wenn es funktioniert.

Also meine Fragen sind: 1) Ist es möglich, eine Spring Cloud AWS-basierte Anwendung auf Elastic Beanstalk ausführen? 2) Wenn ja, sind spezielle Schritte erforderlich? Zum Beispiel habe ich bereits die Lösung für den Lesezugriff von CloudFormation entdeckt, die für die Rolle erforderlich ist. 3) Gibt es eine Möglichkeit, den Teil von Spring Cloud AWS zu deaktivieren, der versucht, Ressourcennamen vom Stapel zu erhalten? An dieser Stelle benötigt meine App das nicht.

Dank im Voraus, k

Antwort

0

spring-cloud-aws scheint standardmäßig, die Sie ausführen Ihre App mit Ihrer benutzerdefinierten Vorlage Cloudformation zu übernehmen.

Bei Elastic Beanstalk, müssen Sie einfach spring-cloud-aws sagen, von Beschaffung von Informationen über den Stapel automatisch zum Rücktritt:

cloud.aws.stack.auto = false 

nicht sicher, warum es nicht in der Dokumentation erwähnt wird. Für grundlegende Java-Anwendungen scheint Elastic Beanstalk eine naheliegende Wahl zu sein.

2

Ok, also im Laufe der Zeit habe ich meine eigenen Fragen zu diesem Thema beantwortet.

Zuerst Elastic Beanstalk nutzt Cloudformation hinter den Kulissen, so ist dies, warum ein „Stack“ ist.

Als nächstes Frühjahr Wolke AWS versucht Verbindungen zu DBs und so leichter zu machen, indem auf andere Ressourcen verbindlich, die im selben Stapel erstellt wurde. Das ist vernünftig - wenn Sie es erwarten. Wenn dies nicht der Fall ist, ist es wahrscheinlich besser, diese Funktion mit cloud.aws.stack.auto = false zu deaktivieren, als dass die App nicht gestartet werden kann.

Drittens: Wenn Sie Elastic Beanstalk verwenden, haben Sie die Möglichkeit, Ihrer Instanz eine Ausführungsrolle zuzuordnen - andernfalls kann der Code in Ihrer Instanz nicht viel mit dem AWS SDK tun. Um die Ressourcen in einem CloudFormation-Stack zu untersuchen, versucht Spring Cloud AWS, einige API-Aufrufe durchzuführen. Diese sind standardmäßig nicht zulässig.sie erlaubt zu machen, habe ich diese Berechtigungen für die Rolle:

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

So meine ursprüngliche Fragen zu beantworten: (! und leicht)

  1. Ja, es ist auf jeden Fall möglich, eine Feder Wolke AWS laufen Programm in der elastischen Bohnenstange.
  2. Besondere Anforderungen - Brauchen Sie die Berechtigungen für die zugeordnete Rolle zu öffnen Cloudformation Leseoperationen zu schließen, oder ...
  3. diese mit cloud.aws.stack.auto deaktivieren = false

    Hope this info hilft jemand in der Zukunft

+0

Vielen Dank, das war sehr hilfreich für mich. – shawnjohnson

Verwandte Themen