AWS Elastic Beanstalkでめちゃくちゃ簡単に継続的デリバリーを実践する方法

みなさんAWS Elastic Beanstalk使ってますか。サーバーのセットアップをすることなくサクっとWebアプリケーションをデプロイして試せるのはとてつもなく便利ですよね。とは言えAWS Management Consoleからデプロイしようものなら@digitalsoul0124に

「えーっ、手動デプロイが許されるのは小学生までだよねー(笑)」

とディスられること間違いなしです。

継続的デリバリーを行うのであればCIサーバーからボタン1つでデプロイしたいですよね。今回はその方法をご紹介します。

Mavenで使う

方法はやっぱり我等がMavenです。幸いなことにBeanstalk Maven Pluginという どストライクなプラグインがあります。

<;plugin>;
	<;groupId>;br.com.ingenieux<;/groupId>;
	<;artifactId>;beanstalk-maven-plugin<;/artifactId>;
	<;version>;0.2.5<;/version>;
<;/plugin>;

セントラルリポジトリにあるので、プラグインリポジトリの設定は必要なく上記の記述だけでOKです。

これをMavenのリリース時にBeanstalkにデプロイするには、

<;plugin>;
	<;groupId>;org.apache.maven.plugins<;/groupId>;
	<;artifactId>;maven-release-plugin<;/artifactId>;
	<;version>;2.2.2<;/version>;
	<;configuration>;
		<;goals>;package beanstalk:upload-source-bundle beanstalk:create-application-version beanstalk:update-environment<;/goals>;
	<;/configuration>;
<;/plugin>;

のようにmaven-release-pluginのgoalsにbeanstalk-maven-pluginのゴールを記述してやります。

Beanstalkのバージョンラベルは${beanstalk.versionLabel}が使われます。デフォルトは${maven.build.timestamp}となっていますが、maven-release-pluginと組み合わせる場合、pomのバージョンと合わせるのが良いと思います。propertiesで

<;beanstalk.versionLabel>;${project.version}<;/beanstalk.versionLabel>;

としてやりましょう。

Beanstalkの初期設定

初期設定といっても簡単で、AWS Management Consoleからポチポチとサンプルアプリケーションをデプロイしましょう。Application Nameは${project.artifactId}に合わせておきます。

S3の設定

warはAWS S3にアップロードされるので、ターゲットとなるバケットを作成しておきます。デフォルトでは${project.artifactId}のバケットにアップロードされます。

AWSアカウントの設定

BeanstalkにデプロイするためのAWSアカウントをsettings.xmlに記述します。https://aws-portal.amazon.com/gp/aws/securityCredentialsもしくはAWS IAMよりアクセスキーIDとシークレットアクセスキーを取得してください。

AWS IAMでのパーミッション

AWS IAMで作成したユーザーのアクセスキーIDとシークレットアクセスキーを使う場合、パーミッションはAWS Elastic Beanstalk Full Accessを選択してください。シークレットアクセスキーは作成直後しか見ることができない?ようなので忘れずにメモしておきましょう。忘れてしまった場合は、ユーザーのSecurity Credentialsタブより作成し直すことができます。

settings.xmlに記述

usernameにアクセスキーID、パスワードにシークレットアクセスキーを記述します。以前のエントリで紹介した方法でパスワードは暗号化しておくとよいでしょう。

<;servers>;
	<;server>;
		<;id>;aws.amazon.com<;/id>;
		<;username>;AKIAID2HPK4GWMGQ4JWA<;/username>;
		<;password>;{x3vArRlg3GxSApoHlXNOOG1llbg4aB2Uj8JuEM34An1bN71SOsSdSw5PJq9M/aszy9bvdK+fyxKZ3DHq+TFWLg==}<;/password>;
	<;/server>;
<;/servers>;

こんな感じ。

デプロイしてみる

あとは普通に

mvn clean release:prepare release:perform -B

とすればリリースと同時にBeanstalkへのデプロイも行われます。便利!

https://github.com/nagaseyasuhito/bouvardiaが上記設定をしたプロジェクトなので参考にどうぞ!

「AWS Elastic Beanstalkでめちゃくちゃ簡単に継続的デリバリーを実践する方法」への1件のフィードバック

  1. Actually, I haven’t thought about maven-release-plugin. Good catch!

    Thank you for using beanstalker as well! :)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>