From 4854365cb4b52a9351702c2251decf0c1301af92 Mon Sep 17 00:00:00 2001 From: aws-amplify-bot Date: Wed, 18 Jun 2025 16:32:32 -0700 Subject: [PATCH 1/2] fix: remove global config --- .../commands/api/add-graphql-datasource.ts | 8 ++--- .../appSync-rds-walkthrough.ts | 35 +++++++++---------- .../src/AuroraDataAPIClient.ts | 14 ++++---- .../AuroraServerlessMySQLDatabaseReader.ts | 4 +-- 4 files changed, 30 insertions(+), 31 deletions(-) diff --git a/packages/amplify-category-api/src/commands/api/add-graphql-datasource.ts b/packages/amplify-category-api/src/commands/api/add-graphql-datasource.ts index 0de060754a..c24630bf94 100644 --- a/packages/amplify-category-api/src/commands/api/add-graphql-datasource.ts +++ b/packages/amplify-category-api/src/commands/api/add-graphql-datasource.ts @@ -33,7 +33,7 @@ export const name = subcommand; */ export const run = async (context: $TSContext): Promise => { try { - const AWS = await getAwsClient(context, 'list'); + const AWSConfig = await getAwsClientConfig(context, 'list'); const result: any = await datasourceSelectionPrompt(context, supportedDataSources); @@ -76,7 +76,7 @@ export const run = async (context: $TSContext): Promise => { answers.secretStoreArn, answers.dbClusterArn, answers.databaseName, - AWS, + AWSConfig, ); /** @@ -219,12 +219,12 @@ const datasourceSelectionPrompt = async (context: $TSContext, supportedDataSourc return inquirer.prompt(question).then((answer) => answer.datasource); }; -const getAwsClient = async (context: $TSContext, action: string): Promise => { +const getAwsClientConfig = async (context: $TSContext, action: string): Promise => { const providerPlugins = context.amplify.getProviderPlugins(context); // eslint-disable-next-line const provider = require(providerPlugins[providerName]); - return provider.getConfiguredAWSClient(context, 'aurora-serverless', action); + return provider.getConfiguredAWSClientConfig(context, 'aurora-serverless', action); }; /** diff --git a/packages/amplify-category-api/src/provider-utils/awscloudformation/service-walkthroughs/appSync-rds-walkthrough.ts b/packages/amplify-category-api/src/provider-utils/awscloudformation/service-walkthroughs/appSync-rds-walkthrough.ts index 3d97a399ea..37dd32dab8 100644 --- a/packages/amplify-category-api/src/provider-utils/awscloudformation/service-walkthroughs/appSync-rds-walkthrough.ts +++ b/packages/amplify-category-api/src/provider-utils/awscloudformation/service-walkthroughs/appSync-rds-walkthrough.ts @@ -12,6 +12,7 @@ import chalk from 'chalk'; import { DataApiParams } from 'graphql-relational-schema-transformer'; import ora from 'ora'; import { rootStackFileName } from '@aws-amplify/amplify-provider-awscloudformation'; +import * as aws from 'aws-sdk'; const spinner = ora(''); const category = 'api'; @@ -62,30 +63,28 @@ export async function serviceWalkthrough(context: $TSContext, datasourceMetadata selectedRegion = await promptWalkthroughQuestion(inputs, 0, availableRegions); } - const AWS = await getAwsClient(context, 'list'); + const AWSConfig = await getAwsClientConfig(context, 'list'); // Prepare the SDK with the region - AWS.config.update({ - region: selectedRegion, - }); + const config = { ...AWSConfig, region: selectedRegion }; // RDS Cluster Question let selectedClusterArn = cfnJsonParameters?.rdsClusterIdentifier; - let clusterResourceId = getRdsClusterResourceIdFromArn(selectedClusterArn, AWS); + let clusterResourceId = getRdsClusterResourceIdFromArn(selectedClusterArn, config); if (!selectedClusterArn || !clusterResourceId) { - ({ selectedClusterArn, clusterResourceId } = await selectCluster(context, inputs, AWS)); + ({ selectedClusterArn, clusterResourceId } = await selectCluster(context, inputs, config)); } // Secret Store Question let selectedSecretArn = cfnJsonParameters?.rdsSecretStoreArn; if (!selectedSecretArn) { - selectedSecretArn = await getSecretStoreArn(context, inputs, clusterResourceId, AWS); + selectedSecretArn = await getSecretStoreArn(context, inputs, clusterResourceId, config); } // Database Name Question let selectedDatabase = cfnJsonParameters?.rdsDatabaseName; if (!selectedDatabase) { - selectedDatabase = await selectDatabase(context, inputs, selectedClusterArn, selectedSecretArn, AWS); + selectedDatabase = await selectDatabase(context, inputs, selectedClusterArn, selectedSecretArn, config); } return { @@ -97,13 +96,13 @@ export async function serviceWalkthrough(context: $TSContext, datasourceMetadata }; } -async function getRdsClusterResourceIdFromArn(arn: string | undefined, AWS) { +async function getRdsClusterResourceIdFromArn(arn: string | undefined, AWSConfig) { // If the arn was not already existing in cloudformation template, return undefined to prompt for input. if (!arn) { return; } - const RDS = new AWS.RDS(); + const RDS = new aws.RDS(AWSConfig); const describeDBClustersResult = await RDS.describeDBClusters().promise(); const rawClusters = describeDBClustersResult.DBClusters; const identifiedCluster = rawClusters.find((cluster) => cluster.DBClusterArn === arn); @@ -114,8 +113,8 @@ async function getRdsClusterResourceIdFromArn(arn: string | undefined, AWS) { * * @param {*} inputs */ -async function selectCluster(context: $TSContext, inputs, AWS) { - const RDS = new AWS.RDS(); +async function selectCluster(context: $TSContext, inputs, AWSConfig) { + const RDS = new aws.RDS(AWSConfig); const describeDBClustersResult = await RDS.describeDBClusters().promise(); const rawClusters = describeDBClustersResult.DBClusters; @@ -163,8 +162,8 @@ async function selectCluster(context: $TSContext, inputs, AWS) { * @param {*} inputs * @param {*} clusterResourceId */ -async function getSecretStoreArn(context: $TSContext, inputs, clusterResourceId, AWS) { - const SecretsManager = new AWS.SecretsManager(); +async function getSecretStoreArn(context: $TSContext, inputs, clusterResourceId, AWSConfig) { + const SecretsManager = new aws.SecretsManager(AWSConfig); const NextToken = 'NextToken'; let rawSecrets = []; const params = { @@ -221,9 +220,9 @@ async function getSecretStoreArn(context: $TSContext, inputs, clusterResourceId, * @param {*} clusterArn * @param {*} secretArn */ -async function selectDatabase(context: $TSContext, inputs, clusterArn, secretArn, AWS) { +async function selectDatabase(context: $TSContext, inputs, clusterArn, secretArn, AWSConfig) { // Database Name Question - const DataApi = new AWS.RDSDataService(); + const DataApi = new aws.RDSDataService(AWSConfig); const params = new DataApiParams(); const databaseList = []; params.secretArn = secretArn; @@ -285,8 +284,8 @@ async function promptWalkthroughQuestion(inputs, questionNumber, choicesList) { return await prompter.pick(question.message, choicesList); } -async function getAwsClient(context: $TSContext, action: string) { +async function getAwsClientConfig(context: $TSContext, action: string) { const providerPlugins = context.amplify.getProviderPlugins(context); const provider = require(providerPlugins[providerName]); - return await provider.getConfiguredAWSClient(context, 'aurora-serverless', action); + return await provider.getConfiguredAWSClientConfig(context, 'aurora-serverless', action); } diff --git a/packages/graphql-relational-schema-transformer/src/AuroraDataAPIClient.ts b/packages/graphql-relational-schema-transformer/src/AuroraDataAPIClient.ts index acd1089e80..2628b2355c 100644 --- a/packages/graphql-relational-schema-transformer/src/AuroraDataAPIClient.ts +++ b/packages/graphql-relational-schema-transformer/src/AuroraDataAPIClient.ts @@ -1,9 +1,11 @@ +import * as aws from 'aws-sdk'; + /** * A wrapper around the RDS data service client, forming their responses for * easier consumption. */ export class AuroraDataAPIClient { - AWS: any; + AWSConfig: any; RDS: any; @@ -13,13 +15,11 @@ export class AuroraDataAPIClient { this.RDS = rdsClient; } - constructor(databaseRegion: string, awsSecretStoreArn: string, dbClusterOrInstanceArn: string, database: string, aws: any) { - this.AWS = aws; - this.AWS.config.update({ - region: databaseRegion, - }); + constructor(databaseRegion: string, awsSecretStoreArn: string, dbClusterOrInstanceArn: string, database: string, awsConfig: any) { + this.AWSConfig = awsConfig; + const config = { ...this.AWSConfig, region: databaseRegion }; - this.RDS = new this.AWS.RDSDataService(); + this.RDS = new aws.RDSDataService(config); this.Params = new DataApiParams(); this.Params.secretArn = awsSecretStoreArn; diff --git a/packages/graphql-relational-schema-transformer/src/AuroraServerlessMySQLDatabaseReader.ts b/packages/graphql-relational-schema-transformer/src/AuroraServerlessMySQLDatabaseReader.ts index 9fa246f718..ef52c67c4d 100644 --- a/packages/graphql-relational-schema-transformer/src/AuroraServerlessMySQLDatabaseReader.ts +++ b/packages/graphql-relational-schema-transformer/src/AuroraServerlessMySQLDatabaseReader.ts @@ -31,8 +31,8 @@ export class AuroraServerlessMySQLDatabaseReader implements IRelationalDBReader this.auroraClient = auroraClient; } - constructor(dbRegion: string, awsSecretStoreArn: string, dbClusterOrInstanceArn: string, database: string, aws: any) { - this.auroraClient = new AuroraDataAPIClient(dbRegion, awsSecretStoreArn, dbClusterOrInstanceArn, database, aws); + constructor(dbRegion: string, awsSecretStoreArn: string, dbClusterOrInstanceArn: string, database: string, awsConfig: any) { + this.auroraClient = new AuroraDataAPIClient(dbRegion, awsSecretStoreArn, dbClusterOrInstanceArn, database, awsConfig); this.dbRegion = dbRegion; this.awsSecretStoreArn = awsSecretStoreArn; this.dbClusterOrInstanceArn = dbClusterOrInstanceArn; From c2fe2866e8c2362c7049a538e06c2c08ff547e7f Mon Sep 17 00:00:00 2001 From: aws-amplify-bot Date: Thu, 19 Jun 2025 15:06:26 -0700 Subject: [PATCH 2/2] chore: update api --- packages/graphql-relational-schema-transformer/API.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/graphql-relational-schema-transformer/API.md b/packages/graphql-relational-schema-transformer/API.md index 5ec2038233..c3d8a5658b 100644 --- a/packages/graphql-relational-schema-transformer/API.md +++ b/packages/graphql-relational-schema-transformer/API.md @@ -12,9 +12,9 @@ import Template from 'cloudform-types/types/template'; // @public (undocumented) export class AuroraDataAPIClient { - constructor(databaseRegion: string, awsSecretStoreArn: string, dbClusterOrInstanceArn: string, database: string, aws: any); + constructor(databaseRegion: string, awsSecretStoreArn: string, dbClusterOrInstanceArn: string, database: string, awsConfig: any); // (undocumented) - AWS: any; + AWSConfig: any; // (undocumented) describeTable: (tableName: string) => Promise; // (undocumented) @@ -33,7 +33,7 @@ export class AuroraDataAPIClient { // // @public (undocumented) export class AuroraServerlessMySQLDatabaseReader implements IRelationalDBReader { - constructor(dbRegion: string, awsSecretStoreArn: string, dbClusterOrInstanceArn: string, database: string, aws: any); + constructor(dbRegion: string, awsSecretStoreArn: string, dbClusterOrInstanceArn: string, database: string, awsConfig: any); // (undocumented) auroraClient: AuroraDataAPIClient; // (undocumented)