web-dev-qa-db-ja.com

既存のRDSインスタンスをElastic Beanstalk環境に関連付ける方法は?

Elastic Beanstalk環境を作成する前に、RDSインスタンスを作成しました。 2つは問題なく連携していますが、リンクして、RDS_*環境変数を介してRDSパラメーターにアクセスできるようにしたいと考えています。

Elastic Beanstalk設定ページには次のように書かれています。

You do not have a database. You can create a new RDS database or use an existing database.

最初のリンクはRDSインスタンスをインプレースで作成して現在の環境にリンクしますが、2番目のリンクは このドキュメントページ にリダイレクトしますが、これは残念ながら新しいRDSインスタンスの作成方法を説明するだけですが、既存のものをリンクする方法ではありません。

Elastic Beanstalk環境に既存のRDSインスタンスを関連付けるにはどうすればよいですか?

22
Benjamin

AWSサポート からの回答:

既存のデータベースをEB環境に関連付けるには、管理コンソールを介してそのデータベースのスナップショットを取得し、データレイヤーの下で「新しいRDSデータベースの作成」を選択する必要があります。 RDSインスタンスがBeanstalk環境の基盤となるCloudformationスタックに結び付けられているため、スナップショットから新しいインスタンスを起動せずに、実行中のRDSインスタンスを既存のEB環境に関連付ける方法はないようです。現在のRDSインスタンスのスナップショットを取得した場合、必要に応じてEBで新たに開始できます。

RDSインスタンスを環境外に存在させたい場合は、EBコンソールを介して接続パラメーターを環境変数として指定するだけです:構成-> Webレイヤー->ソフトウェア構成。次に、 PHP経由で環境変数を読み取る を実行できます。

18
Benjamin

「選択された」答えは正しいですが、EBとRDSを一緒に使用するほとんどの人が同じ要件を持っているはずなので、まだ知らない場合でも、いくつかの追加情報を追加したいと思いました。

最初の質問:EB環境の外部にRDSインスタンスを存在させたいのはなぜですか? Answer:RDSインスタンスの存続期間がEB環境の存続期間に関連付けられないようにします。つまり、環境を削除するときに、その環境でDBを破棄したくありません。 RDSインスタンスを実際に環境に関連付けたい理由はほとんどありません。

EBとは無関係にRDSを設定する際の問題は、RDS_ *変数が自動的に入力されないため、その値を取得して、Webコンソールまたは.ebextensionsを介して自分で入力する必要があることです。ただし、セキュリティホールになる可能性があるため、コードに資格情報を追加することはお勧めしません。

ただし、次の問題は、プログラムで環境を作成する場合(青緑色のゼロダウンタイムの展開など)、機密性の高いRDS値(パスワードなど)を毎回入力する方法のソリューションが必要です。残念ながら、これにはAWSスタックをさらにドロップしてCloudFormationテンプレートを使用する必要があります。

理想的な解決策はEBの拡張であり、質問で言及されている「既存のデータベースを使用する」リンクを使用すると、実際に手動で既存のRDSデータベースを関連付け、RDS_ *環境変数を自動的に再設定することができます。 。 AWSサポートによると、これは機能リクエストとして提起されたものですが、もちろん時間枠は与えられていません。

25
rgareth

私は最近これを行う必要があり、AWS CLI/EB CLIを使用してステップを自動化したいと思っていました。いずれにせよ、ここに私が従った基本的な手順があります(既にRDSインスタンスを作成していると仮定しています)。

  1. RDSインスタンスに(VPCデフォルトグループではなく)別のセキュリティグループが設定されていることを確認してください。そのためにaws ec2 create-security-group(AWS CLI)を使用し、aws rds modify-db-instance(AWS CLI)を使用してRDSインスタンスに関連付けることができます。
  2. Beanstalkアプリケーションを初期化します(そのためにeb init(EB CLI)を使用しました)。
  3. RDSデータベースから関連する構成データ(DB名、ホスト名、ポートなど)を読み取ります。そのためにaws rds describe-db-instancesを使用しました。
  4. そのデータを使用して、環境を作成する(または後で環境をデプロイする)ときに、EBインスタンスにRDS_*環境変数を設定します。これは、eb create/eb deploy(EB CLI)を使用して行うことができます。最初に環境を作成すると、RDSデータベースにアクセスするためのセキュリティグループが正しく設定されていないため、環境が低下します。
  5. EB構成から関連するセキュリティグループを取得します。自動スケーリンググループとElastic Load Balancerに1つ必要です。 aws elasticbeanstalk describe-configuration-settings(AWS CLI)を使用できます。
  6. ステップ1で設定したセキュリティグループのデータベースへのインバウンドトラフィックに対して自動スケーリンググループを承認します。そのためにaws ec2 authorize-security-group-ingress(AWS CLI)を使用しました。これはVPCセキュリティグループ(DBセキュリティグループではない)を使用します。地域でサポートされている場合は、DBセキュリティグループでも同じことを実現できます。受信トラフィックルールを設定するときは、データベースエンジンに適切なプロトコルとポートを使用していることを確認してください。
  7. Elastic Load BalancerグループをRDSインスタンスのセキュリティグループに追加します(ここでもaws rds modify-db-instance(AWS CLI)を使用)。
  8. Elastic Beanstalkアプリケーションを再起動または再デプロイします(例:eb deploy(EB CLI)を使用)。デプロイメントでマイグレーションを実行するため、再デプロイを行う必要がありました。

それはほとんどそれです。これで、ホスト名とDBの認証情報を同じに保つ限り、EBインスタンスを気にすることなくRDSインスタンスをスケールアップ/ダウンできるはずです。そのアプローチで青/緑の展開を行うこともできます(ただし、セキュリティグループのアクセスを取り消すために、いくつかの追加手順を実行する必要がある場合があります)。

2
Torsten

私は同じ問題に直面していて、次の手順を使用して修正しました:

1)EC2インスタンスに移動し、セキュリティグループの例 "sg-121212121212"をメモします

2)RDSセキュリティグループに移動ad = ndインバウンドトラフィック

3)ルールを編集してすべてのトラフィックを選択し、新しいebsセキュリティグループ「sg-121212121212」を追加します

お役に立てれば幸いです

0
vaquar khan

既存のセキュリティグループを構成によってEB EC2インスタンスに追加する最も簡単な方法は、 https://github.com/awsdocs/elastic-beanstalk-samples/blob/master/configuration-files/に記載されているシンプルなファイルを使用することです。 aws-provided/security-configuration/securitygroup-addexisting.config

例えば:

$ cat .ebextensions/securitygroup-addexisting.config
option_settings:
  - namespace: aws:autoscaling:launchconfiguration
    option_name: SecurityGroups
    value: rds-launch-wizard-1
0
pba