Отправить имя пользователя в AWS Lambda. Функция запускается, когда пользователь регистрируется через AWS Cognito.

Я пытаюсь написать функцию Lambda, которая создает папку в ведре s3, когда новый подтвержденный пользователь Cognito. Это позволит мне ограничить доступ этого пользователя к его папке. Я создал лямбда-функцию, которая может отображать текущих пользователей, зарегистрированных в пользовательском пуле. Я знаю, что в Cognito есть триггер события «подтверждение» и «пост-аутентификация», и я выбрал свою функцию для запуска по этому триггеру.

Но я не знаю, как создать папку, когда пользователь аутентифицируется или подтверждает это событие. На приведенном ниже снимке экрана показан мой лямбда-код.

Вот мой код для триггера пост-аутентификации, но он не работает:

from __future__ import print_function
def lambda_handler(event, context):

    # Send post authentication data to Cloudwatch logs
    print ("Authentication successful")
    print ("Trigger function =", event['triggerSource'])
    print ("User pool = us-east-1_EVPcl4p64", event['userPoolId'])
    print ("App client ID = ", event['callerContext']['clientId'])
    print ("User ID = ", event['userName'])

    # Return to Amazon Cognito
    return event

Вот код для пользователя списка. Это работает, но как теперь получить только имя пользователя и на этой основе создать папку в ведре s3?

import json
import boto3
import re
def lambda_handler(event, context):
    # TODO implement
    client = boto3.client('cognito-idp')

    response = client.list_users(
    UserPoolId='us-east-1_EVPcl4p64',
    AttributesToGet=['email']
    )
    x =  response    

    print json.dumps(x)


    print(y["email"]) 
    pattern = '^@gmail.com$'
    test_string = response
    result = re.match(pattern, test_string)

    print(response)
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')

    }

person AMAN MAKWANA    schedule 08.06.2020    source источник


Ответы (1)


Вместо этого используйте триггер PostConfirmation. Триггер пост-аутентификации срабатывает каждый раз, когда пользователь входит в систему.

Вот как вы получите адрес электронной почты:

email = event['request']['userAttributes']['email']

Вот как вы создаете «папку» S3 для этого пользователя, используя электронную почту в качестве имени папки:

s3 = boto3.client('s3')
bucket_name = 'example-bucket-name'
directory_path = f"users/{email}/"
s3.put_object(Bucket=bucket_name, Key=directory_path)
person jellycsc    schedule 08.06.2020
comment
Спасибо, что ответили на мой вопрос, не могли бы вы уточнить или уточнить его немного подробнее, так как я новичок в этой задаче и застрял на 3 дня. - person AMAN MAKWANA; 09.06.2020
comment
мой код - import json import boto3 def lambda_handler(event, context): client = boto3.client('cognito-idp') s3 = boto3.client('s3') response = client.list_users( UserPoolId='us-east-1_EVPcl4p64', AttributesToGet=['email'] email = event['request']['userAttributes']['email'] bucket_name = 'myprac' directory_path = f"users/{email}/" s3.put_object(Bucket=bucket_name, Key=directory_path) ) print(response) return { 'statusCode': 200, 'body': json.dumps('Hello from Lambda!') } - person AMAN MAKWANA; 09.06.2020
comment
{errorMessage: синтаксическая ошибка в модуле 'lambda_function': недопустимый синтаксис (lambda_function.py, строка 11), errorType: Runtime.UserCodeSyntaxError, stackTrace: [File \ /var/task/lambda_function.py \ Line 11 \ n bucket = s3. ведро (\ documenthandle \) \ n]} - person AMAN MAKWANA; 09.06.2020
comment
START RequestId: 453ede06-529a-4f3c-89aa-e127af97e165 Версия: $ LATEST [ERROR] Runtime.UserCodeSyntaxError: синтаксическая ошибка в модуле lambda_function: неверный синтаксис (lambda_function.py, строка 11) Traceback (последний вызов последний): /var/task/lambda_function.py Строка 11 bucket = s3.bucket (documenthandle) END RequestId: 453ede06-529a-4f3c-89aa-e127af97e165 REPORT RequestId: 453ede06-529a-4f3c-89aa-e127af97e165 Длительность: 1. Продолжительность: 1.00 мс Длительность: 1.00 мс Длительность мс Размер памяти: 128 МБ Максимально используемая память: 50 МБ Продолжительность инициализации: 128,27 мс - person AMAN MAKWANA; 09.06.2020
comment
Похоже, это должно быть s3.Bucket("documenthandle")? - person jellycsc; 09.06.2020
comment
Нет, не работает. Я поменял .... но не могли бы вы сказать мне, что код правильный ?? так как я пытаюсь продолжить с последних 3 дней. - person AMAN MAKWANA; 09.06.2020