Maven Elastic Beanstalk Plugin

Hiljattain kirjoittelin Spring Boot projektista, jolla on helppo saada aikaan web sovellus joka tukee Java EE teknologioita mutta pyörii jopa Tomcat serverillä. Yksi hyöty mikä tästä saavutetaan on helppo mahdollisuus tuikata paketti vaikka Elastic Beanstalk-pilveen.

Tässä on Maven plug-in joka hoitaa homman (lisää build-osioon pom.xml:ssä):

<plugin>
 <groupId>br.com.ingenieux</groupId>
 <artifactId>beanstalk-maven-plugin</artifactId>
 <version>1.3.1</version>
 <configuration>
 <s3Bucket>elasticbeanstalk-eu-west-1-11111111111</s3Bucket>
 <s3Key>${project.artifactId}/${project.build.finalName}-${maven.build.timestamp}.war</s3Key>
 <region>eu-west-1</region>
 <!-- will save as s3://[bucket name]/[artifactId]/artifactId-version-TIMESTAMP.war -->
 <autoCreateApplication>true</autoCreateApplication>
 <applicationName>${project.artifactId}App</applicationName>
 <environmentName>${project.artifactId}Env</environmentName>
 <cnamePrefix>${project.artifactId}app</cnamePrefix>
 <versionLabel>${project.version}-${buildNumber}</versionLabel>
 </configuration>
 </plugin>

Luonnollisesti s3 bucket id:t ja regionit kuntoon tuossa. Ja näin aukeaa uusia komentoja:

mvn beanstalk:upload-source-bundle beanstalk:create-application-version beanstalk:create-environment

Ylläoleva luo beanstalkin avulla Amazon AWS klusteriin uuden web serverin pyörittämään softaa.

Tämä taas päivittää softan uuteen versioon, mukava yhdistää esim. mvn clean install käskyihin:

mvn beanstalk:upload-source-bundle beanstalk:create-application-version beanstalk:update-environment

Huom! Nämä kaverit kaipaavat myös autentikointia, se taas onnistuu kun tekee settings.xml tiedostoon .m2 kansioon tällaista:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
 http://maven.apache.org/xsd/settings-1.0.0.xsd">
   <servers>
     <server>
     <id>aws.amazon.com</id>
       <username>AATAJABEETÄJACEETÄ</username>
       <password>HÄRPÄTIHÄRPÄTI</password>
     </server>
   </servers>
 </settings>

Nämä tiedot tietysti löytyvät Amazon AWS alta, ja luonnollisesti salasanasta on parasta käyttää kryptattua muotoa, mitä Maven tukeekin mukavasti. Huom! Tietysti myös ylläolevassa plugin-asetuksessa syytä asettää tuo s3 bucket id oikein.

Lisäksi, jos lisäät tämän plugin-osion configurationin jälkeen, deploy tapahtuu automaattisesti esim. mvn clean install komennolla:

<executions>
  <execution>
    <phase>install</phase>
    <goals>
      <goal>upload-source-bundle</goal>
      <goal>create-application-version</goal>
      <goal>update-environment</goal>
    </goals>
  </execution>
</executions>

No niin, tuossa pluginissa on kuitenkin metka bugi, ainakin nykyversiossa. Jostain syystä create-vaiheessa se vaatii cnamePrefix:in parametrina (ja luo tomcat ympäristön joka ei tue edes Java 7:aa vaan on Java 6 tasossa – kamalaa! – mutta ei vielä se bugi) – mutta update vaiheessa taas tuo cnamePrefix kylmästi ohitetaan ja sen sijaan on jotenkin kovakoodattu artifactId:n käyttö.

Toisin sanoen, fiksuinta on tehdä beanstalkkiin ensin sopiva projekti jossa on oikeasti Java 7 tuki (ja saisi se 8:kin tippua sinne jossain vaiheessa..) – ja pitää huolta että cnamePrefix ja projektin artifactId ovat prikulleen, case-sensitiivisesti samat. Silloin piisaa konfiguraatioksi:

<plugin>
  <groupId>br.com.ingenieux</groupId>
  <artifactId>beanstalk-maven-plugin</artifactId>
  <version>1.3.1</version>
  <configuration>
    <applicationName>NewFacebookApp</applicationName>
     <s3Key>${project.artifactId}/${project.build.finalName}-${maven.build.timestamp}.war</s3Key>
     <s3Bucket>elasticbeanstalk-eu-west-1-1112223333</s3Bucket>
     <region>eu-west-1</region>
     <environmentName>NewFacebookEnvironment</environmentName>
  </configuration> 
</plugin>

Ja tarkista siis, että projektin alussa määritelty artifactId = beanstalkissa oleva url prefix osa, eli se mitä on ennen elasticbeanstalk.com osaa. Sitten toimii.

Eli ei ihan vakaata kamaa tämä plugin. Mutta toimiessaan ihmeellisen ihana.

(kirosanat editoitu pois konfiguraation kommenteista)

 

 

Mainokset

Vastaa

Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out / Muuta )

Twitter-kuva

Olet kommentoimassa Twitter -tilin nimissä. Log Out / Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out / Muuta )

Google+ photo

Olet kommentoimassa Google+ -tilin nimissä. Log Out / Muuta )

Muodostetaan yhteyttä palveluun %s