aws elasticbeanstalk でデプロイをする

[AWS] [AWS Elastic Beanstalk] AWS Elastic Beanstalk のデプロイ環境と基礎知識 | UI/UX Design、フロントエンド系の技術に関する備忘録 | whiskers

上記を参考。

仕事で既に用意されたAWS Elastic Beanstalk 環境にデプロイする機会があったので環境構築と使い方についてメモしておきます。AWSやGitについては説明を省くのでこれから使い始めたい方は以下のページを参考にどうぞ。

1, AWS Elastic Beanstalk とは

AWS Elastic Beanstalk は、Java、.NET、PHP、Node.js、PythonRuby、Go および Docker を使用して開発されたウェブアプリケーションやサービスを、Apache、Nginx、Passenger、IIS など使い慣れたサーバーでデプロイおよびスケーリングするための、使いやすいサービスです。

お客様はコードをアップロードするだけで、Elastic Beanstalk が、キャパシティのプロビジョニング、ロードバランシング、Auto Scaling からアプリケーションの状態モニタリングまで、デプロイを自動的に処理します。同時に、お客様のアプリケーションが稼動している AWS リソースの完全なコントロールを維持でき、いつでも基本的なリソースにアクセスすることができます。

AWS Elastic Beanstalk

もう少し具体的に言うとgitのリポジトリAWS Elastic BeanstalkにpushしてAWS環境に自動デプロイしてくれるサービスです。デザイナーやフロントエンジニアは既に用意されたAWS Elastic Beanstalk環境にpushするだけでデプロイを行うことができます。

2, デザイナーやフロントエンジニアがAWS Elastic Beanstalkを使うには

AWS Elastic Beanstalkを使うために必要なソフトウェアは以下の通り。

2.1, IAMアカウント

Gitは既に使っている前提で、デザイナーやフロントエンジニアであればインフラエンジニアからIAMアカウントが発行されるはずです。発行されたIAMアカウントでAWSマネジメントコンソールにアクセスし、アクセスキーとシークレットキーをメモしておきます。

このアクセスキーとシークレットキーをユーザーrootの.aws/credentialsAWSへアクセスするためのプロファイル<profile-name>を定義します。<profile-name>の部分は任意の指定が可能です。

[<profile-name>]
aws_access_key_id = <AWS_ACCESS_KEY_ID>
aws_secret_access_key = <AWS_SECRET_ACCESS_KEY>

2.2, Python

詳しいインストール方法は記載しませんがHomebrewからインストール可能です。インストールが完了したらバージョンを確認しておきます。

$ brew install python
$ python -V
Python 2.7.9

2.3, Elastic Beanstalk CLI

AWS Elastic Beanstalkをコマンドラインから操作するためにElastic Beanstalk CLIをHomebrew経由でインストールします。インストールが完了したらこちらもバージョンを確認します。

$ brew install aws-elasticbeanstalk
$ eb --version
EB CLI 3.3.2 (Python 2.7.6)

これでAWS Elastic Beanstalkに必要な環境は用意できました。

3, デプロイするための準備

インフラエンジニアがすでに環境を用意している前提でデプロイするための準備を行います。AWS Elastic Beanstalkにデプロイするためにはまずgitプロジェクトを定義します。

$ mkdir <project_directory>
$ cd <project_directory>
$ git init

3.1, AWS Elastic Beanstalk

次に$ eb init --profile <profile-name>を実行し質問形式でElastic Beanstalkプロジェクトを設定していきます。<profile-name>はIAMアカウントを設定した際に.aws/credentialsに記載したプロファイルネームです。質問は以下の3つになります。

  1. リージョン(AWSのリージョン)
  2. アプリケーション(用意されているアプリケーション)
  3. 環境(テスト、本番等)

アプリケーションと環境はインフラエンジニアが用意しているはずなので、基本的に番号を入力して選択していくだけです。リージョンについてはマネジメントコンソールから確認が必要ですが、日本であればTokyoになるでしょう。コマンドが完了すると.elasticbeanstalk/config.yml.gitignoreが作られます。

.elasticbeanstalk/config.ymlにはgitのブランチmaster:に合わせて環境名environment: app-prdが指定されます。masterブランチでデプロイを実行した際、app-prdの環境にデプロイするという指定です。

branch-defaults:
  master:
    environment: app-prd
global:
  application_name: appname
  default_ec2_keyname: hoge-fuga
  default_platform: 64bit Amazon Linux 2015.03 v1.3.2 running PHP 5.6
  default_region: ap-northeast-1
  profile: <profile-name>
  sc: git

.gitignoreの中身はこのようになっています。

# Elastic Beanstalk Files
.elasticbeanstalk/*
!.elasticbeanstalk/*.cfg.yml
!.elasticbeanstalk/*.global.yml

これでデプロイの準備が完了しました。あとは$ git add ...$ git commit ...してコミットしておきます。

4, AWS Elastic Beanstalkにデプロイする

デプロイ作業は簡単、コマンド1発です。コマンドを実行するとインフラエンジニアの手を煩わせず自動でデプロイ処理が行われます。

$ eb deploy

デプロイ先を確認するのもコマンドから行えます。ブラウザが起動しデプロイ先が表示されます。

$ eb open

4.1, developブランチをテスト環境にデプロイするには

developブランチの場合はテスト環境にデプロイしたい、そんな時はdevelopブランチにcheckoutし$ eb initを行うことでブランチ設定を追加することができます。

branch-defaults:
  master:
    environment: app-prd
  develop:
    environment: app-dev
...

4.2, 環境情報を知りたい

$ eb status
Environment details for: <env-name>
  Application name: <app-name>
  Region: ap-northeast-1
  Deployed Version: fba1
  Environment ID: <id>
  Platform: 64bit Amazon Linux 2015.03 v1.3.2 running PHP 5.6
  Tier: WebServer-Standard-1.0
  CNAME: <xxxxxxx.elasticbeanstalk.com>
  Updated: 2015-05-18 11:59:23.048000+00:00
  Status: Ready
  Health: Green
Alert: An update to this CLI is available.

4.3, マネジメントコンソールを開く

$ eb console [environment_name]

4.4, アプリケーションの環境一覧を表示する

$ eb list

4.5, 環境に設定されている環境変数を表示する

$ eb printenv [environment_name]

環境変数を設定することもできます。

$ eb setenv key=[value]

4.6, デフォルトの環境を設定する

$ eb use <environment_name>

5, その他のコマンド

以下のコマンドを使う機会はそれほどないと思いますが一応紹介しておきます。

5.1, 環境を新たに作成する

$ eb create <env-name>

5.2, 実行中の環境をシャットダウンする

$ eb terminate [env-name]

5.3, アプリケーションを完全に削除する

このコマンドを実行するとアプリケーションが消えるのでかなり危険なコマンドです。

$ eb terminate --all

6, まとめ

デプロイ系のツールをはじめて使いましたが便利ですね。すべては紹介しきれていないので下記ドキュメントを改めて読むとコマンド周りを一通り覚えることができると思います。