UNPKG

@amaabca/aws-lex-custom-resources

Version:
298 lines (297 loc) 16.7 kB
"use strict"; 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;