typed-serverless
Version:
Helps you write a consistent Serverless Framework configuration in TypeScript
118 lines (117 loc) • 4.07 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildArnFnSub = exports.alarmArn = exports.stepFunctionArn = exports.sqsArn = exports.eventBusArn = exports.snsArn = exports.bucketArn = exports.lambdaArn = void 0;
/**
* Build Lambda ARN as a clouformation string expression.
* format "arn:aws:lambda:[[region]]:[[accountId]]:function:[[function]]"
* https://docs.aws.amazon.com/lambda/latest/dg/lambda-api-permissions-ref.html
*/
function lambdaArn(resourceId) {
return {
service: 'lambda',
type: 'function',
resourceId,
};
}
exports.lambdaArn = lambdaArn;
/**
* Build Bucket ARN as a clouformation string expression.
* bucket arn: "arn:aws:s3:::bucket_name"
* bucket object arn: "arn:aws:s3:::bucket_name/key_name"
* bucket path arn: "arn:aws:s3:::bucket_name/some/folder/*"
* https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-arn-format.html
*/
function bucketArn(resourceId, path) {
return {
service: 's3',
region: '',
namespace: '',
resourceId,
path,
};
}
exports.bucketArn = bucketArn;
/**
* Build SNS ARN as a clouformation string expression.
* format: "arn:aws:sns:[[region]]:[[accountId]]:[[topicName]]"
* @link https://docs.aws.amazon.com/step-functions/latest/dg/sns-iam.html
*/
function snsArn(resourceId) {
return {
service: 'sns',
resourceId,
};
}
exports.snsArn = snsArn;
/**
* Build EventBus ARN as a clouformation string expression.
* format: "arn:aws:events:[[region]]:[[accountId]]:event-bus:[[queueName]]"
* @link https://docs.aws.amazon.com/step-functions/latest/dg/eventbridge-iam.html
*/
function eventBusArn(resourceId) {
return {
service: 'events',
type: 'event-bus',
typeToResourceSeparator: '/',
resourceId,
};
}
exports.eventBusArn = eventBusArn;
/**
* Build SQS ARN as a clouformation string expression.
* format: "arn:aws:sqs:[[region]]:[[accountId]]:[[queueName]]"
* @link https://docs.aws.amazon.com/step-functions/latest/dg/sqs-iam.html
*/
function sqsArn(resourceId) {
return {
service: 'sqs',
resourceId,
};
}
exports.sqsArn = sqsArn;
/**
* Build StepFunction ARN as a clouformation string expression.
* format: "arn:aws:states:[[region]]:[[accountId]]:stateMachine:[[stateMachineName]]"
* @link https://docs.aws.amazon.com/step-functions/latest/dg/stepfunctions-iam.html
* @deprecated Prefer #arn - AWS Step Function automatically adds a name suffix, because of that this function will not be able to generate correct arn
*/
function stepFunctionArn(resourceId) {
return {
service: 'states',
type: 'stateMachine',
resourceId,
};
}
exports.stepFunctionArn = stepFunctionArn;
/**
* Build Alarm ARN as a clouformation string expression.
* format: "arn:aws:cloudwatch:[[region]]:[[accountId]]:alarm:[[alarmName]]"
* @link https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html
*/
function alarmArn(resourceId) {
return {
service: 'cloudwatch',
type: 'alarm',
resourceId,
};
}
exports.alarmArn = alarmArn;
/**
* Build an ARN as a clouformation string expression.
* format: "arn:aws:[[service]]:[[region]]:[[type]]:[[id]][[path]]"
* type and path are optional
* @example "arn:aws:states:eu-west-1:stateMachine:MyStateMachineName"
* https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html
*/
function buildArnFnSub({ partition, service, region = '${AWS::Region}', namespace = '${AWS::AccountId}', type, resourceId, path, typeToResourceSeparator = ':', }) {
const arn = ['arn', partition || 'aws', service, region || '', namespace || '', type]
.filter((x) => typeof x !== 'undefined')
.join(':') +
typeToResourceSeparator +
resourceId +
(path || '');
if (path && path[0] !== '/')
throw new Error("Arn path should always starts with '/'");
return { 'Fn::Sub': arn };
}
exports.buildArnFnSub = buildArnFnSub;