サーバレスでお問い合わせフォームを実装してみる (3)
こんにちは、システムエンジニアの今井です。
前回のブログ「サーバーレスでお問い合わせフォームを実装してみる(2)」の続きです。
(導入編)「サーバーレスとは本当にサーバーがないこと?」
(1)サーバーレスでお問い合わせフォームを実装してみる(フォームとAPIの作成)
(2)サーバーレスでお問い合わせフォームを実装してみる(フォームからAPIへ値の送信)
→(3)サーバレスでお問い合わせフォームに記載された内容をDBに保存してみる1
(4)サーバレスでお問い合わせフォームに記載された内容をDBに保存してみる2
今回はメールの送信に失敗した場合に備えて、問い合わせ内容をデータベースに保存する処理を追加してみます。
1. RDSの作成
まずはデータベースを作成します。
(1)RDSのページを開きます。
https://ap-northeast-1.console.aws.amazon.com/rds/home
(4)バージョンは安定している「MySQL 5.7.31」を選択します。
(6)設定項目を入力します。
DBインスタンス識別子「database-contact」
マスターユーザー名「admin」
マスターパスワード「xxxxxxxx」
(7)追加設定に最初のデータベース名「test」を入力します。
2. RDSエンドポイントの確認
(1)データベースの一覧から作成したデータベースをクリックします。
(2)「エンドポイント」に記載されている識別子がアクセスの際に必要になる情報です。
3. RDSにテーブルを作成する
EC2は実際の運用では利用しませんが、データベースの設定や初期構築に必要なためEC2インスタンスを作成します。(構築が終わった後はインスタンスを停止しておくことができます)
(1)EC2のページを開きます。
https://ap-northeast-1.console.aws.amazon.com/ec2/v2/home
(3)プルダウンメニューが開くため「インスタンスを起動」をクリックします。
(5)t2.micro(無料利用枠の対象)がデフォルトで選択されているため「確認と作成」をクリックします。
(7)EC2インスタンスに接続する際に必要になるキーペアの作成画面が表示されるため、「新しいキーペアの作成」を選択し、キーペア名「ec2-contact-test」と入力します。
(8)キーペアのダウンロードをクリックするとキーがダウンロードされます。非常に重要なファイルなので、取り扱いに注意してください。
(11)インスタンスの一覧画面でステータスが「初期化しています」から「チェックに合格しました」に変わると初期化が完了しています。
(12)sshクライアントソフトからEC2インスタンスに接続します。
まずは接続先のHost(IPアドレス)を確認してコピーしておきます。
EC2のインスタンスの一覧画面で作成したインスタンスをクリックします。
ページ下部に詳細情報が表示されます。パブリック IPv4アドレスが接続先のHostです。
(13)sshクライアントを起動します。(例としてTeraTermで解説します)
Hostにさきほどコピーした「パブリックIPv4アドレス」を貼り付けて「OK」をクリックします。
User nameに「ec2-user」と入力します。
Private key fileにはダウンロードしたキーペアの秘密鍵「ec2-contact-test.pem」を指定します。
続けてEC2インスタンスからRDSに接続してみます。
(14)mysqlコマンドをインストールします。
$sudo yum install mysql
(15)RDSに接続します。
$mysql -uadmin -p -h【RDSのエンドポイント】
(16)テーブルを作成します。
use test; create table users ( id int(10) unsigned auto_increment, name varchar(255), primary key(id) );
問い合わせ情報を保存するためのテーブルの作成ができました。
4. SecretManagerでシークレットを作成
SecretManagerはパスワードや認証情報を一元管理できるサービスです。
機密情報はSecretManager内に保存され、必要に応じてAPIを通じてアクセスすることができるようになります。
今回はRDSのユーザー名とパスワードを管理してみます。
(1)SecretManagerのページを開きます。
https://ap-northeast-1.console.aws.amazon.com/secretsmanager/home
(3)「RDSデータベースの認証情報」を選択し、ユーザー名「admin」、パスワード「xxxxxxxx」を入力します。
(4)「このシークレットがアクセスするRDSデータベース」は、「database-contact」を選択し、「次」をクリックします。
(5)シークレットの名前は「secret-contact-test」と入力し、「次」をクリックします。
(6)自動ローテーションは今回は設定せずに「次」をクリックします。
5. RDS Proxyの作成
RDS Proxyはデータベースへの接続を保持(コネクションプーリング)することができるサービスです。
Lambdaからデータベースに接続する際に必要になる接続や再接続の処理を肩代わりしてくれるため、プログラム上の処理を簡略化することができます。
(1)RDSのページを開きます。
https://ap-northeast-1.console.aws.amazon.com/rds/home
(4)プロキシ識別子に「proxy-contact-test」と入力します。
(5)スクロールして、データベースは「database-contact」データベースを選択します。
(6)Secrets Manager シークレットはさきほど作成した「secret-contact-test」を選択します。
6. EC2からProxy経由で接続できるか確認
(1)プロキシの一覧ページを開きます。
https://ap-northeast-1.console.aws.amazon.com/rds/home
(2)さきほど作成した「proxy-contact-test」をクリックします。
(3)RDS Proxyに接続するには「プロキシエンドポイント」を利用します。(プロキシエンドポイントの文字列をコピーしておきます)
Lambdaから接続する前に、いったんEC2から接続のテストをしてみます。
(5)RDS Proxyに接続します。
$mysql -uadmin -p -h【RDS Proxyのエンドポイント】
EC2からRDS Proxyに接続できました。
今回はここまでで一区切りとして、次回はLambdaからDBに接続してみたいと思います。