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))