ChatGPTを使って App Runner + DynamoDB で構成されたTODOアプリを作成する

この記事では、ChatGPT × AWSサービス で実現するWebアプリケーション(TODOアプリ)構築について、筆者の経験を踏まえたtipsを交えて紹介します。

# はじめに
AWSには数々の便利なサービスが存在します。
今回主に取り上げる App Runner はその一つです。

***「AWSのベストプラクティスが詰まったマネージドなインフラ上で、Webアプリケーションをすぐさま動かすことができる」***
と言われると、App Runner を触ってみたいと思う人がいるかもしれません。

私も App Runner が気になって、まずは[ハンズオン](https://www.apprunnerworkshop.com/prerequisites/ "AWS App Runner Workshop")を試すことにしました。

すると、

1. 動かしたいWebアプリケーション（ソースコード）がどこにあるかを App Runner に指定するだけで、
2. App Runner が管理するAWSインフラ上にコンテナイメージをビルド、デプロイしてくれて

意図も簡単に簡易的なWebアプリケーションが出来上がりました。

この記事では、そんな App Runner を使いつつ、他のAWSサービスを組み合わせてTODOアプリを作成した経験についてご紹介します。


# 使用したAWSサービス
## App Runner
**＜概要＞**
**コンテナ化されたWebアプリケーションやAPIを、簡単かつ迅速にAWS上で動かせるサービス**

特徴は以下の通りです。詳細は[こちら](https://docs.aws.amazon.com/ja_jp/apprunner/latest/dg/what-is-apprunner.html "AWSドキュメント > AWS App Runner とは")を参照してください。
- デプロイ時のネットワーク設定やロードバランサー構築を自動で実行し、運用も自動化することができる
- 開発者はアプリケーション開発に焦点を当てることができる
- ソースコード、またはソースイメージの変更を検知して、自動で再デプロイすることができる
- Amazon CloudWatch を使って、アプリケーションのパフォーマンス監視、ログ収集ができる

## DynamoDB
**＜概要＞**
**スケーラブルかつ低レイテンシのデータストレージとクエリを提供し、柔軟なデータ構造やアクセスパターンに対応可能なNoSQLデータベースサービス**

特徴は以下の通りです。詳細は[こちら](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html "AWSドキュメント > What is Amazon DynamoDB?")を参照してください。
- スキーマリスなデータモデルを採用しているため、柔軟なデータ構造でデータを格納・クエリすることができる
- 自動的にスケーリングして、データやリクエストの増減に対応することができる
- 単位時間あたりのデータ取得量や更新量が高速である
- 断続的なバックアップとマルチAZデプロイをサポートし、データ損失や障害への対応が充実している

## CloudFormation
**＜概要＞**
**AWSリソースのプロビジョニングと管理を簡素化するために設計されたインフラストラクチャ自動化サービス**

特徴は以下の通りです。詳細は[こちら](https://docs.aws.amazon.com/cloudformation/ "AWSドキュメント > AWS CloudFormation")を参照してください。
- JSONまたはYAML形式のテンプレートにより、AWSリソースの構成をコード化して管理することができる
- テンプレートをもとに、AWSリソースを自動的に作成・設定・削除することができる
- テンプレートを変更管理システムで追跡し、AWSインフラストラクチャをバージョン管理することができる


# TODOアプリにおける各種AWSサービスの役割
***App Runner***：
TODOアプリの画面、業務ロジックのソースコードを読み込みWebアプリケーションとして公開する。
***DynamoDB***：
画面で登録したTODOを登録するDBとして機能する。
***CloudFormation***：
DynamoDB テーブルのプロビジョニング、App Runner のコンテナインスタンスが DynamoDB にアクセスするための IAMロール の作成、を実現する。


# TODOアプリにおける ChatGPT の役割
TODOアプリをつくってみようとしたものの、私にとっては、App Runner も DynamoDB も初めて使うサービスでした。
そこで、わからないことは ChatGPT に聞きながらやりたいことを実現しよう、と当初から決めていました。

いろいろ ChatGPT に聞き試行錯誤するなかで、主に次の場面で ChatGPT が助けてくれました。
- App Runner が読み込むソースコードの修正/不明点解消（アプリケーションのビルドとデプロイ設定を定義するための構成ファイルを含む）
- CloudFormation のスタックを用いた DynamoDB テーブルのプロビジョニング
- App Runner のコンテナインスタンスと DynamoDB テーブルの接続設定
- App Runner のコンテナインスタンスが DynamoDB テーブルにアクセスするための IAMロール の作成


# ChatGPT を使ってAWSサービスを構築する際のtips
- ChatGPT に聞くとき、回答の参考にしてほしい資料を渡すべき。（AWSについて聞きたいのであれば、[AWSドキュメントのリンク](https://docs.aws.amazon.com/ja_jp/ "AWSドキュメントhome")を事前にインプットする、など）
- もしくは、ChatGPT の回答の情報源となったWebページのURLを回答に添えてもらうように指定するべき。（誤った内容を回答される可能性を低くするため）
- ChatGPT に聞くとき、前提条件や仕様、注意事項を丁寧に伝えるべき。（TODOアプリの画面に欲しい機能、Python(App Runner が読み込むソースコード)のバージョン、など）
- ChatGPT には、日本語の文章/手順ではなくコードを回答してもらう方が正確なケースが多いと感じたため、IaCサービスである CloudFormation を利用するのが効果的。（DynamoDB テーブル作成、 App Runner のコンテナインスタンスが DynamoDB にアクセスするためのロール作成、などで活躍）
- ChatGPT の回答で不明な点や誤っていると思ったものは、意味が解るまで繰り返し質問するべき。（ChatGPT の回答が本当に誤っている可能性が十分に高いため）
- どうしてもわからないことは AWSサポート に聞くべき。（個別の事象に対して直接的かつ早急に回答を得られる点が良いため）

# まとめ
この記事では、ChatGPT × AWSサービス でTODOアプリを構築した経験についてご紹介しました。

ここで紹介した経験を通じて、初めて触るAWSサービスだとしても、それほど複雑な使い方でなければ、 ChatGPT を使って試行錯誤することで、やりたいことを十分に実現できることを体験できました。

この記事の内容が、まだまだAWSを学習中という方々にとって、さらなる学習の後押しになればと思います。