での環境変数の使用 AWS AppSync - AWS AppSync

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

での環境変数の使用 AWS AppSync

環境変数を使用して、コードを更新せずにリ AWS AppSync ゾルバーと関数の動作を調整できます。環境変数は、API設定と共に保存される文字列のペアであり、実行時に活用できるリゾルバーと関数で使用できます。これらは、初期設定時にのみ使用できる設定データを参照する必要があるが、実行時にリゾルバーと関数で使用する必要がある状況で特に便利です。環境変数はコード内の設定データを公開するため、これらの値をハードコーディングする必要がなくなります。

注記

データベースのセキュリティを強化するには、環境変数の代わりに Secrets Manager または AWS Systems Manager パラメータストアを使用して認証情報や機密情報を保存することをお勧めします。この機能を活用するには、「データソース を使用した AWS AppSync HTTP AWS サービスの呼び出し」を参照してください。

環境変数が適切に機能するには、いくつかの動作とルールに従う必要があります。

  • JavaScript リゾルバー/関数とVTLテンプレートはどちらも環境変数をサポートしています。

  • 環境変数は、関数の呼び出し前に評価されません。

  • 環境変数は文字列値のみをサポートします。

  • 環境変数で定義された値は、文字列リテラルと見なされ、展開されません。

  • 可変評価は、理想的には関数コードで実行する必要があります。

環境変数の設定 (コンソール)

AWS AppSync GraphQL の環境変数を設定するには、変数APIを作成し、そのキーと値のペアを定義します。リゾルバーと関数は、実行時に環境変数のキー名を使用して値を取得します。 AWS AppSync コンソールで環境変数を設定するには:

  1. にサインイン AWS Management Console し、AppSyncコンソール を開きます。

  2. APIs ページで、GraphQL の名前を選択しますAPI。

  3. APIのホームページのナビゲーションペインで、設定 を選択します。

  4. 環境変数 で、環境変数 を追加 を選択します。

  5. [環境変数の追加] を選択します。

  6. キーと値を入力します。

  7. 必要に応じて、ステップ 5 と 6 を繰り返してキー値を追加します。キー値を削除する必要がある場合は、削除 オプションと削除するキー (複数可) を選択します。

  8. [送信] を選択します。

ヒント

キーと値を作成するときは、いくつかのルールに従う必要があります。

  • キーは文字で始まる必要があります。

  • キーの長さは 2 文字以上にする必要があります。

  • キーには、文字、数字、アンダースコア文字 (_) のみを使用できます。

  • 値は最大 512 文字です。

  • GraphQL では、最大 50 個のキーと値のペアを設定できますAPI。

環境変数の設定 (API)

を使用して環境変数を設定するにはAPIs、 を使用できますPutGraphqlApiEnvironmentVariables。対応するCLIコマンドは ですput-graphql-api-environment-variables

を使用して環境変数を取得するにはAPIs、 を使用できますGetGraphqlApiEnvironmentVariables。対応するCLIコマンドは ですget-graphql-api-environment-variables

コマンドには、APIID と環境変数のリストが含まれている必要があります。

aws appsync put-graphql-api-environment-variables \ --api-id "<api-id>" \ --environment-variables '{"key1":"value1","key2":"value2", …}'

次の例では、 put-graphql-api-environment-variables コマンドabcdefghijklmnopqrstuvwxyzを使用して ID APIが の に 2 つの環境変数を設定します。

aws appsync put-graphql-api-environment-variables \ --api-id "abcdefghijklmnopqrstuvwxyz" \ --environment-variables '{"USER_TABLE":"users_prod","DEBUG":"true"}'

put-graphql-api-environment-variables コマンドで環境変数を適用すると、環境変数の 構造の内容が上書きされることに注意してください。これは、既存の環境変数が失われることを意味します。新しい環境変数を追加するときに既存の環境変数を保持するには、既存のすべてのキーと値のペアを新しいキーと値のペアとともにリクエストに含めます。上記の例を使用して、 を追加する場合は"EMPTY":""、次の操作を実行できます。

aws appsync put-graphql-api-environment-variables \ --api-id "abcdefghijklmnopqrstuvwxyz" \ --environment-variables '{"USER_TABLE":"users_prod","DEBUG":"true", "EMPTY":""}'

現在の設定を取得するには、 get-graphql-api-environment-variables コマンドを使用します。

aws appsync get-graphql-api-environment-variables --api-id "<api-id>"

上記の例を使用して、次のコマンドを使用できます。

aws appsync get-graphql-api-environment-variables --api-id "abcdefghijklmnopqrstuvwxyz"

結果には、環境変数のリストとそのキー値が表示されます。

{ "environmentVariables": { "USER_TABLE": "users_prod", "DEBUG": "true", "EMPTY": "" } }

環境変数の設定 (CFN)

以下のテンプレートを使用して環境変数を作成できます。

AWSTemplateFormatVersion: 2010-09-09 Resources: GraphQLApiWithEnvVariables: Type: "AWS::AppSync::GraphQLApi" Properties: Name: "MyApiWithEnvVars" AuthenticationType: "AWS_IAM" EnvironmentVariables: EnvKey1: "non-empty" EnvKey2: ""

環境変数とマージ APIs

ソースで定義された環境変数APIsは、Merged でも使用できますAPIs。Merged の環境変数APIsは読み取り専用であり、更新できません。マージを成功させるには、環境変数キーがすべてのソースで一意である必要があることに注意してください。キーが重複すると、常にマージが失敗APIsします。

環境変数の取得

関数コードの環境変数を取得するには、リゾルバーと関数の ctx.env オブジェクトから値を取得します。以下に、この動作の例をいくつか示します。

Publishing to Amazon SNS

この例では、リHTTPゾルバーは Amazon SNSトピックにメッセージを送信します。トピックARNの は、GraphQL APIとトピックを定義するスタックがデプロイされた後にのみ認識されます。

/** * Sends a publish request to the SNS topic */ export function request(ctx) { const TOPIC_ARN = ctx.env.TOPIC_ARN; const { input: values } = ctx.args; // this custom function sends values to the SNS topic return publishToSNSRequest(TOPIC_ARN, values); }
Transactions with DynamoDB

この例では、 がステージング用にデプロイされている場合、または既に本番環境にある場合、DynamoDB API テーブルの名前は異なります。リゾルバーコードを変更する必要はありません。環境変数の値は、 APIがデプロイされている場所に基づいて更新されます。

import { util } from '@aws-appsync/utils'; export function request(ctx) { const { authorId, postId } = ctx.args; return { operation: 'TransactWriteItems', transactItems: [ { table: ctx.env.POST_TABLE, operation: 'PutItem', key: util.dynamodb.toMapValues({ postId }), // rest of the configuration }, { table: ctx.env.AUTHOR_TABLE, operation: 'UpdateItem', key: util.dynamodb.toMapValues({ authorId }), // rest of the configuration }, ], }; }