Amplify Gen2のQuickStartチュートリアルを進めてみた

2024.05.21

NTT東日本の中村です。

Amplify Gen2がGAとなり、プレビューで紹介されていたチュートリアルも大きく変わりました。 改めて、正式公開されたチュートリアルを確認してみました。

プレビュー版はこちらの過去の記事でまとめられていますが、GAになり、多少コマンドの変更等がありますので、ご注意下さい。

  • amplify → ampxにコマンドが変更
  • sandboxのオプションがnameからidentifierに変更

チュートリアルを始める前に

チュートリアルはReact、Vue、Flutter等、言語フレームワークにより分かれていますが、今回はNextJSのApp Routerをベースに確認します。

今回はQuickStartを進めていきます。

Amplify Gen2のチュートリアル(Quick Start)

以前は無かった、QuickStartのチュートリアルで、GitHubにGen2のテンプレートのリポジトリを作成し、DataとAnthを連携させる流れを説明しています。

リポジトリの作成

「Create repository」のボタンから、自分のGitHubのアカウントにリポジトリを作成します。 予め、同じブラウザのタブで、GitHubにログインしておくとスムーズです。

リポジトリ名を指定して、ログイン中のGitHubアカウントでリポジトリを作成します。

リポジトリが完成しました。ここまで10秒くらいです。

アプリのデプロイ

作成したリポジトリを、AWSアカウントのAmplifyアプリケーションと紐づけます。

GitHubを選択します。

GitHubとAmplifyの連携は、GitHub Appsで連携を行います。初回はAppsのインストール画面が表示されます。 既にインストールが済んでいる場合、GitHubのsettingsから、先程作成したリポジトリが選択対象になっているか、確認します。 社内では連携できるリポジトリを制限している為、任意で追加する必要がありました。

 

フレームワークが自動検出されます。特に設定を変更せず、先に進みます。

7分ほどでデプロイが完了します。 このデプロイは、リポジトリに設定されたAmplifyのAuth(Cognito)、Data(AppSync)をAWSアカウント上に反映するバックエンドのデプロイと、Next.JSをAmplify Hostingに反映するフロントエンドのデプロイが含まれます。初回だけ、多めに時間が掛かります。

画面右下の「Download amplify_outpus.json」をダウンロードしておきます。

アプリの表示

デプロイが完了したので、「ドメイン」のリンクを押すと、Webアプリが表示されました。 GitHub Appsの設定が楽に進めば、、10分掛からないのではないでしょうか。非常にスムーズです。

環境変数の適用

ダウンロードしたamplify_output.jsonをローカルに配置することで、Amplifyのサービスを連携させたローカル開発が行えるようになります。

その他、ローカル開発のポイント

チュートリアルを進めることで、ログインUIの実装、開発者毎のサンドボックスの作成、ユーザごとに分離されたデータの保存を体験することができます。

サンドボックスの作成

Amplify Gen2の新しい機能で、指定したAWSアカウント上に、開発者毎の独立したAuth,Dataを簡単に構築することができます。チーム開発で同じ環境を使ってバッティングが起こる・・・のような事が解消できます。 identifierのオプションを設定することで、それぞれの開発環境がCloudformationで構築されます。

npx ampx sandbox --identifier

ユーザごとに分離されたデータの保存

これはAmplify Gen1から存在する機能です。 TodoデータはDynamoDBに保存されていますが、初期の状態では、保存したレコードはログインユーザ全員に共有されてしまいます。 authorizationのオプションを変更することで、作成したレコードにログイン情報に基づいたOwner属性が付与されるので、作成したレコードを他のユーザが閲覧したり、編集したりということを防ぐことができます。

  }).authorization(allow => [allow.owner()]),

まとめ

プレビュー版と比べ、簡単ですぐに使えるクイックスタートが追加され、簡単にAmplifyを試すことができるようになりました。Docだけでは一見分かりにくいことも、手を動かすことでより理解が深まる助けになると思います。