こんにちは。ITエンジニアのきゅうです。
第3回目は業務アプリケーションでは必ずと言っていいほど使うデータベースに接続させてみたいと思います。
そもそもAWSには様々なデータベース(以降DB)が用意されており、
特にNonSQLをAWSはプッシュしている様に思いますが、
今回は使い慣れたRDSの中でもMySQLを使用していきたいと思います。
以下、今回作成するアーキテクチャイメージになります。
VPCの作成
使用するサービス:VPC
使用する機能:VPC
1.VPCの作成
RDSはVPCを設定する必要があるので、事前にVPCを作成しておきます。
AWSにログインしたら、まずは検索ボックスより「VPC」と入力し、開かれた『VPC』のダッシュボードより「VPCを作成」ボタンをクリックします。
2.VPCの設定をする
●『作成するリソース』:「VPCなど」を選択することで、サブネットやルートテーブルなどを自動作成してくれます。
●『名前タグの自動生成』:今回は「test2023」にしましたが、任意の名前でOKです。
●『アベイラビリティゾーンの数』:「2」を設定する。「1」とすると、RDS作成時に警告が発生し、RDSを作成できない。
●『プライベートサブネットの数』:ハッカソンであればプライベートサブネットは1で十分だと思います。
●『NATゲートウェイ』:なし。設定すると書きされるようですので・・・
●『VPCエンドポイント』:とりあえずS3ゲートウェイを選択。
上記以外はデフォルトでOKです。『VPC作成』を押下しましょう。
3.VPC作成完了
RDSの作成
使用するサービス:RDS
使用する機能:データベース(MySQL)
1.RDSにて「データベースの作成」をクリック
続いて、検索ボックスより「RDS」と入力し、開かれた『RDS』のダッシュボードより「データベースの作成」ボタンをクリックします。
2.RDSの設定
表示された設定画面に対して、以下の画面キャプチャ―のように設定し、「作成」ボタンを押下する。
※途中、上記で作成したVPCを使うように設定しているが、HeidiSQLが繋がらないようであれば、VPCも新規作成すると繋がる可能性が高い。
3.HeidiSQLをダウンロードする。
「2.」で空のRDS(データベース)を作成したが、値が入っていないと意味がない。
だが、値を入れるためにSQLを作成するのも一苦労。。。
そんな時『HeidiSQL』を使ってみてはどうだろうか?
『SQLServer』のようにGUIでレコードを参照できるだけでなく、INSERTやUPDATE、DELETEなどは画面からエクセルのように入力出来るだけでなく、画面の項目設定など『CREATE TABLE』もGUI上から可能です。
ということで、早速HeidiSQLを使ってみましょう。
以下のサイトより、HeidiSQLをダウンロードする。
4.HeidiSQLをセットアップする。
インストーラをクリックし、インストールウィザードに沿って設定を行いましょう。
一通り設定を終え、ショートカットをクリックすると以下のような画面が表示されます。
5.接続情報を新規作成する。
以下の画面キャプチャーのように入力しましょう。
そして、入力を終えたら、「開く」ボタンをクリックする。
すると・・・
以下のような画面が表示されるので、表示されたら『AWS RDS』のDBに接続成功です。
RDSの権限周りの設定や、Lambdaにライブラリをインポートをしよう
使用するサービス:Lambda
使用する機能:レイヤー
1.レイヤー追加画面を表示する。
今回「pymysql」というライブラリを使用するため、「pymysql」をインポートする必要があるのだが、
AWSには「pymysql」がデフォルトでインストールされていない。
なので、Lambdaの各関数の設定の「コード」画面の一番下で、『レイヤー』を設定する必要がある。
『レイヤーの追加』をクリックする。
2.レイヤーの設定
レイヤーの設定には「AWSレイヤー」「カスタムレイヤー」「ARNを指定」の3種類があり、
『AWSレイヤー』:ローカルやAWSの『Cloud9』を使って、必要なライブラリをZip化する方法。
『カスタムレイヤー』:AWS アカウントまたは組織によって作成され、関数のランタイムと互換性があるレイヤー。(ほとんど使用しないので詳しくは分かりません。)
『ARNを指定』:有志によってインターネットにアップロードされたライブラリをARNを指定することで、呼び出す。
当方としては、まず「ARNを指定」を考えます。
以下のGitHubページから、
deployments/python3.9
と進み、自分のリージョンの「html」リンクをクリックする。
すると、現在色々な人によって作られたレイヤーのARNが展開されているため、
レイヤー追加したいものがあれば、こちらを使うのが得策です。
今回はARN上記のサイトの
arn:aws:lambda:ap-northeast-1:770693421928:layer:Klayers-p311-pymysql:1
を使用する。
以下、設定例です。
NATインスタンスを設定して、外部接続できるようにする。
プライベートサブネットに配置したLambda関数は、インターネット等外部へのアクセスが制限されてしまう。その問題を改善する為、AWSでは『NAT GateWay』という仕組みが用意されている。
ただ、この『NAT GateWay』は高価であり、まあまあの利用料がかかってしまう。
そこで、もう一つの解決策が、EC2に『NATインスタンス』を用意する方法となります。
ここでは、その設定を記載する。
以下、再掲載となりますが作成するアーキテクチャイメージです。
★★(1).ルートテーブルを使って、パブリックサブネットにインターネットゲートウェイを紐づける★★
使用するサービス:VPC
使用する機能:ルートテーブル
1.ルートテーブルよりパブリックサブネットを選択。
2.「ルートを編集」ボタンを押下
3.「ルートを追加」ボタンを押下
4.インターネットゲートウェイを設定
画像の通り、インターネットゲートウェイを設定し、「保存」をクリック。
5.リソースマップでパブリックサブネットにインターネットゲートウェイが紐づいたことを確認。
使用するサービス:VPC
使用する機能:お使いのVPC
★★(2)セキュリティグループを作成する。★★
使用するサービス:VPC
使用する機能:セキュリティーグループ
1.「セキュリティグループ」を開く
VPCの左サイドメニューからセキュリティグループを選択する。
2.「セキュリティグループを作成」を選択。
3.インバウンドルールを設定する
画像の通り、インバウンドルールを設定する。
今回プライベートサブネットを2つ作っているはずなので、それぞれにHTTP/HTTPSを許可する設定を入れる。
※CIDR入力欄にプライベートサブネットのCIDRが出てこない場合は、直打ちするとよいです。
また、NATインスタンスにアクセスするために、自分のIPアドレスにだけSSHを許可します。
4.アウトバウンドルールを設定する
サーバーから外部アクセスするサイトのIPアドレスを登録するが、
「0.0.0.0/0」ですべてを許可してしまう方がハッカソンとしては安全。
5.「セキュリティグループを作成」ボタンを押下。
★★(3)EC2にてNATインスタンスを作成する。★★
使用するサービス:EC2
使用する機能:インスタンス
1.EC2インスタンスを開いて、「インスタンスを起動」を押下。
2.キャプチャーのように設定し「インスタンスを起動」を押下する。
以下の画面キャプチャーのように設定し、「インスタンスを起動」を押下する。
※注意事項等は3.4.で記載します。
3.アプリケーション選択でNATインスタンスを選択します。
「Application and OS Images」という、OSを選ぶ箇所が最初の方にあるので、そこでは
amzn-ami-vpc-nat
と入力し、NATインスタンスを選択します。
4.『ネットワーク設定』欄でVPCとセキュリティグループを選択する。
『ネットワーク設定』欄で『編集』ボタンを押し、「VPC」を上記の『VPCの作成』で作成したVPCを選択する。
ここを見逃すと、セキュリティグループでデフォルトしか選択できずに、「なんでだぁぁぁ~~!!!」となるので注意しよう!!
注意
※※サブネットは『パブリックサブネット』を選択します。
※※パブリックIPの自動割り当ては『無効化』を選択します。
※※セキュリティグループも先ほど設定した「セキュリティグループ」を選択します。
5.『キーペアを作成』という画面が表示されるので「キーペア」を作成します。
6.再度「インスタンスを起動」を押下すると、作成完了。
★★(4)NATインスタンスを固定IPアドレスに紐づける★★
使用するサービス:VPC
使用する機能:Elastic IP
1.『Elastic IP アドレス』を開く
『VPC』を開き、左のメニューより『Elastic IP』を選択します。
その後、表示される「割り当てられたIPv4アドレス」を選択します。
IPアドレスは晒せないので、オブジェクトで隠してますが・・・
2.『Elastic IPアドレスの関連付け』をクリックする。
3.「関連付け」の設定をする。
リソースタイプは「インスタンス」を選択し、
「インスタンス」NATインスタンスを選択します。
プライベートIPアドレスは表示されたものを選択します。
4.「関連付ける」ボタンを押下。
「関連付ける」ボタンを押下すれば完成です。
★★(5)送信元/送信先チェックの無効化★★
使用するサービス:EC2
使用する機能:インスタンス
1.『アクション』を開く
EC2を開き、これまで設定してきたNATインスタンスを選択(チェックを入れる)し、
『アクション』をクリックします。
2.『ソース/宛先チェックを変更』をクリック
「ネットワーキング」⇒「ソース/宛先チェックを変更」の順でクリックします。
3.『送信元/送信先チェック』を「停止」
『送信元/送信先チェック』の「停止」にチェックを入れ、「保存」をクリックする。
(6)プライベートサブネットからのインターネット接続をNATインスタンス経由にする
使用するサービス:VPC
使用する機能:ルートテーブル
1.VPCのリソースマップより、プライベートサブネットの設定画面を開く。
2.サブネット詳細画面より「ルートテーブル」を開く
3.「ルート編集」を開く
対象のルートテーブルにチェックを入れて、「アクション」より「ルート編集」を選択する。
4.ルート編集でNATインスタンスを設定する。
「ルート」を追加し、送信先が「0.0.0.0/0」に対して、「インスタンス」-「(NATインスタンス)」を設定する。
5.もう一方のプライベートサブネットも同様の設定を行う。
★★(6)Lambdaと接続確認★★
使用するサービス:Lambda
使用する機能:関数
今回は、前回のLINEBotのオーム返しをVPCのプライベートサブネットに配置しましたので、
LINEアプリで接続確認をしてみます!!
恥ずかしい限りですが、私のLINE履歴を見ると一度オーム返し出来なくなってから、
再度オーム返し出来るようになったのが分かると思います。
ということで、、、
ここまでで、やっとLmabdaが外部接続できましたので、
一旦今回の備忘録はここまでとしたいと思います。
次回はLambdaのLINEbotを書き換えて、データベースに格納したものをLINEに表示させるbotを作っていきたいと思います!!
ということで、本日はここまでです。
少しでも参考になったと思いましたら、「いいね」や「ストック」を押していただけますと、今後の励みになりますので、是非とも宜しくお願い致します。
最後までお読み頂きありがとうございました。