Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migrate AWS SDK for JavaScript v2 APIs to v3 #244

Closed
wants to merge 9 commits into from
14 changes: 11 additions & 3 deletions src/commands/add-cognito-user-pool-trigger.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,23 @@
const loadConfig = require('../util/loadconfig'),
iamNameSanitize = require('../util/iam-name-sanitize'),
aws = require('aws-sdk'),
getOwnerInfo = require('../tasks/get-owner-info');

const {
CognitoIdentityProvider
} = require("@aws-sdk/client-cognito-identity-provider");

const {
Lambda
} = require("@aws-sdk/client-lambda");

module.exports = function addCognitoUserPoolTrigger(options, optionalLogger) {
'use strict';
let lambdaConfig,
lambda,
cognito;
const initServices = function () {
lambda = new aws.Lambda({region: lambdaConfig.region});
cognito = new aws.CognitoIdentityServiceProvider({region: lambdaConfig.region});
lambda = new Lambda({region: lambdaConfig.region});
cognito = new CognitoIdentityProvider({region: lambdaConfig.region});
},
readConfig = function () {
return loadConfig(options, {lambda: {name: true, region: true}})
Expand Down
15 changes: 11 additions & 4 deletions src/commands/add-iot-topic-rule.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
const loadConfig = require('../util/loadconfig'),
iamNameSanitize = require('../util/iam-name-sanitize'),
aws = require('aws-sdk');
iamNameSanitize = require('../util/iam-name-sanitize');

const {
IoT
} = require("@aws-sdk/client-iot");

const {
Lambda
} = require("@aws-sdk/client-lambda");

module.exports = function addIOTTopicRuleEventSource(options) {
'use strict';
Expand All @@ -9,8 +16,8 @@ module.exports = function addIOTTopicRuleEventSource(options) {
ruleName,
iot;
const initServices = function () {
lambda = new aws.Lambda({region: lambdaConfig.region});
iot = new aws.Iot({region: lambdaConfig.region});
lambda = new Lambda({region: lambdaConfig.region});
iot = new IoT({region: lambdaConfig.region});
},
readConfig = function () {
return loadConfig(options, {lambda: {name: true, region: true}})
Expand Down
21 changes: 16 additions & 5 deletions src/commands/add-kinesis-event-source.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,19 @@
const loadConfig = require('../util/loadconfig'),
isRoleArn = require('../util/is-role-arn'),
isKinesisArn = require('../util/is-kinesis-arn'),
retry = require('oh-no-i-insist'),
aws = require('aws-sdk');
retry = require('oh-no-i-insist');

const {
IAM
} = require("@aws-sdk/client-iam");

const {
Kinesis
} = require("@aws-sdk/client-kinesis");

const {
Lambda
} = require("@aws-sdk/client-lambda");

module.exports = function addKinesisEventSource(options, logger) {
'use strict';
Expand All @@ -13,9 +24,9 @@ module.exports = function addKinesisEventSource(options, logger) {
const awsDelay = Number(options['aws-delay']) || 5000,
awsRetries = Number(options['aws-retries']) || 15,
initServices = function () {
lambda = new aws.Lambda({region: lambdaConfig.region});
iam = new aws.IAM({region: lambdaConfig.region});
kinesis = new aws.Kinesis({region: lambdaConfig.region});
lambda = new Lambda({region: lambdaConfig.region});
iam = new IAM({region: lambdaConfig.region});
kinesis = new Kinesis({region: lambdaConfig.region});
},
getLambda = () => lambda.getFunctionConfiguration({FunctionName: lambdaConfig.name, Qualifier: options.version}).promise(),
readConfig = function () {
Expand Down
28 changes: 20 additions & 8 deletions src/commands/add-s3-event-source.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,26 @@
const loadConfig = require('../util/loadconfig'),
iamNameSanitize = require('../util/iam-name-sanitize'),
aws = require('aws-sdk');
iamNameSanitize = require('../util/iam-name-sanitize');

const {
IAM
} = require("@aws-sdk/client-iam");

const {
Lambda
} = require("@aws-sdk/client-lambda");

const {
S3
} = require("@aws-sdk/client-s3");

module.exports = function addS3EventSource(options) {
'use strict';
let lambdaConfig,
awsPartition,
lambda;
const ts = Date.now(),
getLambda = function (config) {
lambda = new aws.Lambda({region: config.lambda.region});
lambda = new Lambda({region: config.lambda.region});
lambdaConfig = config.lambda;
return lambda.getFunctionConfiguration({FunctionName: lambdaConfig.name, Qualifier: options.version}).promise();
},
Expand All @@ -26,7 +38,7 @@ module.exports = function addS3EventSource(options) {
});
},
addS3AccessPolicy = function () {
const iam = new aws.IAM({region: lambdaConfig.region});
const iam = new IAM({region: lambdaConfig.region});
return iam.putRolePolicy({
RoleName: lambdaConfig.role,
PolicyName: iamNameSanitize(`s3-${options.bucket}-access-${ts}`),
Expand All @@ -44,7 +56,7 @@ module.exports = function addS3EventSource(options) {
}
]
})
}).promise();
});
},
addInvokePermission = function () {
return lambda.addPermission({
Expand All @@ -58,7 +70,7 @@ module.exports = function addS3EventSource(options) {
},
addBucketNotificationConfig = function () {
const events = options.events ? options.events.split(',') : ['s3:ObjectCreated:*'],
s3 = new aws.S3({region: lambdaConfig.region, signatureVersion: 'v4'}),
s3 = new S3({region: lambdaConfig.region}),
eventConfig = {
LambdaFunctionArn: lambdaConfig.arn,
Events: events
Expand All @@ -85,7 +97,7 @@ module.exports = function addS3EventSource(options) {
}
return s3.getBucketNotificationConfiguration({
Bucket: options.bucket
}).promise()
})
.then(currentConfig => {
const merged = currentConfig || {};
if (!merged.LambdaFunctionConfigurations) {
Expand All @@ -95,7 +107,7 @@ module.exports = function addS3EventSource(options) {
return s3.putBucketNotificationConfiguration({
Bucket: options.bucket,
NotificationConfiguration: merged
}).promise();
});
});
};

Expand Down
17 changes: 13 additions & 4 deletions src/commands/add-scheduled-event.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
const loadConfig = require('../util/loadconfig'),
fsPromise = require('../util/fs-promise'),
aws = require('aws-sdk');
fsPromise = require('../util/fs-promise');

const {
CloudWatchEvents
} = require("@aws-sdk/client-cloudwatch-events");

const {
Lambda
} = require("@aws-sdk/client-lambda");

module.exports = function addScheduledEvent(options) {
'use strict';
Expand All @@ -10,8 +17,10 @@ module.exports = function addScheduledEvent(options) {
eventData,
ruleArn;
const initServices = function () {
lambda = new aws.Lambda({region: lambdaConfig.region});
events = new aws.CloudWatchEvents({region: lambdaConfig.region});
lambda = new Lambda({region: lambdaConfig.region});
events = new CloudWatchEvents({
region: lambdaConfig.region
});
},
getLambda = () => lambda.getFunctionConfiguration({FunctionName: lambdaConfig.name, Qualifier: options.version}).promise(),
readConfig = function () {
Expand Down
17 changes: 13 additions & 4 deletions src/commands/add-sns-event-source.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,24 @@
const loadConfig = require('../util/loadconfig'),
fsPromise = require('../util/fs-promise'),
aws = require('aws-sdk');
fsPromise = require('../util/fs-promise');

const {
Lambda
} = require("@aws-sdk/client-lambda");

const {
SNS
} = require("@aws-sdk/client-sns");

module.exports = function addSNSEventSource(options) {
'use strict';
let lambdaConfig,
lambda,
sns;
const initServices = function () {
lambda = new aws.Lambda({region: lambdaConfig.region});
sns = new aws.SNS({region: lambdaConfig.region});
lambda = new Lambda({region: lambdaConfig.region});
sns = new SNS({
region: lambdaConfig.region
});
},
getLambda = () => lambda.getFunctionConfiguration({FunctionName: lambdaConfig.name, Qualifier: options.version}).promise(),
readConfig = function () {
Expand Down
23 changes: 18 additions & 5 deletions src/commands/add-sqs-event-source.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,19 @@
const loadConfig = require('../util/loadconfig'),
isSQSArn = require('../util/is-sqs-arn'),
iamNameSanitize = require('../util/iam-name-sanitize'),
retry = require('oh-no-i-insist'),
aws = require('aws-sdk');
retry = require('oh-no-i-insist');

const {
IAM
} = require("@aws-sdk/client-iam");

const {
Lambda
} = require("@aws-sdk/client-lambda");

const {
SQS
} = require("@aws-sdk/client-sqs");

module.exports = function addSQSEventSource(options, logger) {
'use strict';
Expand All @@ -13,9 +24,11 @@ module.exports = function addSQSEventSource(options, logger) {
const awsDelay = Number(options['aws-delay']) || 5000,
awsRetries = Number(options['aws-retries']) || 15,
initServices = function () {
lambda = new aws.Lambda({region: lambdaConfig.region});
iam = new aws.IAM({region: lambdaConfig.region});
sqs = new aws.SQS({region: lambdaConfig.region});
lambda = new Lambda({region: lambdaConfig.region});
iam = new IAM({region: lambdaConfig.region});
sqs = new SQS({
region: lambdaConfig.region
});
},
getLambda = () => lambda.getFunctionConfiguration({FunctionName: lambdaConfig.name, Qualifier: options.version}).promise(),
readConfig = function () {
Expand Down
9 changes: 6 additions & 3 deletions src/commands/allow-alexa-skill-trigger.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
const loadConfig = require('../util/loadconfig'),
aws = require('aws-sdk');
const loadConfig = require('../util/loadconfig');

const {
Lambda
} = require("@aws-sdk/client-lambda");

module.exports = function allowAlexaSkillTrigger(options) {
'use strict';
let lambdaConfig,
lambda;
const initServices = function () {
lambda = new aws.Lambda({region: lambdaConfig.region});
lambda = new Lambda({region: lambdaConfig.region});
},
getLambda = () => lambda.getFunctionConfiguration({FunctionName: lambdaConfig.name, Qualifier: options.version}).promise(),
readConfig = function () {
Expand Down
27 changes: 23 additions & 4 deletions src/commands/create.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,23 @@ const path = require('path'),
lambdaInvocationPolicy = require('../policies/lambda-invocation-policy'),
waitUntilNotPending = require('../tasks/wait-until-not-pending'),
NullLogger = require('../util/null-logger');

const {
APIGateway
} = require("@aws-sdk/client-api-gateway");

const {
IAM
} = require("@aws-sdk/client-iam");

const {
Lambda
} = require("@aws-sdk/client-lambda");

const {
S3
} = require("@aws-sdk/client-s3");

module.exports = function create(options, optionalLogger) {
'use strict';
let roleMetadata,
Expand All @@ -48,9 +65,9 @@ module.exports = function create(options, optionalLogger) {
awsRetries = options && options['aws-retries'] && parseInt(options['aws-retries'], 10) || 15,
source = (options && options.source) || process.cwd(),
configFile = (options && options.config) || path.join(source, 'claudia.json'),
iam = loggingWrap(new aws.IAM({region: options.region}), {log: logger.logApiCall, logName: 'iam'}),
lambda = loggingWrap(new aws.Lambda({region: options.region}), {log: logger.logApiCall, logName: 'lambda'}),
s3 = loggingWrap(new aws.S3({region: options.region, signatureVersion: 'v4'}), {log: logger.logApiCall, logName: 's3'}),
iam = loggingWrap(new IAM({region: options.region}), {log: logger.logApiCall, logName: 'iam'}),
lambda = loggingWrap(new Lambda({region: options.region}), {log: logger.logApiCall, logName: 'lambda'}),
s3 = loggingWrap(new S3({region: options.region}), {log: logger.logApiCall, logName: 's3'}),
getSnsDLQTopic = function () {
const topicNameOrArn = options['dlq-sns'];
if (!topicNameOrArn) {
Expand All @@ -62,7 +79,9 @@ module.exports = function create(options, optionalLogger) {
return `arn:${awsPartition}:sns:${options.region}:${ownerAccount}:${topicNameOrArn}`;
},
apiGatewayPromise = retriableWrap(
loggingWrap(new aws.APIGateway({region: options.region}), {log: logger.logApiCall, logName: 'apigateway'}),
loggingWrap(new APIGateway({
region: options.region
}), {log: logger.logApiCall, logName: 'apigateway'}),
() => logger.logStage('rate-limited by AWS, waiting before retry')
),
policyFiles = function () {
Expand Down
26 changes: 20 additions & 6 deletions src/commands/destroy.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,21 @@
const aws = require('aws-sdk'),
loadConfig = require('../util/loadconfig'),
const loadConfig = require('../util/loadconfig'),
fsPromise = require('../util/fs-promise'),
path = require('path'),
retriableWrap = require('../util/retriable-wrap'),
destroyRole = require('../util/destroy-role');

const {
APIGateway
} = require("@aws-sdk/client-api-gateway");

const {
IAM
} = require("@aws-sdk/client-iam");

const {
Lambda
} = require("@aws-sdk/client-lambda");

module.exports = function destroy(options) {
'use strict';
let lambdaConfig, apiConfig;
Expand All @@ -14,19 +26,21 @@ module.exports = function destroy(options) {
apiConfig = config.api;
})
.then(() => {
const lambda = new aws.Lambda({ region: lambdaConfig.region });
return lambda.deleteFunction({ FunctionName: lambdaConfig.name }).promise();
const lambda = new Lambda({region: lambdaConfig.region});
return lambda.deleteFunction({ FunctionName: lambdaConfig.name });
})
.then(() => {
const apiGateway = retriableWrap(new aws.APIGateway({ region: lambdaConfig.region }));
const apiGateway = retriableWrap(new APIGateway({
region: lambdaConfig.region
}));
if (apiConfig) {
return apiGateway.deleteRestApiPromise({
restApiId: apiConfig.id
});
}
})
.then(() => {
const iam = new aws.IAM({ region: lambdaConfig.region });
const iam = new IAM({region: lambdaConfig.region});
if (lambdaConfig.role && !lambdaConfig.sharedRole) {
return destroyRole(iam, lambdaConfig.role);
}
Expand Down
10 changes: 7 additions & 3 deletions src/commands/list.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
const aws = require('aws-sdk'),
loadConfig = require('../util/loadconfig'),
const loadConfig = require('../util/loadconfig'),
listVersions = require('../tasks/list-versions');

const {
Lambda
} = require("@aws-sdk/client-lambda");

module.exports = async function list(options /*, optionalLogger*/) {
'use strict';
const header = ['#\ttime \tsize\truntime\taliases'],
Expand All @@ -21,7 +25,7 @@ module.exports = async function list(options /*, optionalLogger*/) {
);
},
config = await loadConfig(options, {lambda: {name: true, region: true}}),
lambda = new aws.Lambda({region: config.lambda.region}),
lambda = new Lambda({region: config.lambda.region}),
versionList = await listVersions(config.lambda.name, lambda, options.version);

if (!formatter) {
Expand Down
Loading