LambdaをVPCと繋ぎ、プライベートサブネットにあるRDS Proxyを経由してRDSに接続するサンプル。
フロントはVue3、バックエンドはSAM(Python)で構成する。 DBはAurora MySQLを使用する。
- Dockerのネットワークの作成
docker network create vpc-lambda-network
- DB環境の構築と起動
docker-compose up
- S3バケットの作成
- ローカル用にS3バケットを作成する
- バックエンドの起動
cd api
sam build --cached
sam local start-api --docker-network vpc-lambda-network --parameter-overrides Timeout=10 DBHost=db DBUser=admin DBPassword=admin BackendBucketName=<ローカル用バケット名>
- ファイルを編集した場合は
sam build
を実行する必要がある - IDEなどのファイル監視で、
sam build
が実行されるようにすると少し楽になる - JetBrains製品の場合は、File Watcherで
build.sh
を実行するようにすると自動でビルドが走るようにできる
- ファイルを編集した場合は
- フロントの起動
cd front
npm run dev
- Terraform実行
infra/terra/main.tfvars
を作成し、infra/terra/variables.tf
の変数を設定するcd infra/terra
terraform init
terraform plan --var-file main.tfvars
terraform apply --var-file main.tfvars
- 踏み台に入ってDB登録
- AWSコンソールからEC2にいき、踏み台EC2のセッションマネージャーで接続する
sudo su - ec2-user
でec2-user
に切り替える(切り替えなくてもできるが切り替えた方がやりやすい)- ※Session Manager プラグインを利用してローカルPCからのログインも可能
- mysqlコマンドでDBに接続し、
server/mysql/initdb.d/init.sql
のSQLを実行する- DBのエンドポイントはTerraformの出力結果のRDS Proxyに記載されている
- DBのユーザ名とパスワードはTerraformの変数で指定したものを使う
- mysql -u <ユーザ名> -p -h <DBのエンドポイント>
- AWSコンソールからEC2にいき、踏み台EC2のセッションマネージャーで接続する
- SAMでAPIのビルド&デプロイ
cd api
sam build
sam deploy --guided --no-confirm-changeset
Stack Name
は任意の名前をつけるAWS Region
はTerraformで作成したリージョンと同じにするLambdaSubnet1
はTerraformの出力結果のprivate_subnet_app_1_id
に出力された値を設定するLambdaSubnet2
はTerraformの出力結果のprivate_subnet_app_2_id
に出力された値を設定するLambdaRole
はTerraformの出力結果のvpc_lambda_role_arn
に出力された値を設定するLambdaSecurityGroup
はTerraformの出力結果のvpc_lambda_security_group_id
に出力された値を設定するBackendBucketName
はTerraformの出力結果のbackend_bucket_name
に出力された値を設定するDBHost
はTerraformの出力結果のrds_proxy_host
に出力された値を設定するDBUser
はTerraformの変数で指定した値を設定するDBPassword
はTerraformの変数で指定した値を設定する- 他の入力はデフォルトとする
- フロントのビルド&デプロイ
front/.env.production
を作成し、VUE_APP_API_URL
にAPIのエンドポイントを設定する- APIのエンドポイントはSAMのデプロイの出力結果の
ProductionApi
に出力された値を設定する
- APIのエンドポイントはSAMのデプロイの出力結果の
cd front
npm run build
aws s3 sync ./dist <バケットURI> --delete
- バケットURIはTerraformの出力結果の
frontend_bucket_uri
に出力された値を設定する
- バケットURIはTerraformの出力結果の
- フロントのURLにアクセスし、メッセージを登録する
- フロントのURLはTerraformの出力結果の
cloud_front_url
に出力された値を使用し、HTTPSでアクセスする
- フロントのURLはTerraformの出力結果の
- 登録したメッセージがテキストボックスの下に表示されることを確認する
- 踏み台に入ってDBに接続し、
messages
テーブルに登録されていることを確認する - ブラウザをリロードし、テキストボックスの下に登録したメッセージが表示されることを確認する
- SAMのスタック削除
cd api
sam delete
- 確認の入力が求められるのですべて
y
を入力する
- 確認の入力が求められるのですべて
- S3のバケットの中身を削除
aws s3 rm <バケットURI> --recursive
- バケットURIはTerraformの出力結果の
frontend_bucket_s3_uri
に出力された値を設定する - バケットURIはTerraformの出力結果の
backend_bucket_uri
に出力された値を設定する
- バケットURIはTerraformの出力結果の
- Terraformのリソース削除
cd infra/terra
terraform destroy --var-file main.tfvars
- Cloud Watch Logsのロググループを作成する
- シークレットマネージャーからのDB情報の取得(ローカル時は環境変数から取得する)
- テストコード
- CI/CD
- ログ出力
- ログの集約
- ログの可視化
- モニタリング