既存のAWSリソースに接続する
Amplifyクライアントライブラリは、Amplifyバックエンドワークフローなしで独立して使用できます。CDK、Terraform、CloudFormation、またはAWSコンソールでAWSリソースをプロビジョニングした場合、Amplifyライブラリをそれらのリソースに直接接続できます。
これは、Amplifyのクライアントライブラリを認証、データ、ストレージなどに採用しながら、インフラストラクチャを完全に制御できることを意味します。
このアプローチを使用する場合
- CDK、Terraform、またはCloudFormationでAWSリソースがすでにプロビジョニングされている
- Amplifyバックエンドワークフロー(
ampx)を採用せずにAmplifyクライアントライブラリを使用したい - プラットフォームチームによって管理されている共有インフラストラクチャに接続する必要がある
- テストまたは環境の切り替え用にプログラマティック制御が必要
その仕組み
独自のリソースでAmplifyクライアントライブラリを設定する方法は2つあります。
オプション1: 手動のamplify_outputs.json
リソース設定を使用してamplify_outputs.jsonファイルを作成します。サポートされているすべてのフィールドについては、完全な仕様を参照してください。
{ "version": "1", "auth": { "aws_region": "us-east-1", "user_pool_id": "us-east-1_abc123", "user_pool_client_id": "abcdef123456", "identity_pool_id": "us-east-1:11111111-2222-3333-4444-555555555555" }}次に、Dart設定を生成してAmplifyを設定します:
npx ampx generate outputs --outputs-format dart --outputs-out-dir libimport 'amplify_outputs.dart';
await Amplify.addPlugin(AmplifyAuthCognito());await Amplify.configure(amplifyConfig);オプション2: AmplifyOutputsでのプログラマティック設定
ファイルなしでコードで設定を構築します:
import 'package:amplify_core/amplify_core.dart';import 'package:amplify_auth_cognito/amplify_auth_cognito.dart';
final config = AmplifyOutputs( auth: AuthOutputs( awsRegion: 'us-east-1', userPoolId: 'us-east-1_abc123', userPoolClientId: 'abcdef123456', ),);
await Amplify.addPlugin(AmplifyAuthCognito());await Amplify.configure(config);このアプローチは次の場合に理想的です:
- ユニットテスト — ファイルをバンドルせずにAmplifyを設定
- 環境の切り替え — dev/staging/prodに異なる設定を構築
- 動的設定 — ランタイムでリモートソースから設定を取得
Auth(Amazon Cognito)を設定する
既存のCognito User PoolおよびIdentity Poolに接続します。
final config = AmplifyOutputs( auth: AuthOutputs( awsRegion: 'us-east-1', userPoolId: 'us-east-1_abc123', userPoolClientId: 'abcdef123456', identityPoolId: 'us-east-1:11111111-2222-3333-4444-555555555555', passwordPolicy: PasswordPolicy( minLength: 8, requireNumbers: true, requireLowercase: true, requireUppercase: true, requireSymbols: false, ), oauth: OAuthOutputs( identityProviders: [IdentityProvider.google, IdentityProvider.apple], domain: 'myapp.auth.us-east-1.amazoncognito.com', scopes: ['openid', 'email', 'profile'], redirectSignInUri: ['myapp://callback'], redirectSignOutUri: ['myapp://signout'], responseType: 'code', ), standardRequiredAttributes: [CognitoStandardAttribute.email], usernameAttributes: [UsernameAttribute.email], userVerificationTypes: [VerificationType.email], unauthenticatedIdentitiesEnabled: true, mfaConfiguration: MfaEnforcement.optional, mfaMethods: [MfaMethod.sms, MfaMethod.totp], ),);
await Amplify.addPlugin(AmplifyAuthCognito());await Amplify.configure(config);Auth必須フィールド
| フィールド | 必須 | 説明 |
|---|---|---|
awsRegion | はい | AWSリージョン(例:us-east-1) |
userPoolId | はい | Cognito User Pool ID |
userPoolClientId | はい | Cognitoアプリクライアント ID |
identityPoolId | いいえ | Cognito Identity Pool ID(ゲストアクセスとIAMベースの認証に必要) |
passwordPolicy | いいえ | パスワード要件(最小長、文字型) |
oauth | いいえ | OAuth/Hosted UI設定(ソーシャルサインイン) |
mfaConfiguration | いいえ | MFAモード:NONE、OPTIONAL、またはREQUIRED |
mfaMethods | いいえ | MFAタイプ:SMS、TOTP |
Data(AWS AppSync)を設定する
既存のAppSync GraphQL APIに接続します。
final config = AmplifyOutputs( data: DataOutputs( awsRegion: 'us-east-1', url: 'https://abc123.appsync-api.us-east-1.amazonaws.com/graphql', apiKey: 'da2-abcdefghijklmno', defaultAuthorizationType: AuthorizationType.apiKey, authorizationTypes: [AuthorizationType.apiKey, AuthorizationType.userPools], ),);
await Amplify.addPlugin(AmplifyAPI());await Amplify.configure(config);Data必須フィールド
| フィールド | 必須 | 説明 |
|---|---|---|
awsRegion | はい | AWSリージョン |
url | はい | AppSync GraphQLエンドポイントURL |
defaultAuthorizationType | はい | デフォルト認可モード:API_KEY、AMAZON_COGNITO_USER_POOLS、AWS_IAM、またはOPENID_CONNECT |
authorizationTypes | はい | サポートされているすべての認可モード |
apiKey | いいえ | API_KEY認証を使用する場合は必須 |
Storage(Amazon S3)を設定する
既存のS3バケットに接続します。
final config = AmplifyOutputs( auth: AuthOutputs( awsRegion: 'us-east-1', userPoolId: 'us-east-1_abc123', userPoolClientId: 'abcdef123456', identityPoolId: 'us-east-1:11111111-2222-3333-4444-555555555555', ), storage: StorageOutputs( awsRegion: 'us-east-1', bucketName: 'my-app-bucket', ),);
await Amplify.addPlugin(AmplifyAuthCognito());await Amplify.addPlugin(AmplifyStorageS3());await Amplify.configure(config);複数のバケット
final config = AmplifyOutputs( storage: StorageOutputs( awsRegion: 'us-east-1', bucketName: 'primary-bucket', buckets: [ BucketOutputs(name: 'media', bucketName: 'my-media-bucket', awsRegion: 'us-east-1'), BucketOutputs(name: 'logs', bucketName: 'my-logs-bucket', awsRegion: 'us-west-2'), ], ),);Storage必須フィールド
| フィールド | 必須 | 説明 |
|---|---|---|
awsRegion | はい | AWSリージョン |
bucketName | はい | デフォルトのS3バケット名 |
buckets | いいえ | マルチバケットセットアップ用の追加の名前付きバケット |
Analytics(Amazon Pinpoint)を設定する
既存のPinpointアプリケーションに接続します。
final config = AmplifyOutputs( analytics: AnalyticsOutputs( amazonPinpoint: AmazonPinpointOutputs( awsRegion: 'us-east-1', appId: 'abc123def456', ), ),);
await Amplify.addPlugin(AmplifyAnalyticsPinpoint());await Amplify.configure(config);Geo(Amazon Location Service)を設定する
既存のLocation Serviceリソースに接続します。
Notifications(プッシュ)を設定する
プッシュ通知用に既存のPinpointアプリケーションに接続します。
{ "version": "1", "notifications": { "aws_region": "us-east-1", "amazon_pinpoint_app_id": "abc123def456", "channels": ["APNS", "FCM", "IN_APP_MESSAGING"] }}マルチカテゴリ設定
複数のサービスを一緒に設定できます。この例では、Auth、Data、およびStorageを単一の設定でセットアップしています。
final config = AmplifyOutputs( auth: AuthOutputs( awsRegion: 'us-east-1', userPoolId: 'us-east-1_abc123', userPoolClientId: 'abcdef123456', identityPoolId: 'us-east-1:11111111-2222-3333-4444-555555555555', ), data: DataOutputs( awsRegion: 'us-east-1', url: 'https://abc123.appsync-api.us-east-1.amazonaws.com/graphql', defaultAuthorizationType: AuthorizationType.userPools, authorizationTypes: [AuthorizationType.userPools, AuthorizationType.iam], ), storage: StorageOutputs( awsRegion: 'us-east-1', bucketName: 'my-app-bucket', ),);
await Amplify.addPlugin(AmplifyAuthCognito());await Amplify.addPlugin(AmplifyAPI());await Amplify.addPlugin(AmplifyStorageS3());await Amplify.configure(config);環境固有の設定
別のファイルなしでdev、staging、productionを切り替えます:
final environment = const String.fromEnvironment('ENV', defaultValue: 'dev');
final AuthOutputs authConfig;switch (environment) { case 'prod': authConfig = AuthOutputs( awsRegion: 'us-east-1', userPoolId: 'us-east-1_prod789', userPoolClientId: 'prodClient789', ); case 'staging': authConfig = AuthOutputs( awsRegion: 'us-west-2', userPoolId: 'us-west-2_staging456', userPoolClientId: 'stagingClient456', ); default: authConfig = AuthOutputs( awsRegion: 'us-east-1', userPoolId: 'us-east-1_dev123', userPoolClientId: 'devClient123', );}
final config = AmplifyOutputs(auth: authConfig);await Amplify.configure(config);amplify_outputs.jsonスキーマリファレンス
サポートされているすべての設定フィールドの完全なスキーマについては、amplify_outputs.jsonリファレンスを参照してください。