はじめに
Flutterエンジニアとして実務を経験してきたが、エンジニアとしての幅を広げるためにバックエンド領域、特にAWSを使ったサーバー構築に挑戦。そのメモを残していく
学習ロードマップ
今回構築する環境では、以下のAWSサービスを段階的に学んでいく方針とした。
- Cognito:認証・ユーザー管理
- API Gateway:FlutterからのHTTPリクエスト受け口
- Lambda:ビジネスロジックの実行
- DynamoDB:データの永続化
- S3:ファイルストレージ
- Amplify:上記をFlutterから扱いやすくするSDK
最初のマイルストーンとして、Amplify + Cognitoによる認証機能の実装を目標に設定した。
環境構築の流れ
今回完了させたのは以下の作業。
ローカル環境の準備 → AWSアカウント設定 → Amplify CLIの紐付け
1. ローカル環境の準備
- AWS CLIのインストール
- Node.jsのインストール(Amplify CLIの実行に必要)
- Amplify CLIのインストール
brew install awscli
npm install -g @aws-amplify/cli
2. rootアカウントのMFA設定
AWSではrootアカウントを日常使いせず、IAMユーザーに権限を委譲して作業するのが推奨とされている。rootアカウントはすべての権限を持ち、漏洩時のダメージが大きいため、まずMFA(多要素認証)を設定。
手順:
- AWSコンソールにrootでログイン
- 「セキュリティ認証情報」→「多要素認証 (MFA)」
- 認証アプリ(Google Authenticator等)でQRコードを読み取り設定
3. IAMユーザーの作成
Amplify用の作業ユーザーとしてIAMユーザーを作成した。
- IAMコンソール →「ユーザーの作成」
- ユーザー名を設定(今回は
test_devとして作成) - 権限ポリシーとして
AdministratorAccessを付与- 学習段階のため最小権限ではなく広めの権限で進めた
- 実務・本番運用では最小権限に絞るのが望ましい
- アクセスキーを発行(CLI用途)し、CSVを保存
4. AWS CLIの認証情報設定
ローカルのAWS CLIに、作成したIAMユーザーの認証情報を設定した。
aws configure
入力項目:
| 項目 | 入力内容 |
|---|---|
| AWS Access Key ID | IAMユーザーのアクセスキー |
| AWS Secret Access Key | IAMユーザーのシークレットキー |
| Default region name |
ap-northeast-1(東京リージョン) |
| Default output format | json |
設定後、以下のコマンドで認証情報が正しく反映されているか確認した。
aws sts get-caller-identity
出力例:
{
"UserId": "AIDAVBQXCHEFBTJ6EY5PF",
"Account": "346866989322",
"Arn": "arn:aws:iam::346866989322:user/test_dev"
}
作成したIAMユーザー(test_dev)の情報が正しく表示され、CLIからの認証が成功していることを確認できた。
5. Amplify CLIとIAMユーザーの紐付け
最後に、Amplify CLI自体にAWSの認証情報を紐付け。
amplify configure
ブラウザでAWSコンソールが開き、IAMユーザーの設定を促されるが、すでに test_dev を作成済みのため、既存ユーザーの情報(リージョン・アクセスキー・シークレットキー)を入力する形で問題なし。
Successfully set up the new user.
の出力を確認し、Amplify CLIの初期設定が完了した。
ここまでで完了したこと
- rootアカウントのMFA設定
-
IAMユーザー(
test_dev)の作成・権限付与 - AWS CLIの認証情報設定
- Amplify CLIとIAMユーザーの紐付け
次にやること
ここまででAWS側・ローカル環境側の土台が整った状態。次回は、実際にFlutterプロジェクトとAmplifyを紐付ける作業(amplify init)から、Cognitoを使った認証機能の実装に進んでいく。
-
amplify initでFlutterプロジェクトとAWSバックエンドを接続 -
amplify add authでCognitoの設定を追加 -
amplify pushでAWS上にCognito User Poolをデプロイ - Flutter側にAmplify SDKを導入し、サインアップ/サインイン機能を実装