既存のAWSリソースに接続する
Amplifyクライアントライブラリは、Amplifyバックエンドワークフローなしで独立して使用できます。CDK、Terraform、CloudFormation、またはAWSコンソールでAWSリソースをプロビジョニングした場合、Amplifyライブラリをそれらのリソースに直接接続できます。
これは、Amplifyのクライアントライブラリを認証、データ、ストレージなどに採用しながら、インフラストラクチャを完全に制御できることを意味します。
このアプローチを使用する場合
- CDK、Terraform、またはCloudFormationでAWSリソースがすでにプロビジョニングされている
- Amplifyバックエンドワークフロー(
ampx)を採用せずにAmplifyクライアントライブラリを使用したい - プラットフォームチームによって管理されている共有インフラストラクチャに接続する必要がある
- テストまたは環境の切り替え用にプログラマティック制御が必要
その仕組み
独自のリソースでAmplifyクライアントライブラリを設定する方法は2つあります。
オプション1: 手動のamplify_outputs.json
Xcodeプロジェクトに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を設定します:
try Amplify.add(plugin: AWSCognitoAuthPlugin())try Amplify.configure(with: .amplifyOutputs)オプション2: AmplifyOutputsDataでのプログラマティック設定
JSONファイルなしでコードで設定を構築します:
import Amplifyimport AWSCognitoAuthPlugin
let config = AmplifyOutputsData( auth: .init( awsRegion: "us-east-1", userPoolId: "us-east-1_abc123", userPoolClientId: "abcdef123456" ))
try Amplify.add(plugin: AWSCognitoAuthPlugin())try Amplify.configure(config)このアプローチは次の場合に理想的です:
- ユニットテスト — JSONファイルをバンドルせずにAmplifyを設定
- 環境の切り替え — dev/staging/prodに異なる設定を構築
- 動的設定 — ランタイムでリモートソースから設定を取得
Auth(Amazon Cognito)を設定する
既存のCognito User PoolおよびIdentity Poolに接続します。
let config = AmplifyOutputsData( auth: .init( awsRegion: "us-east-1", userPoolId: "us-east-1_abc123", userPoolClientId: "abcdef123456", identityPoolId: "us-east-1:11111111-2222-3333-4444-555555555555", passwordPolicy: .init( minLength: 8, requireNumbers: true, requireLowercase: true, requireUppercase: true, requireSymbols: false ), oauth: .init( identityProviders: ["GOOGLE", "SIGN_IN_WITH_APPLE"], domain: "myapp.auth.us-east-1.amazoncognito.com", scopes: ["openid", "email", "profile"], redirectSignInUri: ["myapp://callback"], redirectSignOutUri: ["myapp://signout"], responseType: "code" ), standardRequiredAttributes: [.email], usernameAttributes: [.email], userVerificationTypes: [.email], unauthenticatedIdentitiesEnabled: true, mfaConfiguration: "OPTIONAL", mfaMethods: ["SMS", "TOTP"] ))
try Amplify.add(plugin: AWSCognitoAuthPlugin())try 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に接続します。
let config = AmplifyOutputsData( data: .init( awsRegion: "us-east-1", url: "https://abc123.appsync-api.us-east-1.amazonaws.com/graphql", apiKey: "da2-abcdefghijklmno", defaultAuthorizationType: .apiKey, authorizationTypes: [.apiKey, .amazonCognitoUserPools] ))
try Amplify.add(plugin: AWSAPIPlugin())try 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バケットに接続します。
let config = AmplifyOutputsData( auth: .init( awsRegion: "us-east-1", userPoolId: "us-east-1_abc123", userPoolClientId: "abcdef123456", identityPoolId: "us-east-1:11111111-2222-3333-4444-555555555555" ), storage: .init( awsRegion: "us-east-1", bucketName: "my-app-bucket" ))
try Amplify.add(plugin: AWSCognitoAuthPlugin())try Amplify.add(plugin: AWSS3StoragePlugin())try Amplify.configure(config)複数のバケット
let config = AmplifyOutputsData( storage: .init( awsRegion: "us-east-1", bucketName: "primary-bucket", buckets: [ .init(name: "media", bucketName: "my-media-bucket", awsRegion: "us-east-1"), .init(name: "logs", bucketName: "my-logs-bucket", awsRegion: "us-west-2") ] ))Storage必須フィールド
| フィールド | 必須 | 説明 |
|---|---|---|
awsRegion | はい | AWSリージョン |
bucketName | はい | デフォルトのS3バケット名 |
buckets | いいえ | マルチバケットセットアップ用の追加の名前付きバケット |
Analytics(Amazon Pinpoint)を設定する
既存のPinpointアプリケーションに接続します。
let config = AmplifyOutputsData( analytics: .init( amazonPinpoint: .init( awsRegion: "us-east-1", appId: "abc123def456" ) ))
try Amplify.add(plugin: AWSPinpointAnalyticsPlugin())try Amplify.configure(config)Geo(Amazon Location Service)を設定する
既存のLocation Serviceリソースに接続します。
let config = AmplifyOutputsData( geo: .init( awsRegion: "us-east-1", maps: .init( items: ["myMap": .init(style: "VectorEsriStreets")], default: "myMap" ), searchIndices: .init( items: ["myPlaceIndex"], default: "myPlaceIndex" ), geofenceCollections: .init( items: ["myGeofenceCollection"], default: "myGeofenceCollection" ) ))
try Amplify.add(plugin: AWSLocationGeoPlugin())try Amplify.configure(config)Notifications(プッシュ)を設定する
プッシュ通知用に既存のPinpointアプリケーションに接続します。
let config = AmplifyOutputsData( notifications: .init( awsRegion: "us-east-1", amazonPinpointAppId: "abc123def456", channels: [.apns, .fcm, .inAppMessaging] ))
try Amplify.add(plugin: AWSPinpointPushNotificationsPlugin())try Amplify.configure(config)マルチカテゴリ設定
複数のサービスを一緒に設定できます。この例では、Auth、Data、およびStorageを単一の設定でセットアップしています。
let config = AmplifyOutputsData( auth: .init( awsRegion: "us-east-1", userPoolId: "us-east-1_abc123", userPoolClientId: "abcdef123456", identityPoolId: "us-east-1:11111111-2222-3333-4444-555555555555" ), data: .init( awsRegion: "us-east-1", url: "https://abc123.appsync-api.us-east-1.amazonaws.com/graphql", defaultAuthorizationType: .amazonCognitoUserPools, authorizationTypes: [.amazonCognitoUserPools, .awsIAM] ), storage: .init( awsRegion: "us-east-1", bucketName: "my-app-bucket" ))
try Amplify.add(plugin: AWSCognitoAuthPlugin())try Amplify.add(plugin: AWSAPIPlugin())try Amplify.add(plugin: AWSS3StoragePlugin())try Amplify.configure(config)解決済み設定の検査
amplify_outputs.jsonから解決された設定を検査できます:
let outputs = try AmplifyOutputs.amplifyOutputs.resolveConfiguration()
if let auth = outputs.auth { print("User Pool ID: \(auth.userPoolId)") print("Region: \(auth.awsRegion)") print("Identity Pool: \(auth.identityPoolId ?? "none")")}
if let storage = outputs.storage { print("Bucket: \(storage.bucketName)") print("Additional buckets: \(storage.buckets?.count ?? 0)")}
if let data = outputs.data { print("GraphQL endpoint: \(data.url)") print("Default auth: \(data.defaultAuthorizationType)")}環境固有の設定
別のJSONファイルなしでdev、staging、productionを切り替えます:
let region: Stringlet userPoolId: Stringlet clientId: String
switch environment {case .dev: region = "us-east-1" userPoolId = "us-east-1_dev123" clientId = "devClient123"case .staging: region = "us-west-2" userPoolId = "us-west-2_staging456" clientId = "stagingClient456"case .prod: region = "us-east-1" userPoolId = "us-east-1_prod789" clientId = "prodClient789"}
let config = AmplifyOutputsData( auth: .init( awsRegion: region, userPoolId: userPoolId, userPoolClientId: clientId ))
try Amplify.configure(config)amplify_outputs.jsonスキーマリファレンス
サポートされているすべての設定フィールドの完全なスキーマについては、amplify_outputs.jsonリファレンスを参照してください。