aws-spa
Version:
A no-brainer script to deploy a single page app on AWS
60 lines (47 loc) • 1.61 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getRoleARNForBasicLambdaExectution = void 0;
var _awsServices = require("./aws-services");
var _logger = require("./logger");
const getRoleARNForBasicLambdaExectution = async (roleName, waitAfterCreate = 10000) => {
try {
_logger.logger.info(`[IAM] 🔍 looking for role ${roleName}...`);
const {
Role
} = await _awsServices.iam.getRole({
RoleName: roleName
});
_logger.logger.info(`[IAM] 👍 ${roleName} found`);
return Role?.Arn;
} catch (error) {
if (error.statusCode !== 404) {
throw error;
}
_logger.logger.info(`[IAM] ✏️ ${roleName} not found. Creating it...`);
const {
Role
} = await _awsServices.iam.createRole({
AssumeRolePolicyDocument: JSON.stringify({
Version: '2012-10-17',
Statement: [{
Effect: 'Allow',
Principal: {
Service: ['lambda.amazonaws.com', 'edgelambda.amazonaws.com']
},
Action: 'sts:AssumeRole'
}]
}),
RoleName: roleName
});
await _awsServices.iam.attachRolePolicy({
PolicyArn: 'arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole',
RoleName: roleName
});
_logger.logger.info(`[IAM] 👍 ${roleName} created`); // timeout to avoid "The role defined for the function cannot be assumed by Lambda"
await new Promise(resolve => setTimeout(resolve, waitAfterCreate));
return Role?.Arn;
}
};
exports.getRoleARNForBasicLambdaExectution = getRoleARNForBasicLambdaExectution;