Elastic Beanstalk環境を作成する前に、RDSインスタンスを作成しました。 2つは問題なく連携していますが、リンクして、RDS_*
環境変数を介してRDSパラメーターにアクセスできるようにしたいと考えています。
Elastic Beanstalk設定ページには次のように書かれています。
最初のリンクはRDSインスタンスをインプレースで作成して現在の環境にリンクしますが、2番目のリンクは このドキュメントページ にリダイレクトしますが、これは残念ながら新しいRDSインスタンスの作成方法を説明するだけですが、既存のものをリンクする方法ではありません。
Elastic Beanstalk環境に既存のRDSインスタンスを関連付けるにはどうすればよいですか?
AWSサポート からの回答:
既存のデータベースをEB環境に関連付けるには、管理コンソールを介してそのデータベースのスナップショットを取得し、データレイヤーの下で「新しいRDSデータベースの作成」を選択する必要があります。 RDSインスタンスがBeanstalk環境の基盤となるCloudformationスタックに結び付けられているため、スナップショットから新しいインスタンスを起動せずに、実行中のRDSインスタンスを既存のEB環境に関連付ける方法はないようです。現在のRDSインスタンスのスナップショットを取得した場合、必要に応じてEBで新たに開始できます。
RDSインスタンスを環境外に存在させたい場合は、EBコンソールを介して接続パラメーターを環境変数として指定するだけです:構成-> Webレイヤー->ソフトウェア構成。次に、 PHP経由で環境変数を読み取る を実行できます。
「選択された」答えは正しいですが、EBとRDSを一緒に使用するほとんどの人が同じ要件を持っているはずなので、まだ知らない場合でも、いくつかの追加情報を追加したいと思いました。
最初の質問:EB環境の外部にRDSインスタンスを存在させたいのはなぜですか? Answer:RDSインスタンスの存続期間がEB環境の存続期間に関連付けられないようにします。つまり、環境を削除するときに、その環境でDBを破棄したくありません。 RDSインスタンスを実際に環境に関連付けたい理由はほとんどありません。
EBとは無関係にRDSを設定する際の問題は、RDS_ *変数が自動的に入力されないため、その値を取得して、Webコンソールまたは.ebextensionsを介して自分で入力する必要があることです。ただし、セキュリティホールになる可能性があるため、コードに資格情報を追加することはお勧めしません。
ただし、次の問題は、プログラムで環境を作成する場合(青緑色のゼロダウンタイムの展開など)、機密性の高いRDS値(パスワードなど)を毎回入力する方法のソリューションが必要です。残念ながら、これにはAWSスタックをさらにドロップしてCloudFormationテンプレートを使用する必要があります。
理想的な解決策はEBの拡張であり、質問で言及されている「既存のデータベースを使用する」リンクを使用すると、実際に手動で既存のRDSデータベースを関連付け、RDS_ *環境変数を自動的に再設定することができます。 。 AWSサポートによると、これは機能リクエストとして提起されたものですが、もちろん時間枠は与えられていません。
私は最近これを行う必要があり、AWS CLI/EB CLIを使用してステップを自動化したいと思っていました。いずれにせよ、ここに私が従った基本的な手順があります(既にRDSインスタンスを作成していると仮定しています)。
aws ec2 create-security-group
(AWS CLI)を使用し、aws rds modify-db-instance
(AWS CLI)を使用してRDSインスタンスに関連付けることができます。eb init
(EB CLI)を使用しました)。aws rds describe-db-instances
を使用しました。RDS_*
環境変数を設定します。これは、eb create
/eb deploy
(EB CLI)を使用して行うことができます。最初に環境を作成すると、RDSデータベースにアクセスするためのセキュリティグループが正しく設定されていないため、環境が低下します。aws elasticbeanstalk describe-configuration-settings
(AWS CLI)を使用できます。aws ec2 authorize-security-group-ingress
(AWS CLI)を使用しました。これはVPCセキュリティグループ(DBセキュリティグループではない)を使用します。地域でサポートされている場合は、DBセキュリティグループでも同じことを実現できます。受信トラフィックルールを設定するときは、データベースエンジンに適切なプロトコルとポートを使用していることを確認してください。aws rds modify-db-instance
(AWS CLI)を使用)。eb deploy
(EB CLI)を使用)。デプロイメントでマイグレーションを実行するため、再デプロイを行う必要がありました。それはほとんどそれです。これで、ホスト名とDBの認証情報を同じに保つ限り、EBインスタンスを気にすることなくRDSインスタンスをスケールアップ/ダウンできるはずです。そのアプローチで青/緑の展開を行うこともできます(ただし、セキュリティグループのアクセスを取り消すために、いくつかの追加手順を実行する必要がある場合があります)。
私は同じ問題に直面していて、次の手順を使用して修正しました:
1)EC2インスタンスに移動し、セキュリティグループの例 "sg-121212121212"をメモします
2)RDSセキュリティグループに移動ad = ndインバウンドトラフィック
3)ルールを編集してすべてのトラフィックを選択し、新しいebsセキュリティグループ「sg-121212121212」を追加します
お役に立てれば幸いです
既存のセキュリティグループを構成によって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