メニュー
AWS Elastic Beanstalk
開発者ガイド (API Version 2010-12-01)

AWS Elastic Beanstalk Go プラットフォームを使用する

AWS Elastic Beanstalk を使用して、Go ベースのアプリケーションを実行、構築、設定することができます。

シンプルな Go アプリケーションをデプロイする

シンプルな Go アプリケーションは、2 つの方法でデプロイすることができます。

  • アプリケーションのメインパッケージを含む application.go という名前のルートのソースファイルにソースバンドルを提供します。Elastic Beanstalk が次のコマンドを使用してバイナリを構築します。

    go build -o bin/application application.go

    アプリケーションの構築後、Elastic Beanstalk がポート 5000 でアプリケーションを開始します。

  • [application] という名前のバイナリファイルにソースバンドルを提供します。バイナリファイルは、ソースバンドルのルートまたはソースバンドルの bin/ ディレクトリにあります。[application] バイナリファイルを両方の場所に配置すると、Elastic Beanstalk は bin/ ディレクトリのファイルを使用します。

    Elastic Beanstalk は、ポート 5000 でこのアプリケーションを起動します。

より複雑なアプリケーションの場合は、Procfile を使用するか、Procfile と Buildfile を組み合わせて使用する必要があります。

複雑な Go アプリケーションをデプロイする

より複雑な Go アプリケーションは、2 つの方法でデプロイすることができます。

  • アプリケーションのソースファイルを含むソースバンドルを、Buildfile および Procfile とともに設定します。Buildfile にはアプリケーションを構築するためのコマンドが含まれ、Procfile にはアプリケーションを実行するための指示が含まれます。

  • アプリケーションのバイナリファイルを含むソースバンドルを、Procfile とともに設定します。Procfile には、アプリケーションを実行するための指示が含まれます。

ビルド設定ファイル(Buildfile)を作成する

Go アプリケーションのカスタムビルドと設定コマンドを指定するには、[Buildfile] という名前のファイルをソースバンドルのルートに含めます。ファイル名では、大文字と小文字が区別されます。Buildfile には次の形式を使用します。

<process_name>: <command>

Buildfile 内のコマンドは、正規表現 ^[A-Za-z0-9_]+:\s*.+$ に一致する必要があります。

Elastic Beanstalk は、Buildfile で実行されるアプリケーションをモニタリングしません。Buildfile は、短期間実行されてタスクが完了したら終了されるコマンドに使用します。長期間継続的に実行される必要のあるアプリケーションプロセスには、代わりに Procfile を使用します。

次の Buildfile の例では、build.sh がシェルスクリプトとして、ソースバンドルのルートに配置されています。

make: ./build.sh

Buildfile 内のすべてのパスは、ソースバンドルのルートと関連します。前もってインスタンス上のファイルの場所がわかっている場合は、Buildfile に絶対パスを含めることができます。

アプリケーションプロセス設定ファイル(Procfile)を作成する

Go アプリケーションを開始するカスタムコマンドを指定するには、[Procfile] という名前のファイルをソースバンドルのルートに含めます。ファイル名では、大文字と小文字が区別されます。Procfile には次の形式を使用します。

<process_name>: <command>

Procfile 内の各行は、正規表現 ^[A-Za-z0-9_]+:\s*.+$ に従う必要があります。

Elastic Beanstalk では、Procfile のプロセスは継続的に実行される必要があります。Elastic Beanstalk はこれらのアプリケーションをモニタリングし、終了されたアプリケーションをすべて再開します。短期間実行されるプロセスには、Buildfile コマンドを使用します。

Go アプリケーションには、前述の正規表現に従う範囲内で、自由に名前を付けることができます。メインアプリケーションの web を呼び出す必要があります。

web: bin/server
queue_process: bin/queue_processor
foo: bin/fooapp

Elastic Beanstalk は、メインの web アプリケーション環境のルート URL(例: http://my-go-env.elasticbeanstalk.com)で公開します。

Elastic Beanstalk は nginx プロキシを設定し、アプリケーション用の PORT 環境変数で指定されたポート番号のアプリケーションにリクエストを転送します。アプリケーションは、このポートを常にリッスンする必要があります。アプリケーション内のこの変数にアクセスするには、os.Getenv("PORT") メソッドを呼び出します。

Elastic Beanstalk は、Procfile 内の最初のアプリケーションのポートの PORT オプション設定で指定されたポート番号を使用します。Procfile 内の以降のアプリケーションでは、ポート番号は 100 ずつ増えていきます。PORT オプションが設定されていない場合、Elastic Beanstalk は最初のポートに 5000 を使用します。

前述の例では、PORT 環境変数は web アプリケーションで 5000、queue_process アプリケーションで 5100、foo アプリケーションで 5200 となります。

次のように、PORT オプションを [aws:elasticbeanstalk:application:environment] 名前領域で設定すると、最初のポートを指定できます。

option_settings:
  - namespace:  aws:elasticbeanstalk:application:environment
    option_name:  PORT
    value:  <first_port_number>

使用しているアプリケーションの環境変数の設定の詳細については、「オプション設定」を参照してください。

Elastic Beanstalk は、名前に web_ プレフィックスがないアプリケーションも実行しますが、これらのアプリケーションはインスタンス外から使用できません。

Procfile で開始されたプロセスからの標準出力ストリームと標準エラーストリームは、プロセスに関連する名前のログファイルにキャプチャされ、/var/log に格納されます。たとえば、前述の例では web プロセスが stdout および stderr についてそれぞれ web-1.log および web-1.error.log という名前のログを生成します。

Procfile 内のすべてのパスは、ソースバンドルのルートと関連します。前もってインスタンス上のファイルの場所がわかっている場合は、Procfile に絶対パスを含めることができます。

実行順序

Go アプリケーションでは、コマンドや設定は次の順番で実行されます。

  1. ソースバンドルの [.ebextensions] ディレクトリ内の commands

  2. Buildfile コマンド。Elastic Beanstalk はすべてのコマンドを同時に実行します。

  3. ソースバンドルの [.ebextensions] ディレクトリ内の container_commands

  4. Procfile コマンド。Elastic Beanstalk はすべてのコマンドを同時に実行します。

設定オプションの設定

すべてのプラットフォームによってサポートされるオプションに加えて、Go プラットフォームには、プロキシサーバーによって静的に提供されるファイルを含むフォルダを指定するための追加の名前空間が用意されています。

たとえば、この設定ファイルは、プロキシサーバーに myimages フォルダのファイルを、/images のパスで提供するように指示します。

option_settings:
  aws:elasticbeanstalk:container:golang:staticfiles:
    /images: myimages

リバースプロキシを設定する

Elastic Beanstalk はリバースプロキシとして nginx を使用し、ポート 80 のロードバランサーにアプリケーションをマッピングします。独自の nginx 設定を実行する場合は、ソースバンドルに [.ebextensions/nginx/nginx.conf ] ファイルを含めることで、Elastic Beanstalk によるデフォルト設定を上書きすることができます。このファイルが存在する場合、Elastic Beanstalk は nginx 設定ファイルの代わりにこのファイルを使用します。

nginx.conf http ブロック内のディレクティブに加えて他のディレクティブを含める場合は、ソースバンドルの .ebextensions/nginx/conf.d/ ディレクトリに設定を追加することもできます。このディレクトリ内のすべてのファイルには、.conf 拡張子が必要です。

拡張ヘルスレポートとモニタリング、自動アプリケーションマッピング、静的ファイルなどの Elastic Beanstalk の機能を活用するには、nginix 設定ファイルの server ブロックに次の行を含める必要があります。

include conf.d/elasticbeanstalk/*.conf;