TL;DR
- RDSを構築して、RDS情報をenvs/配下の値を適切に埋める
- envファイルに設定したい文字列に#がある時はダブルクオーテーションで括る
RDS構築
一連の流れを説明とともに記述します。詳しいことは載っていないので注意です。
また、今回はRDSをパブリックサブネットに配置します。
(外部から繋ぎたいため)
本来はVPC内のプライベートサブネットに置き、
EC2などからしか接続させないようにするのがオーソドックスかと思います。
- VPC作成
- VPC > インターネットゲートウェイからインターネットゲートウェイを作成し、VPCにアタッチ
- VPC > ルートテーブルから、VPCのルートテーブルにサブネットの関連づけをする
- VPC > サブネットからパブリックサブネットを2つ作る (※1)
- EC2 > セキュリティグループからRDS用のセキュリティグループ作成。
今回はパブリックサブネットに置くので、外部(XServer)のIPをインバウンドとして設定 - RDS > サブネットグループを先に作成
- 先ほどつくった2つのサブネットを選択
- RDS > パラメータグループを先に作成
- デフォルトであるものを適用させないくらいの文脈で作成
- RDS > オプショングループを先に作成
- デフォルトであるものを適用させないくらいの文脈で作成
- RDSからデータベースの作成 (かいつまんで状況↓)
- DBインスタンスサイズ
- テスト環境なのでバースト可能クラスのt2.micro選択
- ストレージ
- ストレージタイプ:汎用
- ストレージの自動スケーリングは無効に(テスト環境なので)
- 可用性と耐久性
- スタンバイインスタンスを作成しないでください
- テスト環境なので。2つ作ったサブネットの1つだけ使う感じ
- スタンバイインスタンスを作成しないでください
- 接続
- 先ほどつくったVPC
- サブネットグループ
- 先ほど作ったもの
- パブリックアクセス可能
- あり。
- 今回、外部から接続させるため。プライベートサブネット上であれば「なし」
- セキュリティグループ
- 先ほど作ったもの
- アベイラビリティゾーン
- 2つのサブネットのどちらか好きな方
- データベース認証
- パスワード認証
- 追加設定
- DBパラメータグループ
- 先ほど作ったもの
- オプショングループ
- 先ほど作ったもの
- 自動バックアップの有効化。30日くらい
- モニタリングは無効化
- 削除保護の有効化
- DBパラメータグループ
- データベースの作成! (※2)
- DBインスタンスサイズ
※1. RDSのサブネットを複数持たせる件について
RDSはマルチAZ、冗長化が簡単にできるように、デフォルトで複数のサブネットを用意したグループを作らせる
※2. Cannot create a publicly accessible DBInstance. The specified VPC does not support DNS resolution
↓ありがとうございます🙏🙏🙏
Lalavelへの記述
envs/配下に適切に情報を記述する。
- DB_HOST
- 接続とセキュリティ > エンドポイントを記述
- XXXX.YYYYYYY.ZZZZZZ.rds.amazonaws.com なやつ
- DB_DATABASE
- データベース名
- Sequel ProからRDSに接続してデータベース作成してそれを書いた
- DB_USERNAME
- とりえあずさっき作成したユーザを記述
- DB_PASSWORD
- さっき作成したユーザのパスワードを記述
↑の設定後、以下を実行
php artisan config:clear
php artisan cache:clear
設定したenvがうまく反映されない
SQLSTATE[HY000] [1045] Access denied for user 'XXX'@'YYYYY' (using password: YES) (SQL: delete from `cache`)
がでまくった。usernameは合ってそうだが、host名(DB_HOSTに設定したRDSのエンドポイント)が正しくなさそうな感じになる。
結論としては passwordにシャープが入っていた ため。
コメント化されてしまい、うまくenvファイルがパースできなかったみたい。
(host名が間違っているのかと思ってかなりの時間を割いて調べてしまった😭)
envのパスワード部分を以下のようにダブルクオーテーションで括ることで解決。
DB_PASSWORD="XXXXXX"
できた🥳🥳🥳