AWS Elastic Beanstalk
開発者ガイド

Elastic Beanstalk を Amazon Relational Database Service に使用する

AWS Elastic Beanstalk は、「Elastic Beanstalk 環境での Amazon Relational Database Service (Amazon RDS) インスタンスの実行」をサポートします。この作業は環境の開発およびテストに適しています。ただし、データベースインスタンスのライフサイクルをアプリケーション環境のライフサイクルに結び付けるため、実稼働環境に理想的なものではありません。

注記

アプリケーションで DB インスタンスを使用したことがない場合は、最初に Elastic Beanstalk コンソールを使用してテスト環境にインスタンスを追加してください。これにより、アプリケーションが環境プロパティを読み取り、接続文字列を作成し、Amazon Virtual Private Cloud (Amazon VPC) とセキュリティグループ設定を組み合わせに追加する前に DB インスタンスに接続できることを確認します。詳細については、「データベースを Elastic Beanstalk 環境に追加する」を参照してください。

環境からデータベースインスタンスを分離するには、Amazon RDS でデータベースインスタンスを実行し、アプリケーションの起動時にそれに接続するように設定します。これにより、複数の環境をデータベースに接続し、データベースに影響を与えないで環境を終了して、Blue/Green デプロイでシームレスな更新を実行できます。詳細については、「ダウンタイム、データベース同期の問題、またはデータの損失なしで Amazon RDS インスタンスを AWS Elastic Beanstalk 環境から分離するには、どうすれば良いですか?」を参照してください。

環境内で Amazon EC2 インスタンスに外部データベースへの接続を許可するには、追加のセキュリティグループで環境の Auto Scaling グループを設定できます。環境にアタッチするセキュリティグループには、データベースのインスタンスにアタッチするセキュリティグループ、またはデータベースセキュリティグループが着信を許可する別のセキュリティグループと同じものを指定できます。

注記

Elastic Beanstalk が環境の Auto Scaling グループにアタッチする自動生成されるセキュリティグループからの着信を許可するデータベースのセキュリティグループにルールを追加することで、データベースに環境を接続することができます。ただし、これを行うことで 2 つのセキュリティグループ間に依存性が生じます。したがって、データベースのセキュリティグループは環境のセキュリティグループに依存するため、環境を終了しようとすると、Elastic Beanstalk は環境のセキュリティグループを削除できなくなります。

データベースインスタンスを起動しセキュリティグループを設定すると、環境プロパティを使用して、接続情報 (エンドポイント、パスワードなど) をアプリケーションに渡すことができます。これは、ご使用の環境でデータベースインスタンスを実行するときに Elastic Beanstalk が使用するのと同じメカニズムです。

セキュリティを高めるには、接続情報を Amazon S3 に保存し、デプロイの間にデータを取得するように Elastic Beanstalk を設定します。設定ファイル (.ebextensions) を使用して環境内のインスタンスを設定し、アプリケーションをデプロイするときに、Amazon S3 からファイルを安全に取得できます。

デフォルトの VPC で外部 Amazon RDS インスタンスを起動して接続

Elastic Beanstalk で実行するアプリケーションで外部データベースを使用するには、まず Amazon RDS で DB インスタンスを起動します。Amazon RDS で起動するどのインスタンスも Elastic Beanstalk と Elastic Beanstalk 環境から完全に独立しており、設定で Elastic Beanstalk には依存していません。これは、Amazon RDS でサポートされている DB エンジンとインスタンスタイプを、これらが Elastic Beanstalk で使用されていなくても使用できることを意味します。

以下で、「デフォルト VPC」の手順について説明します。このプロセスは、カスタム VPC を使用する場合と同じです。唯一の追加要件となるのが、環境と DB インスタンスが相互に通信可能な同じサブネット内に存在することです。カスタム VPC を Elastic Beanstalk で設定する方法の詳細については、「Elastic Beanstalk を Amazon Virtual Private Cloud に使用する」を参照してください。

RDS DB インスタンスをデフォルト VPC 内で起動するには

  1. RDS コンソールを開きます。

  2. ナビゲーションペインで、[Databases] (データベース) を選択します。

  3. [データベースの作成] を選択します。

  4. データベースエンジンを選択します。[次へ] を選択します。

  5. プロンプトに応じて、ユースケースを選択します。

  6. DB 詳細の指定 で、デフォルト設定を確認し、必要に応じて調整します。以下のオプションに注目します。

    • DB インスタンスクラス – ワークロードに適したメモリ量と CPU 能力があるインスタンスサイズを選択します。

    • マルチ AZ 配置 – 高可用性を実現するには、別のゾーンにレプリカを作成する ように設定します。

    • マスターユーザー名マスターパスワード – データベースのユーザー名とパスワード。後で使用するため、これらの設定を書き留めておきます。

  7. [次へ] を選択します。

  8. データベースオプション で、データベース名 として ebdb と入力します。後で使用できるように、データベースポート の値を書き留めます。

  9. その他のオプションのデフォルト設定を確認し、[データベースの作成] を選択します。

次に、DB インスタンスにアタッチするセキュリティグループを変更して、適切なポートへのインバウンドトラフィックを許可します。これは、後で Elastic Beanstalk 環境にアタッチするのと同じセキュリティグループで、追加するルールは、同じセキュリティグループ内の他のリソースにアクセス許可を付与するものです。

RDS インスタンスのセキュリティグループの進入ルールを変更する

  1. Amazon RDS コンソールを開きます。

  2. [データベース] を選択します。

  3. 詳細を表示する DB インスタンスの名前を選択します。

  4. [接続] セクションで、後に情報を使用するために、このページに表示される [サブネット]、[セキュリティグループ]、[エンドポイント] を書き留めます。

  5. [セキュリティ] には、DB インスタンスに関連付けられるセキュリティグループが表示されます。リンクを開いて、Amazon EC2 コンソールにセキュリティグループを表示します。

    
        Amazon RDS コンソールの [DB インスタンス] ページの [接続] セクション
  6. セキュリティグループの詳細で、インバウンド を選択します。

  7. [Edit] を選択します。

  8. [Add Rule] を選択します。

  9. タイプ として、アプリケーションが使用する DB エンジンを選択します。

  10. ソース として、sg- と入力して、使用可能なセキュリティグループのリストを表示します。現在のセキュリティグループを選択し、このセキュリティグループのリソースが、同じグループ内の他のリソースからのトラフィックをデータベースポートで受信することを許可します。

    
        Amazon EC2 コンソールのセキュリティグループのインバウンドルールの編集
  11. [Save] を選択します。

次に、実行中の環境に DB インスタンスのセキュリティグループを追加します。この手順によって、アタッチされる追加のセキュリティグループを使用して、Elastic Beanstalk が環境内のすべてのインスタンスの再プロビジョニングを行います。

環境にセキュリティグループを追加するには

  • 次のいずれかを行ってください。

    • Elastic Beanstalk コンソール を使用してセキュリティグループを追加するには

      1. Elastic Beanstalk コンソール を開きます。

      2. お客様の環境の管理ページに移動します。

      3. [Configuration] を選択します。

      4. [インスタンス] 設定カテゴリで、[変更] を選択します。

      5. EC2 セキュリティグループ で、Elastic Beanstalk が作成するインスタンスセキュリティグループに加えて、インスタンスにアタッチするセキュリティグループを選択します。

      6. [Apply] を選択します。

      7. 警告を読んでから、確認 を選択します。

    • 設定ファイルを使用してセキュリティグループを追加するには 、securitygroup-addexisting.config サンプルファイルを使用します。

次に、環境プロパティを使用して環境に接続情報を渡します。Elastic Beanstalk コンソール を使用して DB インスタンスを環境に追加すると、Elastic Beanstalk は [RDS_HOSTNAME] など環境プロパティを使用して、アプリケーションに接続情報を渡します。同じ特性を使用して、統合された DB インスタンスおよび外部 DB インスタンスの両方で同じアプリケーションコードを使用することができます。または、独自のプロパティ名を選択することもできます。

Amazon RDS DB インスタンスの環境プロパティを設定するには

  1. Elastic Beanstalk コンソール を開きます。

  2. お客様の環境の管理ページに移動します。

  3. [Configuration] を選択します。

  4. [ソフトウェア] 設定カテゴリで、[変更] を選択します。

  5. [環境プロパティ] セクションで、アプリケーションが読み取る変数を定義して、接続文字列を構成します。統合された RDS DB インスタンスがある環境との互換性を考慮して、次を使用します。

    • RDS_HOSTNAME – DB インスタンスのホスト名。

      Amazon RDS コンソールラベル – エンドポイント (これはホスト名です)。

    • RDS_PORT – DB インスタンスが接続を許可するポート。デフォルト値は DB エンジンによって異なります。

      Amazon RDS コンソールラベル – ポート

    • RDS_DB_NAME – データベース名、ebdb

      Amazon RDS コンソールラベル – DB 名

    • RDS_USERNAME – お客様のデータベース用に設定したユーザー名。

      Amazon RDS コンソールラベル – ユーザー名

    • RDS_PASSWORD – お客様のデータベース用に設定したパスワード。

    
        RDS プロパティが追加された環境プロパティセクション
  6. [Apply] を選択します。

アプリケーションが環境プロパティを読み込み、接続文字列を作成するようにまだプログラムしていない場合は、次の言語固有のトピックで手順を参照してください。

最後に、環境変数を読み込むアプリケーションによっては、環境のインスタンス上でアプリケーションサーバーを再起動する必要があります。

環境のアプリケーションサーバーを再起動するには

  1. Elastic Beanstalk コンソール を開きます。

  2. お客様の環境の管理ページに移動します。

  3. [アクション] を選択し、[アプリサーバーの再起動] を選択します。

EC2 Classic で外部 Amazon RDS インスタンスを起動して接続する

AWS Elastic Beanstalk で EC2 Classic(VPC がない)を使用すると、セキュリティグループの動作の違いにより、手順が多少変更されます。EC2 Classic では、DB インスタンスは EC2 セキュリティグループを使用できません。そのため、Amazon RDS でのみ動作する DB セキュリティグループを取得します。

EC2 セキュリティグループからの進入を許可するルールを DB セキュリティグループに追加できますが、環境の Auto Scaling グループに DB セキュリティグループをアタッチすることはできません。DB セキュリティグループと環境間に依存性が生じてしまうことを避けるために、Amazon EC2 に 3 番目のセキュリティグループを作成し、DB セキュリティグループにルールを追加して新しいセキュリティグループにアクセスを付与します。次に、Elastic Beanstalk 環境の Auto Scaling グループにそのセキュリティグループを割り当てます。

EC2 Classic(VPC なし)で RDS インスタンスを起動するには

  1. RDS マネジメントコンソールを開きます。

  2. [データベースの作成] を選択します。

  3. ウィザードを続行します。次のオプションに入力した値を書き留めてください。

    • Master Username

    • マスターパスワード

  4. [詳細設定の設定] に達したら、[ネットワーク & セキュリティ] 設定で以下を選択します。

    • VPCNot in VPC。このオプションを使用できない場合、お使いのアカウントが EC2-Classic をサポートしていない可能性があり、VPC でのみ使用可能なインスタンスタイプを選択することもできます。

    • アベイラビリティーゾーンNo Preference

    • DB セキュリティグループCreate new Security Group

  5. 残りのオプションを設定して、[データベースの作成] を選択します。次のオプションに入力した値を書き留めてください。

    • Database Name

    • Database Port

EC2-Classic では、DB インスタンスに VPC セキュリティグループに代わる DB セキュリティグループがあります。Elastic Beanstalk 環境に DB セキュリティグループをアタッチすることはできないため、DB インスタンスへのアクセスと環境へのアタッチを許可する新しいセキュリティグループを作成する必要があります。ここでは、これをブリッジセキュリティグループとして、webapp-bridge という名前を指定します。

ブリッジセキュリティグループを作成するには

  1. Amazon EC2 コンソールを開きます。

  2. ナビゲーションサイドバーで、[Network & Security (ネットワークとセキュリティ)] の下にある [セキュリティグループ] を選択します。

  3. [Create Security Group] を選択します。

  4. [セキュリティグループ名] に「webapp-bridge」と入力します。

  5. [Description (説明)] に Provide access to DB instance from Elastic Beanstalk environment instances. と入力します。

  6. [VPC] はデフォルトの選択のままにします。

  7. [作成] を選択します。

次に、DB インスタンスにアタッチするセキュリティグループを変更して、ブリッジセキュリティグループからのインバウンドトラフィックを許可します。

RDS インスタンスのセキュリティグループの進入ルールを変更する

  1. Amazon RDS コンソールを開きます。

  2. [データベース] を選択します。

  3. 詳細を表示する DB インスタンスの名前を選択します。

  4. [接続] セクションの [セキュリティ] では、DB インスタンスに関連付けられたセキュリティグループが表示されます。リンクを開いて、Amazon EC2 コンソールにセキュリティグループを表示します。

  5. セキュリティグループの詳細で、[接続タイプ] を [EC2 セキュリティグループ] に設定します。

  6. [EC2 セキュリティグループ名] に、作成したブリッジセキュリティグループの名前を設定します。

  7. [Authorize] を選択します。

次に、実行中の環境にブリッジセキュリティグループを追加します。この手順では、アタッチされる追加のセキュリティグループで環境内のすべてのインスタンスを再プロビジョニングする必要があります。

環境にセキュリティグループを追加するには

  • 次のいずれかを行ってください。

    • Elastic Beanstalk コンソール を使用してセキュリティグループを追加するには

      1. Elastic Beanstalk コンソール を開きます。

      2. お客様の環境の管理ページに移動します。

      3. [Configuration] を選択します。

      4. [インスタンス] 設定カテゴリで、[変更] を選択します。

      5. EC2 セキュリティグループ で、Elastic Beanstalk が作成するインスタンスセキュリティグループに加えて、インスタンスにアタッチするセキュリティグループを選択します。

      6. [Apply] を選択します。

      7. 警告を読んでから、確認 を選択します。

    • 設定ファイルを使用してセキュリティグループを追加するには 、securitygroup-addexisting.config サンプルファイルを使用します。

次に、環境プロパティを使用して環境に接続情報を渡します。Elastic Beanstalk コンソール を使用して DB インスタンスを環境に追加すると、Elastic Beanstalk は [RDS_HOSTNAME] など環境プロパティを使用して、アプリケーションに接続情報を渡します。同じ特性を使用して、統合された DB インスタンスおよび外部 DB インスタンスの両方で同じアプリケーションコードを使用することができます。または、独自のプロパティ名を選択することもできます。

環境プロパティを設定するには

  1. Elastic Beanstalk コンソール を開きます。

  2. お客様の環境の管理ページに移動します。

  3. [Configuration] を選択します。

  4. [ソフトウェア] 設定カテゴリで、[変更] を選択します。

  5. [環境プロパティ] セクションで、アプリケーションが読み取る変数を定義して、接続文字列を構成します。統合された RDS インスタンスがある環境との互換性を考慮して、次を使用します。

    • RDS_DB_NAME – Amazon RDS コンソールに表示される [DB Name (DB 名)]。

    • RDS_USERNAME – 環境にデータベースを追加するときに入力する [Master Username]。

    • RDS_PASSWORD – 環境にデータベースを追加するときに入力する [Master PASSWORD]。

    • RDS_HOSTNAME – Amazon RDS コンソールに表示される DB インスタンスの [エンドポイント]。

    • RDS_PORT – Amazon RDS コンソールに表示される [ポート]。

    プラス記号を選択して、プロパティを追加します。

  6. [適用] を選択します。

アプリケーションが環境プロパティを読み込み、接続文字列を作成するようにまだプログラムしていない場合は、次の言語固有のトピックで手順を参照してください。

最後に、環境変数を読み込むアプリケーションによっては、環境のインスタンス上でアプリケーションサーバーを再起動する必要があります。

環境のアプリケーションサーバーを再起動するには

  1. Elastic Beanstalk コンソール を開きます。

  2. お客様の環境の管理ページに移動します。

  3. [アクション] を選択し、[アプリサーバーの再起動] を選択します。

Amazon S3 に接続文字列を保存する

環境プロパティでアプリケーションへの接続情報を提供するのは、コードからのパスワードを維持する優れた方法ですが、完全なソリューションではありません。環境プロパティは環境管理コンソールに表示され、環境の設定を参照する権限を持つ任意のユーザーが確認できます。プラットフォームによっては、環境プロパティはインスタンスログに表示される場合があります。

自分で制御する Amazon S3 バケットに保存することで、接続情報をロックできます。基本的なステップは次のとおりです。

  • 接続文字列を含むファイルを Amazon S3 バケットにアップロードします。

  • EC2 インスタンスプロファイルのアクセス権限を付与して、ファイルを読み込みます。

  • デプロイの間にファイルをダウンロードするようにアプリケーションを設定します。

  • アプリケーションコード内のファイルを読み込みます。

最初に、接続文字列を含むファイルを保存するためのバケットを作成します。この例では、単一のキーと値を持つ JSON ファイルを使用します。値は、次の Amazon RDS の PostgreSQL DB インスタンスの JDBC 接続文字列です。

beanstalk-database.json

{ "connection": "jdbc:postgresql://mydb.b5uacpxznijm.us-west-2.rds.amazonaws.com:5432/ebdb?user=username&password=mypassword" }

URL の強調表示された部分は、データベースのエンドポイント、ポート、DB 名、ユーザー名とパスワードに対応します。

バケットを作成しファイルをアップロードするには

  1. Amazon S3 コンソールを開きます。

  2. [Create Bucket] を選択します。

  3. [バケット名] と入力して、[リージョン] を選択します。

  4. [作成] を選択します。

  5. バケットを開き、[アップロード] を選択します。

  6. プロンプトに従ってファイルをアップロードします。

デフォルトでは、アカウントはファイルを所有しそれを管理する権限を持っていますが、アクセス権限を明示的に付与するまで、IAM ユーザーとロールはそれらを持つことができません。インスタンスプロファイルをポリシーに追加することで、Elastic Beanstalk 環境にインスタンスを付与します。

デフォルトインスタンスプロファイルの名前は aws-elasticbeanstalk-ec2-role です。インスタンスプロファイルの名前が不明な場合は、環境管理コンソールの [設定] ページで確認できます。

インスタンスプロファイルにアクセス権限を追加するには

  1. IAM コンソールを開きます。

  2. [Roles] を選択します。

  3. aws-elasticbeanstalk-ec2-role を選択します。

  4. [Add inline policy] を選択します。

  5. 以下のポリシーを追加して、インスタンスにファイルの取得を許可します。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "database", "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::my-secret-bucket-123456789012/beanstalk-database.json" ] } ] }

    バケットとオブジェクトをバケットとオブジェクトの名前に置き換えます。

次に、デプロイの間に Elastic Beanstalk に Amazon S3 からファイルをダウンロードさせる、以下の設定ファイルをソースコードに追加します。

~/my-app/.ebextensions/database.config

Resources: AWSEBAutoScalingGroup: Metadata: AWS::CloudFormation::Authentication: S3Auth: type: "s3" buckets: ["my-secret-bucket-123456789012"] roleName: "aws-elasticbeanstalk-ec2-role" files: "/tmp/beanstalk-database.json" : mode: "000644" owner: root group: root authentication: "S3Auth" source: https://s3-us-west-2.amazonaws.com/my-secret-bucket-123456789012/beanstalk-database.json

この設定ファイルでは、二つの手順を実行します。Resources キーは、Elastic Beanstalk が Amazon S3 にアクセスするのに使用できる、お使いの環境の Auto Scaling グループのメタデータに対する認証方法を追加します。files キーは、Elastic Beanstalk に対してデプロイの間に Amazon S3 からファイルをダウンロードして、/tmp/ に保存するよう指示します。

ソースコードのルートの .ebextensions フォルダの設定ファイルとともにアプリケーションをデプロイします。アクセス権限を正しく設定した場合、デプロイが成功し、ファイルが環境のインスタンスすべてにダウンロードされます。正しく設定していない場合、デプロイは失敗します。

最後に、JSON ファイルを読み取り、その接続文字列を使用してデータベースに接続するように、アプリケーションにコードを追加します。

外部 Amazon RDS インスタンスのクリーンアップ

外部 Amazon RDS インスタンスを Elastic Beanstalk 環境に接続すると、データベースインスタンスは環境のライフサイクルに束縛されず、環境を終了しても削除されません。データベースインスタンスに保存した個人情報が不必要に保持されないようにするには、不要になったレコードを削除するか、データベースインスタンスを削除します。