メインコンテンツまでスキップ

デプロイしたサンプルアプリの動作確認方

AWS CloudFormation でデプロイした参考実装アプリケーションの動作確認をする方法を説明します。

AWS上にデプロイしたDBの初期セットアップ

デプロイ済みの VPC には SSM エージェントがインストール済みの踏み台サーバとVPCエンドポイントがデプロイされています。これらの仕組みを利用し、プライベートサブネット内にあるDBとお手元のローカルの PC をポートフォワーディングすることで、ローカルPCから直接AWS上の DB に接続して初期セットアップを行うことが可能です。

以下のコマンドでポートフォワーディングのためのセッションを作成します。

[ローカルPC ~]aws ssm start-session \
--target i-0287714efd175070c \ # Bastion Instance ID
--document-name AWS-StartPortForwardingSessionToRemoteHost \
--region us-east-1 \
--profile <your AWS profile> \ # ssmが実行可能なポリシーがアタッチされたプロファイルが必要
--parameters '{"host":["db-postgresql-exljay17xqym.cluster-caextc42ljwl.us-east-1.rds.amazonaws.com"],"portNumber":["5432"],"localPortNumber":["5432"]}' # 先ほどデプロイしたDBスタックのライターインスタンスのエンドポイント

ローカル PC からの DB 操作用にpgAdmin をダウンロードしてローカルPCにインストールします。 以下手順でpgAdminを作ってアプリが参照するデータベースとテーブルを作成します。

1. サーバーの登録

2. サーバー名の入力

3. ホストの設定

ポートフォワーディングしているのでHostには 127.0.0.1 もしくは localhost を入力。AWS CloudFormation のデプロイ時に入力した Username と Password を入力します。Maintenance database は既に入力されている postgres のままで良いです。

4. Databaseの作成

5. Database名の入力

Database名は好きなものを入れてもらって構いません。例ではmydbと入力してSaveをクリックするとDatabaseが出来上がります。

6. テーブルの作成

作成したmydbを選択してQuery Toolを開きます。そこからサンプルアプリで作るテーブルをつくります。

7. テストデータの作成

QueryからCreate Tableとinsertを実行してダミーのデータを作ってください。

CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
country VARCHAR(100),
age INTEGER
);

INSERT INTO users (name, country, age) VALUES
('Alice', 'Japan', 30),
('Bob', 'USA', 25),
('Charlie', 'Germany', 35);

SELECT * FROM users;

以上で、ローカルからDBに接続して、アプリケーションから使用するDatabase, Tableの作成が完了です。

DynamoDBへのセットアップ

テストデータの投入

本カタログではAmazon DynamoDBのテーブルもセットアップしています。データベースをデプロイしたCloudFormationのOutPutsセクションからDynamoDBのテーブルが確認できます。

このテーブルに対して以下のAWSCLIで同じテストデータを投入します。

[ec2-user ~]aws dynamodb put-item \
--region us-east-1 \
--table-name myapp-dev-Users \
--item '{
"id": {"N": "1"},
"name": {"S": "Alice"},
"country": {"S": "Japan"},
"age": {"N": "30"}
}'

[ec2-user ~]aws dynamodb put-item \
--region us-east-1 \
--table-name myapp-dev-Users \
--item '{
"id": {"N": "2"},
"name": {"S": "Bob"},
"country": {"S": "USA"},
"age": {"N": "25"}
}'

[ec2-user ~]aws dynamodb put-item \
--region us-east-1 \
--table-name myapp-dev-Users \
--item '{
"id": {"N": "3"},
"name": {"S": "Charlie"},
"country": {"S": "Germany"},
"age": {"N": "35"}
}'

マネジメントコンソールから確認すると以下のようにデータが入っていることが確認できます。

API Gateway + Lambdaアプリケーションの動作確認

CloudFormationのOutputタブでAPIエンドポイントを確認しましょう。

GETメソッドでhttps://<your API ID>.execute-api.us-east-1.amazonaws.com/dev/v1/users/1 のようにユーザデータを取得するエンドポイントにPostmanなどでリクエストを実行しましょう。すると以下のようにデータベースに登録されたid=1のユーザーのデータが取得できることが分かります。(なお、実際のアプリでユーザIDにautoincrementされたIDを使うのはセキュリティ上避けましょう。攻撃者にIDが推測されやすくなるためです。アプリ側でuuidなどを生成するようにすることをお勧めします。)

次にユーザのデータをAPIから登録してみましょう。POSTメソッドでhttps://<your API ID>.execute-api.us-east-1.amazonaws.com/dev/v1/users に以下のようなBodyパラメータを指定してリクエストを送って下さい。

{
"name": "horike",
"country": "Japan",
"age": "41"
}

pgAdminからSELECT文で確認すると正しくデータが出来ていることが分かります。

S3 + Lambdaアプリケーションの動作確認

CloudFormationのOutPutでCSVをアップロードするバケットを確認しましょう。

以下コマンドでテスト用のCSVをアップロードして、pgAdminで確認するとCSVのデータが正しくデータベースに格納されていることが確認できます。

[ec2-user ~]aws s3 cp ./src/sample_users.csv s3://myapp-dev-<アカウントID>-upload-csv