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

Page updated Apr 30, 2024

Maintenance ModeYou are viewing Amplify Gen 1 documentation. Amplify Gen 1 has entered maintenance mode and will reach end of life on May 1, 2027. New project should use Amplify Gen 2. For existing Gen 1 projects, a migration guide and tooling are available to help you upgrade. Switch to the latest Gen 2 docs →

Amplify生成リソースの変更

Amplify GraphQL APIは、さまざまな自動生成された基礎となるAWSサービスとリソースを使用します。これらの基礎となるリソースをカスタマイズして、特定のユースケースに合わせてデプロイされたスタックを最適化できます。

amplify override api

上記のコマンドを実行して、AWS AppSync API、Amazon DynamoDBテーブル、Amazon OpenSearchドメインなど、Amplify生成GraphQL APIリソースをオーバーライドします。

特定のAmplify生成VTLリゾルバーをカスタマイズする必要がある場合は、まずAmplify生成リゾルバーのオーバーライドを確認してください。

このコマンドは、amplify/backend/api/<resource-name>/の下に新しいoverrides.tsファイルを作成します。このファイルは、CDKコンストラクトとしてAmplify生成リソースを提供します。

CDKプロジェクトでは、すべての基礎となるリソースに"L2"または"L1"コンストラクトとしてアクセスできます。返されたスタックの.resourcesプロパティを経由してL2コンストラクトとして生成リソースにアクセスするか、.resources.cfnResourcesプロパティを使用してL1コンストラクトとして生成リソースにアクセスします。

const api = new AmplifyGraphQlApi(this, 'api', { <params> });
// Access L2 resources under `.resources`
api.resources.tables["Todo"].tableArn;
// Access L1 resources under `.resources.cfnResources`
api.resources.cfnResources.cfnGraphqlApi.xrayEnabled = true;
Object.values(api.resources.cfnResources.cfnTables).forEach(table => {
table.pointInTimeRecoverySpecification = { pointInTimeRecoveryEnabled: false };
});

Amplify生成AppSync GraphQL APIリソースのカスタマイズ

すべてのオーバーライドをoverride(...)関数に適用します。例えば、AppSync GraphQL APIのX-Rayトレーシングを有効にするには:

import { AmplifyApiGraphQlResourceStackTemplate } from '@aws-amplify/cli-extensibility-helper';
export function override(resources: AmplifyApiGraphQlResourceStackTemplate) {
resources.api.GraphQLAPI.xrayEnabled = true;
}

Amplifyが生成する以下のGraphQL APIリソースをオーバーライドできます:

Amplify生成リソース説明
GraphQLAPIAWS AppSync GraphQL APIリソース
GraphQLAPIDefaultApiKeyAppSync GraphQL APIのAPIキーリソース
GraphQLAPITransformerSchemaデプロイされるGraphQLスキーマ。(GraphQL Transformerの出力)
GraphQLAPINONEDSAppSync APIを終了しないリクエスト用の「none」データソース
AmplifyDataStoreAmplify DataStoreの競合解決に使用されるデルタ同期テーブル
AmplifyDataStoreIAMRoleDataStoreのデルタ同期テーブルにアクセスするために使用されるIAMロール
DynamoDBAccessAppSyncからDynamoDBリソースにアクセスするためのIAMポリシー

.resources.graphqlApiまたは.resources.cfnResources.cfnGraphqlApiにすべてのカスタマイズを適用します。例えば、AppSync GraphQL APIのX-Rayトレーシングを有効にするには:

const amplifyApi = new AmplifyGraphqlApi(this, 'MyNewApi', {
definition: AmplifyGraphqlDefinition.fromFiles(
path.join(__dirname, 'schema.graphql')
),
authorizationModes: {
defaultAuthorizationMode: 'API_KEY',
apiKeyConfig: {
expires: cdk.Duration.days(30)
}
}
});
amplifyApi.resources.cfnResources.cfnGraphqlApi.xrayEnabled = true;

@modelディレクティブのAmplify生成リソースのカスタマイズ

すべてのオーバーライドをoverride(...)関数に適用します。resources.models[...]に@modelタイプ名を渡して、その特定の@modelタイプ用に生成されるリソースを変更します。例えば、Todo@modelタイプのDynamoDBテーブルでtime-to-liveを有効にするには:

import { AmplifyApiGraphQlResourceStackTemplate } from '@aws-amplify/cli-extensibility-helper';
export function override(resources: AmplifyApiGraphQlResourceStackTemplate) {
resources.models['Todo'].modelDDBTable.timeToLiveSpecification = {
attributeName: 'ttl',
enabled: true
};
}

Amplifyが生成する以下の@modelディレクティブリソースをオーバーライドできます:

Amplify生成リソース説明
modelStack@modelタイプのすべてのリソースを含むネストされたスタック
modelDDBTableこのこの@modelタイプのデータを含むDynamoDBテーブル
modelIamRoleこのこの@modelタイプのDynamoDBテーブルにアクセスするためのIAMロール
modelIamRoleDefaultPolicyDataStoreが有効な場合、このこの@modelタイプのデルタ同期テーブルにアクセスするためのIAMポリシー
dynamoDBAccessこのこの@modelタイプのDynamoDBテーブルにアクセスするためのIAMロールに関連付けられたデフォルトポリシー
modelDatasourceDynamoDBテーブルを表すAppSyncデータソース
invokeLambdaFunctionLambdaベースの競合解決関数のIAMポリシー

例えば、モデル生成DynamoDBテーブル設定をオーバーライドできます。

import { AmplifyApiGraphQlResourceStackTemplate } from '@aws-amplify/cli-extensibility-helper';
export function override(resources: AmplifyApiGraphQlResourceStackTemplate) {
resources.models['Todo'].modelDatasource.dynamoDbConfig['deltaSyncConfig'][
'baseTableTtl'
] = '3600';
}

.resources.tables["MODEL_NAME"]または.resources.cfnResources.cfnTables["MODEL_NAME"]にすべてのカスタマイズを適用します。.resources.cfnResources.cfnTables["MODEL_NAME"]に@modelタイプ名を渡して、その特定の@modelタイプ用に生成されるリソースを変更します。例えば、Todo@modelタイプのDynamoDBテーブルでtime-to-liveを有効にするには:

const amplifyApi = new AmplifyGraphqlApi(this, 'MyNewApi', {
definition: AmplifyGraphqlDefinition.fromFiles(
path.join(__dirname, 'schema.graphql')
),
authorizationModes: {
defaultAuthorizationMode: 'API_KEY',
apiKeyConfig: {
expires: cdk.Duration.days(30)
}
}
});
amplifyApi.resources.cfnResources.cfnTables['Todo'].timeToLiveSpecification = {
attributeName: 'ttl',
enabled: true
};

例 - DynamoDBテーブルの課金モードを構成する

DynamoDB課金モードをDynamoDBテーブルに設定します。「PROVISIONED」または「PAY_PER_REQUEST」のいずれか。

import { AmplifyApiGraphQlResourceStackTemplate } from '@aws-amplify/cli-extensibility-helper';
export function override(resources: AmplifyApiGraphQlResourceStackTemplate) {
resources.models['Post'].modelDDBTable.billingMode = 'PAY_PER_REQUEST';
}
const amplifyApi = new AmplifyGraphqlApi(this, 'MyNewApi', {
definition: AmplifyGraphqlDefinition.fromFiles(
path.join(__dirname, 'schema.graphql')
),
authorizationModes: {
defaultAuthorizationMode: 'API_KEY',
apiKeyConfig: {
expires: cdk.Duration.days(30)
}
}
});
amplifyApi.resources.cfnResources.cfnTables['Todo'].billingMode =
'PAY_PER_REQUEST';

例 - DynamoDBテーブルまたはグローバルセカンダリインデックスのプロビジョニングされたスループットを構成する

デフォルトのProvisionedThroughputを各@modelテーブルおよびそのグローバルセカンダリインデックス(GSI)のためにオーバーライドします。

「DynamoDBBillingMode」が「PROVISIONED」に設定されている場合にのみ有効

import { AmplifyApiGraphQlResourceStackTemplate } from '@aws-amplify/cli-extensibility-helper';
export function override(resources: AmplifyApiGraphQlResourceStackTemplate) {
resources.models['Post'].modelDDBTable.provisionedThroughput = {
readCapacityUnits: 5,
writeCapacityUnits: 5
};
/**
* 課金モードが「PROVISIONED」に設定されている場合、テーブルに存在するすべてのグローバルセカンダリインデックス(GSI)に対して`provisionedThroughput`を指定する必要があります。
*/
resources.models[
'Post'
].modelDDBTable.globalSecondaryIndexes[0].provisionedThroughput = {
readCapacityUnits: 5,
writeCapacityUnits: 5
};
}

例 - DynamoDBテーブルのポイントインタイムリカバリーを有効にする

@modelテーブルのDynamoDBポイントインタイムリカバリーを有効/無効にします。

import { AmplifyApiGraphQlResourceStackTemplate } from '@aws-amplify/cli-extensibility-helper';
export function override(resources: AmplifyApiGraphQlResourceStackTemplate) {
resources.models['Post'].modelDDBTable.pointInTimeRecoverySpecification = {
pointInTimeRecoveryEnabled: true
};
}
const amplifyApi = new AmplifyGraphqlApi(this, 'MyNewApi', {
definition: AmplifyGraphqlDefinition.fromFiles(
path.join(__dirname, 'schema.graphql')
),
authorizationModes: {
defaultAuthorizationMode: 'API_KEY',
apiKeyConfig: {
expires: cdk.Duration.days(30)
}
}
});
amplifyApi.resources.cfnResources.cfnTables[
'Todo'
].pointInTimeRecoverySpecification = {
pointInTimeRecoveryEnabled: true
};

@searchable(OpenSearch)ディレクティブのAmplify生成リソースのカスタマイズ

override(...)関数にすべてのオーバーライドを適用します。例えば、OpenSearchインスタンス数を変更するには:

import { AmplifyApiGraphQlResourceStackTemplate } from '@aws-amplify/cli-extensibility-helper';
export function override(resources: AmplifyApiGraphQlResourceStackTemplate) {
resources.opensearch.OpenSearchDomain.elasticsearchClusterConfig = {
...resources.opensearch.OpenSearchDomain.elasticsearchClusterConfig,
instanceCount: 6
};
}

Amplifyが生成する以下の@searchableディレクティブリソースをオーバーライドできます:

Amplify生成リソース説明
OpenSearchDataSourceOpenSearch統合を表すAppSyncデータソース
OpenSearchAccessIAMRoleOpenSearchドメインにアクセスするためのIAMロール
OpenSearchAccessIAMRoleDefaultPolicyOpenSearchドメインにアクセスするためのIAMポリシー
OpenSearchDomain@searchableデータを含むOpenSearchドメイン
OpenSearchStreamingLambdaIAMRoleDynamoDBデータをOpenSearchドメインにストリーミングするためのIAMロール
OpenSearchStreamingLambdaIAMRoleDefaultPolicyDynamoDBデータをOpenSearchドメインにストリーミングするためのIAMポリシー
CloudwatchLogsAccessCloudWatch Logsアクセスを付与するためのIAMポリシー
OpenSearchStreamingLambdaFunctionDynamoDBデータをOpenSearchドメインにストリーミングするためのLambda関数
OpenSearchModelLambdaMappingDynamoDBテーブルストリームからLambda関数へのイベントソースマッピング

例 - ストリーミングLambdaのランタイムを構成する

関数オブジェクト自体にランタイム値を設定して、@searchableのランタイムを定義できます。これはAmplify CLIのバージョンをアップグレードできない場合に非推奨のランタイムを解決するために行うことができます。

import { AmplifyApiGraphQlResourceStackTemplate } from '@aws-amplify/cli-extensibility-helper';
export function override(resources: AmplifyApiGraphQlResourceStackTemplate) {
resources.opensearch.OpenSearchStreamingLambdaFunction.runtime = 'python3.9';
}

例 - OpenSearchストリーミング関数名を構成する

AWS Lambda検索可能ストリーミング関数の名前をオーバーライドします

import { AmplifyApiGraphQlResourceStackTemplate } from '@aws-amplify/cli-extensibility-helper';
export function override(resources: AmplifyApiGraphQlResourceStackTemplate) {
resources.opensearch.OpenSearchStreamingLambdaFunction.FunctionName =
'CustomFunctionName';
}

例 - OpenSearchインスタンスバージョンを構成する

@searchableで作成されたOpenSearchドメインのelasticsearchVersionをオーバーライドします

import { AmplifyApiGraphQlResourceStackTemplate } from '@aws-amplify/cli-extensibility-helper';
export function override(resources: AmplifyApiGraphQlResourceStackTemplate) {
resources.opensearch.OpenSearchDomain.elasticsearchVersion = 'OpenSearch_1.3';
}

例 - OpenSearchインスタンスタイプを構成する

@searchableで作成されたOpenSearchドメインにデプロイされるインスタンスのタイプをオーバーライドします

import { AmplifyApiGraphQlResourceStackTemplate } from '@aws-amplify/cli-extensibility-helper';
export function override(resources: AmplifyApiGraphQlResourceStackTemplate) {
resources.opensearch.OpenSearchDomain.elasticsearchClusterConfig = {
...resources.opensearch.OpenSearchDomain.elasticsearchClusterConfig,
instanceType: 'm3.medium.elasticsearch'
};
}

例 - OpenSearchインスタンス数を構成する

@searchableで作成されたOpenSearchドメインにデプロイされるインスタンスの数をオーバーライドします

import { AmplifyApiGraphQlResourceStackTemplate } from '@aws-amplify/cli-extensibility-helper';
export function override(resources: AmplifyApiGraphQlResourceStackTemplate) {
resources.opensearch.OpenSearchDomain.elasticsearchClusterConfig = {
...resources.opensearch.OpenSearchDomain.elasticsearchClusterConfig,
instanceCount: 2
};
}

例 - OpenSearch EBSボリュームサイズを構成する

@searchableで作成されたOpenSearchドメイン内の各インスタンスに割り当てられるディスク容量をオーバーライドします

import { AmplifyApiGraphQlResourceStackTemplate } from '@aws-amplify/cli-extensibility-helper';
export function override(resources: AmplifyApiGraphQlResourceStackTemplate) {
resources.opensearch.OpenSearchDomain.ebsOptions = {
...resources.opensearch.OpenSearchDomain.ebsOptions,
volumeSize: 10
};
}

@predictionsディレクティブのAmplify生成リソースのカスタマイズ

override(...)関数にすべてのオーバーライドを適用します。例えば、テキスト翻訳を容易にするIAMロールにパスを追加するには:

import { AmplifyApiGraphQlResourceStackTemplate } from '@aws-amplify/cli-extensibility-helper';
export function override(resources: AmplifyApiGraphQlResourceStackTemplate) {
resources.predictions.TranslateDataSourceServiceRole.path =
'/my/organization/';
}

Amplifyが生成する以下の@predictionsディレクティブリソースをオーバーライドできます:

Amplify生成リソース説明
RekognitionDataSourceAmazon Rekognitionサービスに接続するAppSync HTTPデータソース
RekognitionDataSourceServiceRoleAmazon Rekognitionに接続するためのAppSyncサービスロール
TranslateDataSourceAmazon Translateサービスに接続するAppSync HTTPデータソース
translateTextAccessAmazon Translateに接続するためのIAMポリシー
LambdaDataSourceAmazon Pollyに接続するためのAppSync Lambdaデータソース
LambdaDataSourceServiceRoleAmazon Pollyを呼び出すLambda関数に接続するためのAppSyncサービスロール
LambdaDataSourceServiceRoleDefaultPolicyAmazon Pollyを呼び出すLambda関数に接続するためのAppSyncのIAMポリシー
TranslateDataSourceServiceRoleAmazon Translateに接続するためのAppSyncサービスロール
predictionsLambdaIAMRoleAmazon Pollyを呼び出すLambda関数のIAMロール
predictionsLambdaFunctionAmazon Pollyを呼び出すLambda関数
PredictionsLambdaAccessLambda関数がAmazon PollyにアクセスするためのIAMポリシー
predictionsIAMRole@predictionsで使用されるS3バケットにアクセスするためのIAMロール
PredictionsStorageAccess@predictionsで使用されるS3バケットにアクセスするためのIAMポリシー
identifyTextAccessテキスト識別を有効にするためのIAMポリシー
identifyLabelsAccessテキスト識別を有効にするためのIAMポリシー

AppSyncリゾルバーをカスタム名スタックに配置する

GraphQLスキーマが特に大きい場合、スタックに定義されたリソースが多すぎることの問題が発生する可能性があります。このケースが最も一般的なのはConnectionStackで、これはスキーマ内のすべてのリレーショナルディレクティブのリゾルバーを含んでいます。

スタックマッピングを作成しても、Amplify環境用の追加のルートスタックは作成されません。すべてのマップされたスタックは、既存のAmplify環境ルートスタック下に配置されます。リゾルバーを別のスタックにマップするには、<プロジェクトルート>/amplify/api/<api名>/transform.conf.jsonを「StackMapping」ブロックで更新します。StackMappingはリゾルバーロジックIDからスタック名へのマップを定義します。

{
"Version": 5,
"ElasticsearchWarning": true,
"StackMapping": {
"<Resolver logical ID>": "Custom stack name"
}
}

リゾルバーロジックIDを決定する最も簡単な方法は、amplify api gql-compileを実行し、生成されたCloudFormationスタックのリソースのリストでリゾルバーロジックIDに注目することです。モデル操作のリゾルバーは<Get | List | Create | Update | Delete><モデル名>Resolverの形式になります。リレーショナルディレクティブのリゾルバーは<モデル名><フィールド名>Resolverの形式になります。

以下のスキーマが与えられた場合:

type Blog @model {
id: ID!
name: String!
posts: [Post] @hasMany
}
type Post @model {
id: ID!
title: String!
content: String
blog: Blog @belongsTo
}

CreatePostResolverおよびリレーショナルリゾルバーを「MyCustomStack」という名前のスタックにマップするには、transform.conf.jsonに以下を追加します:

"StackMapping": {
"CreatePostResolver": "MyCustomStack",
"BlogpostsResolver": "MyCustomStack",
"PostblogResolver": "MyCustomStack",
}