

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Elastic Beanstalk Go プラットフォームを使用する
<a name="go-environment"></a>

このトピックでは、Elastic Beanstalk で Go アプリケーションを設定、ビルド、実行する方法について説明します。

AWS Elastic Beanstalk は、Go プログラミング言語のさまざまなバージョンで多数のプラットフォームブランチをサポートしています。完全なリストについては、「AWS Elastic Beanstalk プラットフォーム」ドキュメントの「[Go](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.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 でこのアプリケーションを起動します。

どちらの場合も、当社がサポートする Go プラットフォームブランチでは、`go.mod` というファイルでモジュール要件を指定することもできます。詳細については、Go ブログの [Migrating to Go Modules](https://blog.golang.org/migrating-to-go-modules) を参照してください。

より複雑な Go アプリケーションは、2 つの方法でアプリケーションをデプロイすることができます。
+ アプリケーションの出典ファイルを含む出典バンドルを、[Buildfile](go-buildfile.md) および [Procfile](go-procfile.md) とともに設定します。Buildfile にはアプリケーションを構築するためのコマンドが含まれ、Procfile にはアプリケーションを実行するための指示が含まれます。
+ アプリケーションのバイナリファイルを含む出典バンドルを、Procfile とともに設定します。Procfile には、アプリケーションを実行するための指示が含まれます。

Go プラットフォームには、静的アセットを提供し、トラフィックをアプリケーションに転送するためのプロキシサーバーが含まれています。アドバンストなシナリオでは、[デフォルトのプロキシ設定を拡張または上書き](go-nginx.md)できます。

Elastic Beanstalk Linux ベースのプラットフォームを拡張するさまざまな方法の詳細については、「[Elastic Beanstalk Linux プラットフォームの拡張](platforms-linux-extend.md)」を参照してください。

## Go 環境の設定
<a name="go-options"></a>

Go プラットフォーム設定では、Amazon EC2 インスタンスの動作をうまくチューニングできます。Elastic Beanstalk コンソールを使用して、Elastic Beanstalk 環境の Amazon EC2 インスタンス設定を編集できます。

Elastic Beanstalk コンソールを使用して、Amazon S3 へのログローテーションを有効にでき、アプリケーションが環境から読むことができる変数を設定します。

**Elastic Beanstalk コンソールで Go 環境を設定するには**

1. [Elastic Beanstalk コンソール](https://console.aws.amazon.com/elasticbeanstalk)を開き、**リージョン**リストで を選択します AWS リージョン。

1. ナビゲーションペインで、[**環境**] を選択し、リストから環境の名前を選択します。

1. ナビゲーションペインで、[**設定**] を選択します。

1. **[更新、モニタリング、ログ]** の設定カテゴリで、**[編集]** を選択します。

### ログオプション
<a name="go-options-logs"></a>

[Log Options (ログオプション)] セクションには、2 つの設定があります。
+ **インスタンスプロファイル** – アプリケーションに関連付けられた Amazon S3 バケットへのアクセス許可が付与されているインスタンスプロファイルを指定します。
+ **[Enable log file rotation to Amazon S3]** (Amazon S3 へのログファイルのローテーションの有効化) - アプリケーションの Amazon EC2 インスタンスのログファイルを、アプリケーションに関連付けられている Amazon S3 バケットにコピーするかどうかを指定します。

### 静的ファイル
<a name="go-options-staticfiles"></a>

パフォーマンスを向上させるために、**[Static files]** (静的ファイル) セクションを使用して、ウェブアプリケーション内のディレクトリセットから静的ファイル (HTML、イメージなど) を配信するようにプロキシサーバーを設定することができます。ディレクトリごとに、仮想パスをディレクトリマッピングに設定します。プロキシサーバーは、指定されたパスのファイルに対するリクエストを受け取ると、アプリケーションにリクエストをルーティングする代わりにファイルを直接　　処理します。

設定ファイルまたは、Elastic Beanstalk コンソールを使用した静的ファイルの設定の詳細については、「[静的ファイルの提供](environment-cfg-staticfiles.md)」を参照してください。

### 環境プロパティ
<a name="go-options-properties"></a>

**環境プロパティ** セクションでは、アプリケーションを実行している Amazon EC2 インスタンスの環境設定を指定できます。環境プロパティは、キーバリューのペアとしてアプリケーションに渡されます。

Elastic Beanstalk で実行される Go 環境内では、`os.Getenv` 関数を使用して環境変数にアクセスできます。たとえば、次のコードを使用して可変数に `API_ENDPOINT` という名前のプロパティを読み取ることができます。

```
endpoint := os.Getenv("API_ENDPOINT")
```

詳細については、「[環境変数とその他のソフトウェアの設定](environments-cfg-softwaresettings.md)」を参照してください。

## Go 設定の名前空間
<a name="go-namespaces"></a>

[設定ファイル](ebextensions.md)を使用して、設定オプションを設定し、デプロイの間、他のインスタンス設定タスクをパフォーマンスできます。設定オプションは、[プラットフォーム固有](command-options-specific.md)のものでも、Elastic Beanstalk サービス全体の[すべてのプラットフォーム](command-options-general.md)に適用できるものでもかまいません。設定オプションは、名前空間として整理されています。

Go プラットフォームは、プラットフォーム固有の名前空間を定義しません。`aws:elasticbeanstalk:environment:proxy:staticfiles` 名前空間を使用して、静的ファイルを配信するようにプロキシを設定できます。詳細と例については、「[静的ファイルの提供](environment-cfg-staticfiles.md)」を参照してください。

Elastic Beanstalk には、環境をカスタマイズするための多数の設定オプションが用意されています。設定ファイルに加えて、コンソール、保存された設定、EB CLI、または を使用して、設定オプションを指定することもできます AWS CLI詳細については「[設定オプション](command-options.md)」を参照してください。

## Amazon Linux AMI (Amazon Linux 2 より前の) Go プラットフォーム
<a name="go.alami"></a>

Elastic Beanstalk Go 環境で (Amazon Linux 2 より前の) Amazon Linux AMI プラットフォームバージョンを使用している場合は、このセクションの追加情報を読んでください。

**注意事項**  
このトピックの情報は、Amazon Linux AMI (AL1) に基づくプラットフォームブランチにのみ適用されます。AL2023/AL2 プラットフォームブランチでは、以前の Amazon Linux AMI (AL1) プラットフォームバージョンと互換性がなく、*別の構成設定が必要です*。
 [2022 年 7 月 18 日](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html)に、Elastic Beanstalk では Amazon Linux AMI (AL1) に基づくプラットフォームブランチのステータスがすべて**廃止**に設定されました。現在および完全にサポートされている Amazon Linux 2023 プラットフォームブランチへの移行の詳細については、「[Elastic Beanstalk Linux アプリケーションを Amazon Linux 2023 または Amazon Linux 2 に移行する](using-features.migration-al.md)」を参照してください。

### Go Configuration ネームスペース — Amazon Linux AMI (AL1)
<a name="go.alami.namespaces"></a>

[設定ファイル](ebextensions.md)を使用して、設定オプションを設定し、デプロイの間、他のインスタンス設定タスクをパフォーマンスできます。設定オプションは、[プラットフォーム固有](command-options-specific.md)のものでも、Elastic Beanstalk サービス全体の[すべてのプラットフォーム](command-options-general.md)に適用できるものでもかまいません。設定オプションは、名前空間として整理されています。

**注記**  
このトピックの情報は、Amazon Linux AMI (AL1) に基づくプラットフォームブランチにのみ適用されます。AL2023/AL2 プラットフォームブランチでは、以前の Amazon Linux AMI (AL1) プラットフォームバージョンと互換性がなく、*別の構成設定が必要です*。

Amazon Linux AMI Go プラットフォームは、[すべてのプラットフォームでsupport される名前空間](command-options-general.md)の他に、プラットフォーム固有の設定の名前空間を 1 つsupport します。名前空間 `aws:elasticbeanstalk:container:golang:staticfiles` により、ウェブアプリケーションのパスを、静的コンテンツをコンテナするアプリケーションの出典バンドルのフォルダにマッピングするオプションを定義できます。

たとえば、この[設定ファイル](ebextensions.md)は、プロキシサーバーに `staticimages` フォルダのファイルを、`/images` のパスで配信するように指示します。

**Example .ebextensions/go-settings.config**  

```
option_settings:
  aws:elasticbeanstalk:container:golang:staticfiles:
    /html: statichtml
    /images: staticimages
```

Elastic Beanstalk には、環境をカスタマイズするための多数の設定オプションが用意されています。設定ファイルに加えて、コンソール、保存された設定、EB CLI、または を使用して、設定オプションを指定することもできます AWS CLI詳細については「[設定オプション](command-options.md)」を参照してください。

# Elastic Beanstalk で Procfile を使用したカスタムスタートコマンドの設定
<a name="go-procfile"></a>

Go アプリケーションをスタートするカスタムコマンドを指定するには、[`Procfile`] という名前のファイルを出典バンドルのルートに含めます。

`Procfile` 書き込みと使用の詳細については、「[ビルドファイルと Procfile](platforms-linux-extend.build-proc.md)」を参照してください。

**Example [Procfile]**  

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

メインアプリケーション `web` を呼び出し、`Procfile` の最初のコマンドとしてリストする必要があります。Elastic Beanstalk は、メインの `web` アプリケーションを環境のルート URL (例: `http://my-go-env.elasticbeanstalk.com`) で公開します。

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

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

## (Amazon Linux 2 より前の) Amazon Linux AMI での Procfile の使用
<a name="go-procfile.alami"></a>

Elastic Beanstalk Go 環境で (Amazon Linux 2 より前の) Amazon Linux AMI プラットフォームバージョンを使用している場合は、このセクションの追加情報を読んでください。

**注意事項**  
このトピックの情報は、Amazon Linux AMI (AL1) に基づくプラットフォームブランチにのみ適用されます。AL2023/AL2 プラットフォームブランチでは、以前の Amazon Linux AMI (AL1) プラットフォームバージョンと互換性がなく、*別の構成設定が必要です*。
 [2022 年 7 月 18 日](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html)に、Elastic Beanstalk では Amazon Linux AMI (AL1) に基づくプラットフォームブランチのステータスがすべて**廃止**に設定されました。現在および完全にサポートされている Amazon Linux 2023 プラットフォームブランチへの移行の詳細については、「[Elastic Beanstalk Linux アプリケーションを Amazon Linux 2023 または Amazon Linux 2 に移行する](using-features.migration-al.md)」を参照してください。

### ポートパッシング — Amazon Linux AMI (AL1)
<a name="go-procfile.alami.ports"></a>

**注記**  
このトピックの情報は、Amazon Linux AMI (AL1) に基づくプラットフォームブランチにのみ適用されます。AL2023/AL2 プラットフォームブランチでは、以前の Amazon Linux AMI (AL1) プラットフォームバージョンと互換性がなく、*別の構成設定が必要です*。

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

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

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

次のように、`PORT` オプションを [[aws:elasticbeanstalk:application:environment](command-options-general.md#command-options-general-elasticbeanstalkapplicationenvironment)] 名前空間で設定すると、最初のポートを指定できます。

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

使用しているアプリケーションの環境プロパティの設定の詳細については、「[オプション設定](ebextensions-optionsettings.md)」を参照してください。

# Elastic Beanstalk の Buildfile を使用したカスタムビルドと設定
<a name="go-buildfile"></a>

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

```
<process_name>: <command>
```

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

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

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

```
make: ./build.sh
```

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

# プロキシサーバーを設定します
<a name="go-nginx"></a>

Elastic Beanstalk は、リバースプロキシとして nginx を使用し、ポート 80 の Elastic Load Balancing ロードバランサーにアプリケーションをマッピングします。Elastic Beanstalk では、デフォルトの nginx 設定が用意されています。これは拡張することも、独自の設定で完全に上書きすることもできます。

デフォルトでは、Elastic Beanstalk はポート 5000 でアプリケーションにリクエストを送信するように nginx プロキシを設定します。デフォルトのポートを上書きするには、`PORT` [環境プロパティ](go-environment.md#go-options)を、主要なアプリケーションがリッスンするポートに設定します。

**注記**  
アプリケーションがリッスンしているポートは、ロードバランサーからリクエストを受信するために nginx サーバーがリッスンするポートに影響を与えません。

**ご使用のプラットフォームバージョンでプロキシサーバーを設定する**  
すべての AL2023/AL2 プラットフォームでは、統一されたプロキシ設定機能がサポートされています。AL2023/AL2 を実行中のプラットフォームバージョンでプロキシサーバーを設定する方法の詳細については、「[リバースプロキシの設定](platforms-linux-extend.proxy.md)」を参照してください。

## (Amazon Linux 2 より前の) Amazon Linux AMI でのプロキシの設定
<a name="go-nginx.alami"></a>

**注意事項**  
このトピックの情報は、Amazon Linux AMI (AL1) に基づくプラットフォームブランチにのみ適用されます。AL2023/AL2 プラットフォームブランチでは、以前の Amazon Linux AMI (AL1) プラットフォームバージョンと互換性がなく、*別の構成設定が必要です*。
 [2022 年 7 月 18 日](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html)に、Elastic Beanstalk では Amazon Linux AMI (AL1) に基づくプラットフォームブランチのステータスがすべて**廃止**に設定されました。現在および完全にサポートされている Amazon Linux 2023 プラットフォームブランチへの移行の詳細については、「[Elastic Beanstalk Linux アプリケーションを Amazon Linux 2023 または Amazon Linux 2 に移行する](using-features.migration-al.md)」を参照してください。

Elastic Beanstalk Go 環境で Amazon Linux AMI プラットフォームバージョン (Amazon Linux 2 より前) を使用している場合は、このセクションの情報を読んでください。

### デフォルトのプロキシ設定の拡張および上書き — Amazon Linux AMI (AL1)
<a name="go-nginx.alami.extending"></a>

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

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

[Elastic Beanstalk の拡張ヘルスレポートおよびモニタリング](health-enhanced.md)、自動アプリケーションマッピング、静的ファイルなどの Elastic Beanstalk の機能を活用するには、nginx 設定ファイルの `server` ブロックに次の行を含める必要があります。

```
include conf.d/elasticbeanstalk/*.conf;
```