31
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Amazon Web ServiceAdvent Calendar 2013

Day 11

JenkinsからBeanstalkへ自動デプロイする

Last updated at Posted at 2013-12-11

皆様、Beanstalkは使ってますでしょうか。

  • デプロイの仕組みがあって手軽
  • バージョン管理の仕組みがあって安心
  • ELB, EC2, RDS, S3等のAWSのパーツを組み合わせてるだけなので、構成が分かりやすい

などなど、いいところが沢山あるのですが、イマイチ使われてるイメージがないです。

なので、ちょっとでも興味持ってもらおうと、CIの究極系、自動デプロイをやってみました。

やりかた

前提・お断り

  • Jenkinsをどこかのサーバに導入してください
  • Jenkinsを入れたサーバにAWS-CLIをインストールしてください
  • サンプルはWARをアップするパターンです
    • でも多分rubyとかはgit archiveでzip作ったら後は一緒だと思う

beanstalkでの作業

サンプルアプリケーションを作っておいて下さい。出来上がったアプリのapplication名、environment名を使います。

jenkinsでの作業

jenkinsで下記の環境変数を設定します。シェル実行でexportで書いてもOK。

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • AWS_DEFAULT_REGION=ap-northeast-1

そして、アプリケーションのテスト実行後に、下のシェルをオプション付きで実行します。ソースコードのバージョン管理に含めてシェル実行で叩くのがよいと思います。

| オプション | 説明 |
|:--|:--|:--|
| -a | beanstalkでのApplication名 |
| -e | beanstalkでのEnvironment名 |
| -v | 任意のバージョン番号 $BUILD_NUMBER とか使うとよさ気 |
| -w | WARファイルの場所。git archiveで作ったzipでも可だと思う(未確認) |
| -b | S3のバケット名 |

#!/bin/sh

usage() {
  echo "Usage: $0 [-a application name] [-e environment name] [-v version] [-w war file on local] [-b bucket name for elastic beanstalk]" 1>&2
  exit 1
}

while getopts "a:e:v:w:b:h" opt
do
  case $opt in
    a) APP_NAME=$OPTARG ;;
    e) ENV_NAME=$OPTARG ;;
    v) VERSION=$OPTARG ;;
    w) WAR_PATH=$OPTARG ;;
    b) BUCKET=$OPTARG ;;
    h) usage ;;
  esac
done

if [ -z "$APP_NAME" ] || \
   [ -z "$ENV_NAME" ] || \
   [ -z "$VERSION" ] || \
   [ -z "$WAR_PATH" ] || \
   [ -z "$BUCKET" ]; then
  usage
fi

function error() {
  echo $1
  exit 1
}

aws s3 cp ${WAR_PATH} s3://${BUCKET}/${VERSION}.war \
  || error "failed to upload S3"

aws elasticbeanstalk create-application-version \
  --application-name ${APP_NAME} \
  --version-label ${VERSION} \
  --source-bundle S3Bucket=${BUCKET},S3Key=${VERSION}.war \
  || error "failed to create new version"

aws elasticbeanstalk update-environment \
  --environment-name ${ENV_NAME} \
  --version-label ${VERSION} \
  || error "failed to update environment"

うまく行けば、テスト実行後に自動デプロイが行われるはずです。

開発環境への自動デプロイなどにどうぞ。

まとめ

やってみるとかなり簡単なのが分かります。ぜひお試し下さい。

beanstalkを使ってない方は、ELBでEC2を複数並べるサービスを作る時はぜひ検討してみてください。まったくおんなじ構成をサクッと作れますし、後からbeanstalkを捨てるのも割と簡単です。おんなじパーツで同じ構成を組むのはさほど難しくはないので。AWSからは逃げ出せませんけどね(・ω<)

31
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?