NEWS ABOUT Solution WORKS TEAM BLOG お問い合わせ JP EN

サーバレスでお問い合わせフォームを実装してみる (3)

こんにちは、システムエンジニアの今井です。

前回のブログ「サーバーレスでお問い合わせフォームを実装してみる(2)」の続きです。

(導入編)「サーバーレスとは本当にサーバーがないこと?」
(1)サーバーレスでお問い合わせフォームを実装してみる(フォームとAPIの作成)
(2)サーバーレスでお問い合わせフォームを実装してみる(フォームからAPIへ値の送信)
→(3)サーバレスでお問い合わせフォームに記載された内容をDBに保存してみる1
(4)サーバレスでお問い合わせフォームに記載された内容をDBに保存してみる2

今回はメールの送信に失敗した場合に備えて、問い合わせ内容をデータベースに保存する処理を追加してみます。
eyecatch

1. RDSの作成

まずはデータベースを作成します。

(1)RDSのページを開きます。
https://ap-northeast-1.console.aws.amazon.com/rds/home
def210221_1949

(2)「データベースの作成」をクリックします。
def210221_1949_2

(3)MySQLを選択します。
def210221_1951_2

(4)バージョンは安定している「MySQL 5.7.31」を選択します。
def210221_1952_2

(5)今回は動作テストなので「無料利用枠」を選択します。
def210221_1953_2

(6)設定項目を入力します。

DBインスタンス識別子「database-contact」
マスターユーザー名「admin」
マスターパスワード「xxxxxxxx」
def210221_1955

(7)追加設定に最初のデータベース名「test」を入力します。
def210221_1956_2

(8)「データベースの作成」をクリックします。
def210221_1957_2

データベースが作成できました。
def210221_1958

2. RDSエンドポイントの確認

(1)データベースの一覧から作成したデータベースをクリックします。
def210221_1958_2

(2)「エンドポイント」に記載されている識別子がアクセスの際に必要になる情報です。
def210221_1959_2

3. RDSにテーブルを作成する

EC2は実際の運用では利用しませんが、データベースの設定や初期構築に必要なためEC2インスタンスを作成します。(構築が終わった後はインスタンスを停止しておくことができます)
(1)EC2のページを開きます。
https://ap-northeast-1.console.aws.amazon.com/ec2/v2/home
def210221_1960

(2)「インスタンスを起動」をクリックします。
def210221_1960_2

(3)プルダウンメニューが開くため「インスタンスを起動」をクリックします。
def210221_1961_2

(4)「AmazonLinux」を選択します。
def210221_1962_2

(5)t2.micro(無料利用枠の対象)がデフォルトで選択されているため「確認と作成」をクリックします。
def210221_1964_2

(6)「起動」をクリックします。
def210221_1965_2

(7)EC2インスタンスに接続する際に必要になるキーペアの作成画面が表示されるため、「新しいキーペアの作成」を選択し、キーペア名「ec2-contact-test」と入力します。
def210221_1968_2

(8)キーペアのダウンロードをクリックするとキーがダウンロードされます。非常に重要なファイルなので、取り扱いに注意してください。
def210221_1968_3

(9)最後にインスタンスの作成をクリックします。
def210221_1968_4

(10)インスタンスの作成にはしばらく時間がかかります。
def210221_1969_2

(11)インスタンスの一覧画面でステータスが「初期化しています」から「チェックに合格しました」に変わると初期化が完了しています。
def210221_1970_2

(12)sshクライアントソフトからEC2インスタンスに接続します。

まずは接続先のHost(IPアドレス)を確認してコピーしておきます。
EC2のインスタンスの一覧画面で作成したインスタンスをクリックします。
def210221_1970_3

ページ下部に詳細情報が表示されます。パブリック IPv4アドレスが接続先のHostです。
def210221_1971_2

(13)sshクライアントを起動します。(例としてTeraTermで解説します)
Hostにさきほどコピーした「パブリックIPv4アドレス」を貼り付けて「OK」をクリックします。
def210221_1974

User nameに「ec2-user」と入力します。
Private key fileにはダウンロードしたキーペアの秘密鍵「ec2-contact-test.pem」を指定します。
def210221_1972

EC2インスタンスに接続できました。
def210221_1973

続けてEC2インスタンスからRDSに接続してみます。

(14)mysqlコマンドをインストールします。

$sudo yum install mysql

def210221_1976

(15)RDSに接続します。

$mysql -uadmin -p -h【RDSのエンドポイント】

def210221_1975

(16)テーブルを作成します。

use test;
create table users (
id int(10) unsigned auto_increment,
name varchar(255),
primary key(id)
);

def210221_1983

問い合わせ情報を保存するためのテーブルの作成ができました。

4. SecretManagerでシークレットを作成

SecretManagerはパスワードや認証情報を一元管理できるサービスです。
機密情報はSecretManager内に保存され、必要に応じてAPIを通じてアクセスすることができるようになります。
今回はRDSのユーザー名とパスワードを管理してみます。

(1)SecretManagerのページを開きます。
https://ap-northeast-1.console.aws.amazon.com/secretsmanager/home
def210222_2001

(2)「新しいシークレットを保存する」をクリックします。
def210222_2001_2

(3)「RDSデータベースの認証情報」を選択し、ユーザー名「admin」、パスワード「xxxxxxxx」を入力します。
def210222_2002

(4)「このシークレットがアクセスするRDSデータベース」は、「database-contact」を選択し、「次」をクリックします。
def210222_2003_2

(5)シークレットの名前は「secret-contact-test」と入力し、「次」をクリックします。
def210222_2004

(6)自動ローテーションは今回は設定せずに「次」をクリックします。
def210222_2005

(7)「保存」をクリックします。
def210222_2006_2

シークレットが作成できました。
def210222_2007

5. RDS Proxyの作成

RDS Proxyはデータベースへの接続を保持(コネクションプーリング)することができるサービスです。
Lambdaからデータベースに接続する際に必要になる接続や再接続の処理を肩代わりしてくれるため、プログラム上の処理を簡略化することができます。

(1)RDSのページを開きます。
https://ap-northeast-1.console.aws.amazon.com/rds/home
def210222_2008

(2)「Proxies」をクリックします。
def210222_2008_2

(3)「プロキシを作成」をクリックします。
def210222_2009_2

(4)プロキシ識別子に「proxy-contact-test」と入力します。
def210222_2010_2

(5)スクロールして、データベースは「database-contact」データベースを選択します。
def210222_2011_2

(6)Secrets Manager シークレットはさきほど作成した「secret-contact-test」を選択します。
def210222_2012

(7)「プロキシを作成」をクリックします。
def210222_2013_2

RDS Proxyが作成できました。
def210222_2014

6. EC2からProxy経由で接続できるか確認

(1)プロキシの一覧ページを開きます。
https://ap-northeast-1.console.aws.amazon.com/rds/home
def210222_2015

(2)さきほど作成した「proxy-contact-test」をクリックします。
def210222_2015_2

(3)RDS Proxyに接続するには「プロキシエンドポイント」を利用します。(プロキシエンドポイントの文字列をコピーしておきます)
def210222_2016_2

Lambdaから接続する前に、いったんEC2から接続のテストをしてみます。

(4)sshクライアントからEC2に接続します。
def210226_2018

(5)RDS Proxyに接続します。

$mysql -uadmin -p -h【RDS Proxyのエンドポイント】

def210226_2019

EC2からRDS Proxyに接続できました。

今回はここまでで一区切りとして、次回はLambdaからDBに接続してみたいと思います。