Name:
interface
Value:
Amplify has re-imagined the way frontend developers build fullstack applications. Develop and deploy without the hassle.
Gen1 DocsLegacy

Page updated Mar 26, 2026

AWS AppSync Apollo Extensions

AWS AppSync Apollo Extensionsは、Apollo Clientというオープンソースの GraphQL クライアントを使用して AWS AppSync バックエンドにシームレスに接続する方法を提供します。

Apollo の詳細については、https://www.apollographql.com/docs/kotlin を参照してください。

機能

AWS AppSync Apollo Extensions は、Apollo クライアントで使用される AWS AppSync オーサライザーを提供し、GraphQL 操作に正しい認可ペイロードを簡単に適用できます。

さらに、Amplify が認可トークンと対応する Authorizer の署名ロジックを提供できるようにするオプションの Amplify 拡張機能を公開しています。

AWS AppSync Apollo Extensions ライブラリをインストールする

apollo-appsync-amplify 依存関係を app/build.gradle.kts ファイルに追加します。

app/build.gradle.kts
dependencies {
// Connect Apollo to AppSync, delegating some implementation details to Amplify
implementation("com.amplifyframework:apollo-appsync-amplify:1.0.0")
}

apollo-appsync 依存関係を app/build.gradle.kts ファイルに追加します。

app/build.gradle.kts
dependencies {
// Connect Apollo to AppSync without using Amplify
implementation("com.amplifyframework:apollo-appsync:1.0.0")
}

Apollo クライアントを使用して AWS AppSync に接続する

ApolloClient の作成

開始する前に、Amplify Data バックエンドのデプロイが必要です。開始するには、Set up Data を参照してください。

バックエンドをデプロイして amplify_outputs.json ファイルを作成したら、以下の手順で Amplify ライブラリを使用して設定値を読み取って取得できます:

// Use apiKey auth mode, reading configuration from AmplifyOutputs
val connector = ApolloAmplifyConnector(context, AmplifyOutputs(R.raw.amplify_outputs))
val apolloClient = ApolloClient.Builder()
.appSync(connector.endpoint, connector.apiKeyAuthorizer())
.build()

提供されている AWS AppSync エンドポイントとオーサライザークラスを使用して Apollo クライアントを作成できます。

val endpoint = AppSyncEndpoint("<your_appsync_endpoint>")
// Continue Reading to see more authorizer examples
val authorizer = ApiKeyAuthorizer("[API_KEY]")
val apolloClient = ApolloClient.Builder()
.appSync(endpoint, authorizer)
.build()

AppSync Authorizer の提供

AWS AppSync Apollo Extensions ライブラリは、スキーマで使用されている可能性のあるさまざまな認可戦略に対応した多くの Authorizer クラスを提供します。認可戦略に対応する適切な Authorizer タイプを選択する必要があります。戦略と対応する認可モードの詳細については、利用可能な認可戦略 を参照してください。

一般的なものは以下の通りです

  • publicAPIkey 戦略、apiKey 認可モード、APIKeyAuthorizer
  • guest 戦略、identityPool 認可モード、IAMAuthorizer
  • owner 戦略、userPool 認可モード、AuthTokenAuthorizer

スキーマ内で複数の認可戦略を定義する場合、アプリで使用する各 Authorizer に対して個別の Apollo クライアントインスタンスを作成する必要があります。

API_KEY

ApiKeyAuthorizeramplify_outputs.json から API キーを読み取ったり、ハードコードされた API キーを提供したり、何らかのソースから API キーを取得したりできます:

// Using ApolloAmplifyConnector to read API key from amplify_outputs.json
val connector = ApolloAmplifyConnector(context, AmplifyOutputs(R.raw.amplify_outputs))
val authorizer = connector.apiKeyAuthorizer()
// or
// Use a hard-coded API key
val authorizer = ApiKeyAuthorizer("[API_KEY]")
// or
// Fetch the API key from some source. This function may be called many times,
// so it should implement appropriate caching internally.
val authorizer = ApiKeyAuthorizer { fetchApiKey() }

AMAZON_COGNITO_USER_POOLS

AmplifyApolloConnector を使用して、現在ログインしている Amplify ユーザーのトークンを提供する AuthTokenAuthorizer インスタンスを取得するか、トークン取得を自分で実装できます。

// Using ApolloAmplifyConnector to get the authorizer that connects to your
// Amplify instance
val connector = ApolloAmplifyConnector(context, AmplifyOutputs(R.raw.amplify_outputs))
val authorizer = connector.authTokenAuthorizer()
// or
// Using the ApolloAmplifyConnector companion function
val authorizer = AuthTokenAuthorizer {
ApolloAmplifyConnector.fetchLatestCognitoAuthToken()
}
// or
// Use your own token fetching. This function may be called many times,
// so it should implement appropriate caching internally.
val authorizer = AuthTokenAuthorizer {
fetchLatestAuthToken()
}

AWS_LAMBDA および OPENID_CONNECT 認可モード用に、独自のカスタム fetchLatestAuthToken プロバイダーを提供できます。

AWS_IAM

ApolloAmplifyConnector を使用して、トークン取得とリクエスト署名を Amplify に委譲できます。

// Using ApolloAmplifyConnector to get the authorizer that connects to your
// Amplify instance
val connector = ApolloAmplifyConnector(context, AmplifyOutputs(R.raw.amplify_outputs))
val authorizer = connector.iamAuthorizer()
// or
// Using the ApolloAmplifyConnector companion function
val authorizer = IamAuthorizer {
ApolloAmplifyConnector.signAppSyncRequest(it, "us-east-1")
}

AWS AppSync は以下の 認可モード をサポートしています。選択した認可タイプに対応する Authorizer を使用してください。

一般的なものは以下の通りです

  • API Key Authorization -> APIKeyAuthorizer
  • IAM Authorization -> IAMAuthorizer
  • Cognito User Pools -> AuthTokenAuthorizer

スキーマに複数の認可ディレクティブを適用する場合、アプリで使用する各 Authorizer に対して個別の Apollo クライアントインスタンスを作成する必要があります。

API_KEY

ApiKeyAuthorizer はハードコードされた API キーを使用するか、何らかのソースからキーを取得することで使用できます:

// Use a hard-coded API key
val authorizer = ApiKeyAuthorizer("[API_KEY]")
// or
// Fetch the API key from some source. This function may be called many times,
// so it should implement appropriate caching internally.
val authorizer = ApiKeyAuthorizer { fetchApiKey() }

AMAZON_COGNITO_USER_POOLS

AppSync で直接作業する場合は、トークン取得を自分で実装する必要があります。

// Use your own token fetching. This function may be called many times,
// so it should implement appropriate caching internally.
val authorizer = AuthTokenAuthorizer {
fetchLatestAuthToken()
}

AWS_IAM

AppSync で直接作業する場合は、リクエスト署名を自分で実装する必要があります。

// Provide an implementation of the signing function. This function should implement the
// AWS Sig-v4 signing logic and return the authorization headers containing the token and signature.
val authorizer = IamAuthorizer { signRequestAndReturnHeaders(it) }

AWS AppSync スキーマをダウンロードする

スキーマは Apollo のコード生成ツールによって使用され、GraphQL 操作を実行するのに役立つ API コードを生成します。以下の手順では、AppSync スキーマを Apollo のコード生成プロセスと統合します:

  1. AWS AppSync コンソール でお使いの API に移動します。
  2. 左側で Schema を選択します。
  3. Export schema ドロップダウンを選択し、schema.json ファイルをダウンロードします。
  4. Apollo ドキュメント で指示されたとおり、このファイルをプロジェクトに追加します。

Apollo クライアント用のクエリ、ミューテーション、サブスクリプションを生成する

Amplify が提供する .graphql ファイル

  1. Amplify Gen 2 バックエンド内で、以下を実行します:npx ampx generate graphql-client-code --format graphql-codegen --statement-target graphql --out graphql
  2. 生成されたファイル(mutations.graphqlqueries.graphqlsubscriptions.graphql)を Apollo ドキュメント に示されているとおり {app}/src/main/graphql フォルダーにコピーします。

手動

  1. AWS AppSync コンソール でお使いの API の Queries タブに移動します。ここで、GraphQL プレイグラウンドでクエリ、ミューテーション、サブスクリプションをテストできます。
  2. エディターに GraphQL 操作(クエリ、ミューテーション、またはサブスクリプション)を入力し、Run を選択して実行します。
  3. 結果でリクエストとレスポンスの構造を確認します。これにより、Apollo が使用する正確な呼び出しパターンと構造を理解できます。
  4. プレイグラウンドから GraphQL 操作をコピーし、Apollo ドキュメント に示されているとおり {app}/src/main/graphql フォルダーに渡します。
  1. AWS AppSync コンソール でお使いの API の Queries タブに移動します。ここで、GraphQL プレイグラウンドでクエリ、ミューテーション、サブスクリプションをテストできます。
  2. エディターに GraphQL 操作(クエリ、ミューテーション、またはサブスクリプション)を入力し、Run をクリックして実行します。
  3. 結果でリクエストとレスポンスの構造を確認します。これにより、Apollo が使用する正確な呼び出しパターンと構造を理解できます。
  4. プレイグラウンドから GraphQL 操作をコピーし、Apollo のコード生成ツールに渡して、プロジェクト用の対応する API コードを自動生成します。

AppSync スカラーのタイプマッピング

デフォルトでは、AWS AppSync ScalarsAny タイプになります。app/build.gradle[.kts] ファイルの apollo ブロックを編集して、これらのスカラーをより明示的なタイプにマッピングできます。以下の例では、いくつかの AppSync スカラータイプを Any の代わりに String にマッピングしています。カスタムクラスアダプター を作成することで、日付/時刻スカラーを Kotlin の日付/時刻クラスタイプに変換するための追加の改善を行うことができます。

apollo {
service("{serviceName}") {
packageName.set("{packageName}")
mapScalarToKotlinString("AWSDateTime")
mapScalarToKotlinString("AWSEmail")
}
}