def create_lambda_permissions()

in amazon_lex_bot_deploy/amazon_lex_bot_deploy.py [0:0]


def create_lambda_permissions(lex_client, lambda_endpoints, region, bot_name):
    """
    creates permissions for Lex to call the defined Lambda function
    :param lex_client: boto3 lex client
    :param lambda_endpoints: endpoint arns
    :param region: region name
    :param bot_name: bot name
    :return: None, Exception when failure
    """
    try:
        lambda_client = setup_boto3_client(region, boto3_client='lambda')

        source_account_id = setup_boto3_client(
            region, boto3_client='sts').get_caller_identity()["Account"]

        for lambda_function in lambda_endpoints:
            try:
                lambda_client.add_permission(
                    FunctionName=lambda_function,
                    StatementId="{}-intents".format(bot_name),
                    Action="lambda:invokeFunction",
                    Principal="lex.amazonaws.com",
                    SourceArn="arn:aws:lex:{}:{}:intent:*".format(
                        lex_client.meta.region_name, source_account_id))
                logger.info(
                    "created permission for Lex bot: {} to call Lambda function: {}"
                    .format(bot_name, lambda_function))

            except lambda_client.exceptions.ResourceConflictException as rce:
                if re.match(".*The statement id .* provided already exists.*",
                            str(rce)):
                    logger.debug(
                        "permission for Lex bot {} to call Lambda: {} exists.".
                        format(bot_name, lambda_function))
                pass
    except Exception as e:
        logger.error('lambda permission error: {}'.format(e))