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

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

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

注記

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

環境からデータベースインスタンスを分離するには、Amazon Relational Database Service でデータベースインスタンスを実行し、アプリケーションの起動時にそれに接続するように設定します。これにより、複数の環境をデータベースに接続し、データベースに影響を与えないで環境を終了して、青/緑のデプロイメントでシームレスな更新を実行できるようになります。

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

注記

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

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

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

デフォルトの VPC で外部 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 で設定する方法の詳細については、「Amazon Virtual Private Cloud で Elastic Beanstalk を使用する」を参照してください。

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

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

  2. ナビゲーションペインで、[Instances] を選択します。

  3. [Launch DB Instance] を選択します。

  4. [DB エンジン] を選択し、設定をプリセットします。

  5. [Specify DB Details] で [DB Instance Class] を選択します。高可用性を実現するために、[Multi-AZ Deployment] を [Yes] に設定します。

  6. [Settings] で、[DB Instance Identifier]、[Master Username] および [Master Password] (と [Confirm Password]) を入力します。入力した値を後で使用できるように書き留めておいてください。

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

  8. [Network and Security] 設定では、以下を選択します。

    • VPCDefault VPC

    • Subnet Groupdefault

    • Publicly AccessibleNo

    • Availability Zone No Preference

    • VPC Security GroupsDefault VPC Security Group

  9. [Database Name] に、ebdb を入力し、残りのオプションのデフォルトの設定を確認します。 次のオプションの値に注意してください。

    • Database Name

    • Database Port

  10. [Launch DB Instance] を選択します。

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

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

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

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

  3. DB インスタンスのエントリの横にある矢印を選択して、ビューを展開します。

  4. [Details] タブを選択します。

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

    注記

    [Details] タブを開いている間に、このページに表示されている [Endpoint] およびセキュリティグループ名を後で使用するために書き留めます。

    セキュリティグループ名は、[Security Groups] に表示されるリンクの最初の値 (かっこの前) です。2 番目の値 (かっこの中) は、セキュリティグループ ID です。

  6. セキュリティグループの詳細で、[Inbound] タブを選択します。

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

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

  9. [Type] で、アプリケーションが使用する DB エンジンを選択します。

  10. [Source] で、[Custom ] を選択し、続いてセキュリティグループのグループ ID を入力します。これにより、セキュリティグループのリソースが、同じグループ内の他のリソースからのトラフィックをデータベースポートで受信することを可能にします。

  11. [Save] を選択します。

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

注記

カスタム VPC では、グループ名ではなくセキュリティグループの ID を使用します。

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

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

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

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

  4. [Instances] セクションで、設定アイコン (  を編集します。 ) を選択します。

  5. [EC2 security groups] で、自動生成されるセキュリティグループ名の後にコンマを入力し、続いて RDS DB インスタンスのセキュリティグループの名前を入力します。これは、先にセキュリティグループを設定したときに書き留めた名前です。

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

  7. 警告を読み取って、[Save] を選択します。

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

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

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

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

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

  4. [Software Configuration] セクションで、設定アイコン (  を編集します。 ) を選択します。

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

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

      Amazon RDS コンソールラベル – [Endpoint] はホスト名です。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  3. [Actions] を選択し、[Restart App Server(s)] を選択します。

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

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. [Launch a DB Instance] を選択します。

  3. [Advanced Settings] に達するまで、ウィザードを進みます。次のオプションに入力した値を書き留めてください。

    • Master Username

    • Master Password

  4. [Network and Security] 設定では、以下を選択します。

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

    • Availability ZoneNo Preference

    • DB Security Group(s)Create new Security Group

  5. 残りのオプションを設定して、[Launch DB Instance] を選択します。次のオプションに入力した値を書き留めてください。

    • Database Name

    • Database Port

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

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

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

  2. ナビゲーションサイドバーで、[Network & Security] の下にある [Security Groups] を選択します。

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

  4. [Security group name] に「webapp-bridge」と入力します。

  5. [Description] には、「Provide access to DB instance from Elastic Beanstalk environment instances」と入力します。

  6. [VPC] で [No VPC] を選択します。

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

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

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

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

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

  3. DB インスタンスのエントリの横にある矢印を選択して、ビューを展開します。

  4. [Details] タブを選択します。

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

  6. セキュリティグループの詳細で、[Connection Type] を [EC2 Security Group] に設定します。

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

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

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

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

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

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

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

  4. [Instances] を選択します。

  5. [EC2 security groups] で、自動生成されるセキュリティグループ名の後にコンマを入力し、続いて作成したブリッジセキュリティグループ名を入力します。

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

  7. 警告を読み取って、[Save] を選択します。

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

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

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

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

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

  4. [Software Configuration] セクションで、設定アイコン (  を編集します。 ) を選択します。

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

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

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

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

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

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

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

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

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

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

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

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

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

  3. [Actions] を選択し、[Restart App Server(s)] を選択します。

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. [Bucket Name] と入力して、[Region] を選択します。

  4. [Create] を選択します。

  5. バケットを開き、[Upload] を選択します。

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

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

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

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

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

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

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

  4. [Inline Policies] で [Create Role Policy] を選択します。[Custom 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 ファイルを読み取り、その接続文字列を使用してデータベースに接続するように、アプリケーションにコードを追加します。詳細については、以下の各言語固有のトピックを参照してください。