Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ export const name = subcommand;
*/
export const run = async (context: $TSContext): Promise<void> => {
try {
const AWS = await getAwsClient(context, 'list');
const AWSConfig = await getAwsClientConfig(context, 'list');

const result: any = await datasourceSelectionPrompt(context, supportedDataSources);

Expand Down Expand Up @@ -76,7 +76,7 @@ export const run = async (context: $TSContext): Promise<void> => {
answers.secretStoreArn,
answers.dbClusterArn,
answers.databaseName,
AWS,
AWSConfig,
);

/**
Expand Down Expand Up @@ -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<any> => {
const getAwsClientConfig = async (context: $TSContext, action: string): Promise<any> => {
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);
};

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -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 {
Expand All @@ -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);
Expand All @@ -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;
Expand Down Expand Up @@ -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 = {
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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);
}
6 changes: 3 additions & 3 deletions packages/graphql-relational-schema-transformer/API.md
Original file line number Diff line number Diff line change
Expand Up @@ -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<any[]>;
// (undocumented)
Expand All @@ -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)
Expand Down
Original file line number Diff line number Diff line change
@@ -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;

Expand All @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Loading