はじめに
サーバーレス大好きエンジニアです!
Amplify Gen2ではSQLデータベースを利用することができます。
実際に使ってみて、登録時に失敗したポイントを共有したいと思います。
目次
- Amplify Gen2とは?
- 登録方法
- 失敗したこと
- 成功した場合
- まとめ
1. Amplify Gen2とは?
TypeScriptを使用してフルスタックアプリケーションを構築するための新たなAWS Amplifyが登場しました。
バックエンドリソースの作成がCLIからCDKに変更されたことで、より拡張性が高くなりました。
また、今までのAmplifyでは実現できなかった機能が追加され、その中でSQLデータベースの使用が可能になったことを知り、使ってみることにしました。
2. 登録方法
今回はMySQLの接続方法について書いていきます。
たった2つのコマンドで接続することができます。
まず、以下のコマンドでsandboxのシークレットを設定します。
npx ampx sandbox secret set SQL_CONNECTION_STRING
ここではSQL_CONNECTION_STRINGというシークレットを登録します。以下のようにSQLの情報を入力してください。
npx ampx sandbox secret set SQL_CONNECTION_STRING
? Enter secret value: mysql://user:password@hostname:port/db-name
次に以下のコマンドを実行するとデータベース接続が完了し、AmplifyでSQLを利用することができます。
npx ampx generate schema-from-database --connection-uri-secret SQL_CONNECTION_STRING --out amplify/data/schema.sql.ts
3. 失敗したこと
3.1 接続するリンクの情報がそもそも違う
mysql://user:password@hostname:port/db-name
の入力を間違えると以下のようなエラーが発生します。
Unable to connect to the database
3.2 データベースの登録をしていない
データベースが見つからないというエラーが起きます。
Error: Unknown database
この問題は、SQL内でデータベースを作成することで解決できます。
CREATE DATABASE hoge
3.3 スキーマの定義がされていない
既存のMySQLからスキーマをインポートするので、テーブル設計を事前にしておく必要があります。
Error: Imported SQL schema is empty.
また、PRIMARY KEY
を設定しない場合もエラーが発生します。
Error: No valid tables found. Make sure at least one table has a primary key.
以下のようにテーブル定義とPRIMARY KEY
の設定を行います。
CREATE TABLE Users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
email VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
3.4 認証設定
RDSの設定を正しく行わない場合、以下のエラーが発生します。
AccessDenied: no identity-based policy allows the rds:DescribeDBProxies action
4. 成功した場合
成功すると、以下のようなログが出力されます。
✔ Successfully fetched the database schema.
5. まとめ
認証とSQLの初期データを適切に登録すれば問題なく接続できます。
参考になれば幸いです。