blog

AWS Elastic Beanstalk のデプロイ環境と基礎知識

    • Ryuichi Nonaka
    この記事は書かれてから1年以上経過しており、内容が古い場合があります。

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

    AWS Elastic Beanstalk とは

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

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

    AWS Elastic Beanstalk

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

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

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

    • 権限を付与されたAWS IAMアカウント(アクセスキー・シークレットキー)
    • git
    • git-flow(必須ではない)
    • Homebrew
    • Python(2.7以上)
    • Elastic Beanstalk CLI(3.x系)

    IAMアカウント

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

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

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

    Python

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

    $ brew install python
    $ python -V
    Python 2.7.9
    

    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に必要な環境は用意できました。

    デプロイするための準備

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

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

    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 ...してコミットしておきます。

    AWS Elastic Beanstalkにデプロイする

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

    $ eb deploy
    

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

    $ eb open
    

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

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

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

    環境情報を知りたい

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

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

    $ eb console [environment_name]
    

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

    $ eb list
    

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

    $ eb printenv [environment_name]
    

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

    $ eb setenv key=[value]
    

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

    $ eb use <environment_name>
    

    その他のコマンド

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

    環境を新たに作成する

    $ eb create <env-name>
    

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

    $ eb terminate [env-name]
    

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

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

    $ eb terminate --all
    

    まとめ

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

    コメント・フィードバック