既存のAWSリソースに接続する
Amplifyクライアントライブラリは、Amplifyバックエンドワークフローなしで独立して使用できます。CDK、Terraform、CloudFormation、またはAWSコンソールでAWSリソースをプロビジョニングした場合、Amplifyライブラリをそれらのリソースに直接接続できます。
これは、Amplifyのクライアントライブラリを認証、データ、ストレージなどに採用しながら、インフラストラクチャを完全に制御できることを意味します。
このアプローチを使用する場合
- CDK、Terraform、またはCloudFormationでAWSリソースがすでにプロビジョニングされている
- Amplifyバックエンドワークフロー(
ampx)を採用せずにAmplifyクライアントライブラリを使用したい - プラットフォームチームによって管理されている共有インフラストラクチャに接続する必要がある
- テストまたは環境の切り替え用にプログラマティック制御が必要
その仕組み
独自のリソースでAmplifyクライアントライブラリを設定する方法は2つあります。
オプション1: 手動のamplify_outputs.json
app/src/main/res/raw/ディレクトリに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" }}次に、いつものようにAmplifyを設定します:
Amplify.addPlugin(AWSCognitoAuthPlugin())Amplify.configure(applicationContext)オプション2: AmplifyOutputsDataでのプログラマティック設定
JSONファイルなしでコードで設定を構築します:
import com.amplifyframework.core.Amplifyimport com.amplifyframework.core.configuration.AmplifyOutputsDataimport com.amplifyframework.auth.cognito.AWSCognitoAuthPlugin
val config = AmplifyOutputsData( auth = Auth( awsRegion = "us-east-1", userPoolId = "us-east-1_abc123", userPoolClientId = "abcdef123456" ))
Amplify.addPlugin(AWSCognitoAuthPlugin())Amplify.configure(config, applicationContext)このアプローチは次の場合に理想的です:
- ユニットテスト — JSONファイルをバンドルせずにAmplifyを設定
- 環境の切り替え — dev/staging/prodに異なる設定を構築
- 動的設定 — ランタイムでリモートソースから設定を取得
Auth(Amazon Cognito)を設定する
既存のCognito User PoolおよびIdentity Poolに接続します。
val config = AmplifyOutputsData( auth = Auth( awsRegion = "us-east-1", userPoolId = "us-east-1_abc123", userPoolClientId = "abcdef123456", identityPoolId = "us-east-1:11111111-2222-3333-4444-555555555555", passwordPolicy = Auth.PasswordPolicy( minLength = 8, requireNumbers = true, requireLowercase = true, requireUppercase = true, requireSymbols = false ), oauth = Auth.Oauth( identityProviders = listOf( IdentityProviders.GOOGLE, IdentityProviders.SIGN_IN_WITH_APPLE ), domain = "myapp.auth.us-east-1.amazoncognito.com", scopes = listOf("openid", "email", "profile"), redirectSignInUri = listOf("myapp://callback"), redirectSignOutUri = listOf("myapp://signout"), responseType = ResponseType.Code ), standardRequiredAttributes = listOf( AmazonCognitoStandardAttributes.EMAIL ), usernameAttributes = listOf( UsernameAttributes.EMAIL ), userVerificationTypes = listOf( VerificationMechanism.EMAIL ), unauthenticatedIdentitiesEnabled = true, mfaConfiguration = MfaConfiguration.OPTIONAL, mfaMethods = listOf( MfaMethods.SMS, MfaMethods.TOTP ) ))
Amplify.addPlugin(AWSCognitoAuthPlugin())Amplify.configure(config, applicationContext)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に接続します。
val config = AmplifyOutputsData( data = Data( awsRegion = "us-east-1", url = "https://abc123.appsync-api.us-east-1.amazonaws.com/graphql", apiKey = "da2-abcdefghijklmno", defaultAuthorizationType = AwsAppsyncAuthorizationType.API_KEY, authorizationTypes = listOf( AwsAppsyncAuthorizationType.API_KEY, AwsAppsyncAuthorizationType.AMAZON_COGNITO_USER_POOLS ) ))
Amplify.addPlugin(AWSApiPlugin())Amplify.configure(config, applicationContext)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バケットに接続します。
val config = AmplifyOutputsData( auth = Auth( awsRegion = "us-east-1", userPoolId = "us-east-1_abc123", userPoolClientId = "abcdef123456", identityPoolId = "us-east-1:11111111-2222-3333-4444-555555555555" ), storage = Storage( awsRegion = "us-east-1", bucketName = "my-app-bucket" ))
Amplify.addPlugin(AWSCognitoAuthPlugin())Amplify.addPlugin(AWSS3StoragePlugin())Amplify.configure(config, applicationContext)複数のバケット
val config = AmplifyOutputsData( storage = Storage( awsRegion = "us-east-1", bucketName = "primary-bucket", buckets = listOf( Storage.Bucket( name = "media", bucketName = "my-media-bucket", awsRegion = "us-east-1" ), Storage.Bucket( name = "logs", bucketName = "my-logs-bucket", awsRegion = "us-west-2" ) ) ))Storage必須フィールド
| フィールド | 必須 | 説明 |
|---|---|---|
awsRegion | はい | AWSリージョン |
bucketName | はい | デフォルトのS3バケット名 |
buckets | いいえ | マルチバケットセットアップ用の追加の名前付きバケット |
Analytics(Amazon Pinpoint)を設定する
既存のPinpointアプリケーションに接続します。
val config = AmplifyOutputsData( analytics = Analytics( amazonPinpoint = Analytics.AmazonPinpoint( awsRegion = "us-east-1", appId = "abc123def456" ) ))
Amplify.addPlugin(AWSPinpointAnalyticsPlugin())Amplify.configure(config, applicationContext)Geo(Amazon Location Service)を設定する
既存のLocation Serviceリソースに接続します。
val config = AmplifyOutputsData( geo = Geo( awsRegion = "us-east-1", maps = Geo.Maps( items = mapOf( "myMap" to AmazonLocationServiceConfig( style = "VectorEsriStreets" ) ), default = "myMap" ), searchIndices = Geo.SearchIndices( items = listOf("myPlaceIndex"), default = "myPlaceIndex" ), geofenceCollections = Geo.GeofenceCollections( items = listOf("myGeofenceCollection"), default = "myGeofenceCollection" ) ))
Amplify.addPlugin(AWSLocationGeoPlugin())Amplify.configure(config, applicationContext)Notifications(プッシュ)を設定する
プッシュ通知用に既存のPinpointアプリケーションに接続します。
val config = AmplifyOutputsData( notifications = Notifications( awsRegion = "us-east-1", amazonPinpointAppId = "abc123def456", channels = listOf( AmazonPinpointChannels.FCM, AmazonPinpointChannels.IN_APP_MESSAGING ) ))
Amplify.addPlugin(AWSPinpointPushNotificationsPlugin())Amplify.configure(config, applicationContext)マルチカテゴリ設定
複数のサービスを一緒に設定できます。この例では、Auth、Data、およびStorageを単一の設定でセットアップしています。
val config = AmplifyOutputsData( auth = Auth( awsRegion = "us-east-1", userPoolId = "us-east-1_abc123", userPoolClientId = "abcdef123456", identityPoolId = "us-east-1:11111111-2222-3333-4444-555555555555" ), data = Data( awsRegion = "us-east-1", url = "https://abc123.appsync-api.us-east-1.amazonaws.com/graphql", defaultAuthorizationType = AwsAppsyncAuthorizationType.AMAZON_COGNITO_USER_POOLS, authorizationTypes = listOf( AwsAppsyncAuthorizationType.AMAZON_COGNITO_USER_POOLS, AwsAppsyncAuthorizationType.AWS_IAM ) ), storage = Storage( awsRegion = "us-east-1", bucketName = "my-app-bucket" ))
Amplify.addPlugin(AWSCognitoAuthPlugin())Amplify.addPlugin(AWSApiPlugin())Amplify.addPlugin(AWSS3StoragePlugin())Amplify.configure(config, applicationContext)環境固有の設定
別のJSONファイルなしでdev、staging、productionを切り替えます:
val (region, userPoolId, clientId) = when (BuildConfig.BUILD_TYPE) { "debug" -> Triple("us-east-1", "us-east-1_dev123", "devClient123") "staging" -> Triple("us-west-2", "us-west-2_staging456", "stagingClient456") else -> Triple("us-east-1", "us-east-1_prod789", "prodClient789")}
val config = AmplifyOutputsData( auth = Auth( awsRegion = region, userPoolId = userPoolId, userPoolClientId = clientId ))
Amplify.configure(config, applicationContext)amplify_outputs.jsonスキーマリファレンス
サポートされているすべての設定フィールドの完全なスキーマについては、amplify_outputs.jsonリファレンスを参照してください。