@amaabca/aws-lex-custom-resources
Version:
AWS Lex infrastructure as code via the CDK
298 lines (297 loc) • 16.7 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CustomResourcesStack = void 0;
const cdk = __importStar(require("@aws-cdk/core"));
const custom_resource_base_stack_1 = require("./custom-resource-base-stack");
const aws_iam_1 = require("@aws-cdk/aws-iam");
const custom_resource_data_types_1 = require("./custom-resource-data-types");
const aws_lambda_1 = require("@aws-cdk/aws-lambda");
class CustomResourcesStack extends cdk.Stack {
constructor(scope, id, props) {
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
super(scope, id, props);
const handlerEnvConfig = {
RETRIES: "40",
WAIT_TIME: "2000"
};
if ((_a = props.v1) === null || _a === void 0 ? void 0 : _a.bot) {
new custom_resource_base_stack_1.CustomResourceBaseStack(this, props.v1.bot.stackName || 'LexBotCustomResourcesStack', props.env, {
exportName: props.v1.bot.exportName || "lexBotProviderServiceToken",
handler: {
folder: props.v1.bot.folder || `${__dirname}/../../v1/handlers/lex-bot`,
handlerName: props.v1.bot.handlerName || "index.handler",
timeout: props.v1.bot.timeout || 120,
environment: props.v1.bot.environment || handlerEnvConfig,
runtime: props.v1.bot.runtime || aws_lambda_1.Runtime.NODEJS_14_X
},
role: {
parentResource: ((_b = props.v1.bot.role) === null || _b === void 0 ? void 0 : _b.parentResource) || "lex",
childResource: ((_c = props.v1.bot.role) === null || _c === void 0 ? void 0 : _c.childResource) || "bot",
actions: ((_d = props.v1.bot.role) === null || _d === void 0 ? void 0 : _d.actions) || ["lex:PutBot", "lex:DeleteBot", "lex:GetBot"]
}
});
}
if ((_e = props.v1) === null || _e === void 0 ? void 0 : _e.intent) {
new custom_resource_base_stack_1.CustomResourceBaseStack(this, props.v1.intent.stackName || 'LexIntentCustomResourcesStack', props.env, {
exportName: props.v1.intent.exportName || "lexIntentProviderServiceToken",
handler: {
folder: props.v1.intent.folder || `${__dirname}/../../v1/handlers/lex-intent`,
handlerName: props.v1.intent.handlerName || "index.handler",
timeout: props.v1.intent.timeout || 120,
environment: props.v1.intent.environment || handlerEnvConfig,
runtime: props.v1.intent.runtime || aws_lambda_1.Runtime.NODEJS_14_X
},
role: {
parentResource: ((_f = props.v1.intent.role) === null || _f === void 0 ? void 0 : _f.parentResource) || "lex",
childResource: ((_g = props.v1.intent.role) === null || _g === void 0 ? void 0 : _g.childResource) || "intent",
actions: ((_h = props.v1.intent.role) === null || _h === void 0 ? void 0 : _h.actions) || ["lex:PutIntent", "lex:DeleteIntent", "lex:GetIntent"]
}
});
}
if ((_j = props.v1) === null || _j === void 0 ? void 0 : _j.slotType) {
new custom_resource_base_stack_1.CustomResourceBaseStack(this, props.v1.slotType.stackName || 'LexSlotTypeCustomResourcesStack', props.env, {
exportName: props.v1.slotType.exportName || "lexSlotTypeProviderServiceToken",
handler: {
folder: props.v1.slotType.folder || `${__dirname}/../../v1/handlers/lex-slot-type`,
handlerName: props.v1.slotType.handlerName || "index.handler",
timeout: props.v1.slotType.timeout || 120,
environment: props.v1.slotType.environment || handlerEnvConfig,
runtime: props.v1.slotType.runtime || aws_lambda_1.Runtime.NODEJS_14_X
},
role: {
parentResource: ((_k = props.v1.slotType.role) === null || _k === void 0 ? void 0 : _k.parentResource) || "lex",
childResource: ((_l = props.v1.slotType.role) === null || _l === void 0 ? void 0 : _l.childResource) || "slottype",
actions: ((_m = props.v1.slotType.role) === null || _m === void 0 ? void 0 : _m.actions) || ["lex:GetSlotType", "lex:PutSlotType", "lex:DeleteSlotType"]
}
});
}
if (props.v2) {
//V2 Role here
const handlerRole = new aws_iam_1.Role(this, `v2LexCustomLambdaRole`, {
assumedBy: new aws_iam_1.ServicePrincipal('lambda.amazonaws.com').grantPrincipal
});
handlerRole.addManagedPolicy(aws_iam_1.ManagedPolicy.fromAwsManagedPolicyName("service-role/AWSLambdaBasicExecutionRole"));
handlerRole.addToPolicy(new aws_iam_1.PolicyStatement({
actions: [
"lex:DescribeSlot",
"lex:ListSlotTypes",
"lex:UpdateSlot",
"lex:DescribeBotChannel",
"lex:DescribeIntent",
"lex:UpdateBotAlias",
"lex:DescribeResourcePolicy",
"lex:DescribeSlotType",
"lex:DeleteBotVersion",
"lex:CreateResourcePolicy",
"lex:DescribeBot",
"lex:UpdateBotLocale",
"iam:PassRole",
"lex:ListBotAliases",
"lex:DescribeBotAlias",
"lex:CreateBotLocale",
"lex:DeleteIntent",
"lex:ListBotLocales",
"lex:UpdateSlotType",
"lex:BuildBotLocale",
"lex:ListBotChannels",
"lex:CreateBot",
"lex:DeleteBotAlias",
"lex:CreateIntent",
"lex:ListBotVersions",
"lex:TagResource",
"lex:DescribeBotLocale",
"lex:DeleteBot",
"lex:CreateBotAlias",
"lex:CreateSlotType",
"lex:ListTagsForResource",
"lex:ListIntents",
"lex:DeleteBotLocale",
"lex:UpdateExport",
"lex:UpdateResourcePolicy",
"lex:DeleteBotChannel",
"lex:CreateSlot",
"lex:DeleteSlot",
"lex:UpdateBot",
"lex:CreateBotChannel",
"lex:DeleteSlotType",
"lex:CreateBotVersion",
"lex:DescribeBotVersion",
"lex:UpdateIntent",
"lex:UntagResource",
"lex:ListSlots",
"lex:DeleteResourcePolicy",
"lex:ListBots"
],
resources: [
`arn:aws:lex:${props.env.region}:${props.env.account}:*`
]
}));
handlerRole.addToPolicy(new aws_iam_1.PolicyStatement({
actions: [
"iam:PassRole"
],
resources: [`arn:aws:iam::${props.env.account}:role/*`]
}));
new cdk.CfnOutput(this, 'LexV2Role', {
value: handlerRole.roleArn,
exportName: props.v2.roleOutput || "LexV2Role"
});
if (props.v2.bot) {
new custom_resource_base_stack_1.CustomResourceBaseStack(this, props.v2.bot.stackName || 'v2LexBotCustomResourcesStack', props.env, {
exportName: props.v2.bot.exportName || "v2LexBotProviderServiceToken",
handler: {
folder: props.v2.bot.folder || `${__dirname}/../../v2/handlers/lex-bot`,
handlerName: props.v2.bot.handlerName || "handler",
entry: "index.js",
timeout: props.v2.bot.timeout || 120,
environment: props.v2.bot.environment || handlerEnvConfig,
runtime: props.v2.bot.runtime || aws_lambda_1.Runtime.NODEJS_14_X
},
role: {
customRole: handlerRole
},
type: custom_resource_data_types_1.BotType.V2
});
}
if (props.v2.intent) {
new custom_resource_base_stack_1.CustomResourceBaseStack(this, props.v2.intent.stackName || 'v2LexIntentCustomResourcesStack', props.env, {
exportName: props.v2.intent.exportName || "v2LexIntentProviderServiceToken",
handler: {
folder: props.v2.intent.folder || `${__dirname}/../../v2/handlers/lex-intent`,
handlerName: props.v2.intent.handlerName || "handler",
entry: "index.js",
timeout: props.v2.intent.timeout || 120,
environment: props.v2.intent.environment || handlerEnvConfig,
runtime: props.v2.intent.runtime || aws_lambda_1.Runtime.NODEJS_14_X
},
role: {
customRole: handlerRole
},
type: custom_resource_data_types_1.BotType.V2
});
}
if (props.v2.botLocale) {
new custom_resource_base_stack_1.CustomResourceBaseStack(this, props.v2.botLocale.stackName || 'v2LexBotLocaleCustomResourcesStack', props.env, {
exportName: props.v2.botLocale.exportName || "v2LexBotLocaleProviderServiceToken",
handler: {
folder: props.v2.botLocale.folder || `${__dirname}/../../v2/handlers/lex-bot-locale`,
handlerName: props.v2.botLocale.handlerName || "handler",
entry: "index.js",
timeout: props.v2.botLocale.timeout || 120,
environment: props.v2.botLocale.environment || handlerEnvConfig,
runtime: props.v2.botLocale.runtime || aws_lambda_1.Runtime.NODEJS_14_X
},
role: {
customRole: handlerRole
},
type: custom_resource_data_types_1.BotType.V2
});
}
if (props.v2.botVersion) {
new custom_resource_base_stack_1.CustomResourceBaseStack(this, props.v2.botVersion.stackName || 'v2LexBotVersionCustomResourcesStack', props.env, {
exportName: props.v2.botVersion.exportName || "v2LexBotVersionProviderServiceToken",
handler: {
folder: props.v2.botVersion.folder || `${__dirname}/../../v2/handlers/lex-bot-version`,
handlerName: props.v2.botVersion.handlerName || "handler",
entry: "index.js",
timeout: props.v2.botVersion.timeout || 120,
environment: props.v2.botVersion.environment || handlerEnvConfig,
runtime: props.v2.botVersion.runtime || aws_lambda_1.Runtime.NODEJS_14_X
},
role: {
customRole: handlerRole
},
type: custom_resource_data_types_1.BotType.V2
});
}
if (props.v2.slotType) {
new custom_resource_base_stack_1.CustomResourceBaseStack(this, props.v2.slotType.stackName || 'v2LexSlotTypeCustomResourcesStack', props.env, {
exportName: props.v2.slotType.exportName || "v2LexSlotTypeProviderServiceToken",
handler: {
folder: props.v2.slotType.folder || `${__dirname}/../../v2/handlers/lex-slot-type`,
handlerName: props.v2.slotType.handlerName || "handler",
entry: "index.js",
timeout: props.v2.slotType.timeout || 120,
environment: props.v2.slotType.environment || handlerEnvConfig,
runtime: props.v2.slotType.runtime || aws_lambda_1.Runtime.NODEJS_14_X
},
role: {
customRole: handlerRole
},
type: custom_resource_data_types_1.BotType.V2
});
}
if (props.v2.slot) {
new custom_resource_base_stack_1.CustomResourceBaseStack(this, props.v2.slot.stackName || 'v2LexSlotCustomResourcesStack', props.env, {
exportName: props.v2.slot.exportName || "v2LexSlotProviderServiceToken",
handler: {
folder: props.v2.slot.folder || `${__dirname}/../../v2/handlers/lex-slot`,
handlerName: props.v2.slot.handlerName || "handler",
entry: "index.js",
timeout: props.v2.slot.timeout || 120,
environment: props.v2.slot.environment || handlerEnvConfig,
runtime: props.v2.slot.runtime || aws_lambda_1.Runtime.NODEJS_14_X
},
role: {
customRole: handlerRole
},
type: custom_resource_data_types_1.BotType.V2
});
}
if (props.v2.botAlias) {
new custom_resource_base_stack_1.CustomResourceBaseStack(this, props.v2.botAlias.stackName || 'v2LexBotAliasCustomResourcesStack', props.env, {
exportName: props.v2.botAlias.exportName || "v2LexBotAliasProviderServiceToken",
handler: {
folder: props.v2.botAlias.folder || `${__dirname}/../../v2/handlers/lex-bot-alias`,
handlerName: props.v2.botAlias.handlerName || "handler",
entry: "index.js",
timeout: props.v2.botAlias.timeout || 120,
environment: props.v2.botAlias.environment || handlerEnvConfig,
runtime: props.v2.botAlias.runtime || aws_lambda_1.Runtime.NODEJS_14_X
},
role: {
customRole: handlerRole
},
type: custom_resource_data_types_1.BotType.V2
});
}
if (props.v2.intentPriority) {
new custom_resource_base_stack_1.CustomResourceBaseStack(this, props.v2.intentPriority.stackName || 'v2LexIntentPriorityCustomResourcesStack', props.env, {
exportName: props.v2.intentPriority.exportName || "v2LexBotIntentPriorityProviderServiceToken",
handler: {
folder: props.v2.intentPriority.folder || `${__dirname}/../../v2/handlers/lex-intent-priority`,
handlerName: props.v2.intentPriority.handlerName || "handler",
entry: "index.js",
timeout: props.v2.intentPriority.timeout || 120,
environment: props.v2.intentPriority.environment || handlerEnvConfig,
runtime: props.v2.intentPriority.runtime || aws_lambda_1.Runtime.NODEJS_14_X
},
role: {
customRole: handlerRole
},
type: custom_resource_data_types_1.BotType.V2
});
}
}
}
}
exports.CustomResourcesStack = CustomResourcesStack;