Модель бессерверного приложения AWS: создание события S3 в Lambda

Я хотел бы использовать модель бессерверного приложения (SAM) и CloudFormation для создания простой лямбда-функции, которая запускается при создании объекта в корзине S3 (например, thescore-cloudfront-trial). Как включить триггер из сегмента S3 в лямбда-функцию? Ниже мой код python3 boto3.

    region = 'us-east-1'
    import boto3

    test_lambda_template = {
        'AWSTemplateFormatVersion': '2010-09-09',
        'Transform': 'AWS::Serverless-2016-10-31',
        'Resources': {
            'CopyS3RajivCloudF': {
                'Type': 'AWS::Serverless::Function',

                'Properties': {
                    "CodeUri": 's3://my-tmp/CopyS3Lambda',
                    "Handler": 'lambda.handler',
                    "Runtime": 'python3.6',
                    "Timeout": 300,
                    "Role": 'my_existing_role_arn'
                },
                'Events': {
                    'Type': 'S3',
                    'Properties': {
                        "Bucket": "thescore-cloudfront-trial",
                        "Events": 's3:ObjectCreated:*'

                    }

                }
            },
            'SrcBucket': {
                "Type": "AWS::S3::Bucket",
                "Properties": {
                    "BucketName": 'thescore-cloudfront-trial',
                }
            }

        }

    }

    conf = config.get_aws_config('development')
    client = aws.client(conf, 'cloudformation', region_name=region)
    response = client.create_change_set(
         StackName='RajivTestStack',
         TemplateBody=json.dumps(test_lambda_template),
         Capabilities=['CAPABILITY_IAM'],
         ChangeSetName='a',
         Description='Rajiv ChangeSet Description',
         ChangeSetType='CREATE'
     )

    response = client.execute_change_set(
        ChangeSetName='a',
        StackName='RajivTestStack',
    )

person RAbraham    schedule 03.05.2017    source источник
comment
Думали ли вы прочитать документы?   -  person stdunbar    schedule 04.05.2017
comment
1. Добавьте триггер в корзину S3 с помощью консоли AWS. 2. Используйте boto3, чтобы добавить свои события: boto3 .readthedocs.io / en / latest / reference / services /   -  person mootmoot    schedule 04.05.2017
comment
@mootmoot: у меня уже есть скрипты python, делающие то, что вы перечислили :). Я хочу перейти на SAM.   -  person RAbraham    schedule 05.05.2017


Ответы (1)


Я разобрался с оговорками

Предостережение 1. Уведомление о триггере будет отображаться в консоли S3, но не в консоли Lambda. Мои существующие сценарии развертывания python с использованием клиентов boto3 s3 и лямбда (которые я хочу заменить) показывают уведомление на обеих консолях.

Предостережение 2: для мониторинга я вижу свой лямбда-триггер только тогда, когда переключаюсь на просмотр псевдонима лямбда. Но я не указал псевдоним для своей лямбды. Поэтому я не знаю, почему я не вижу его в представлении без псевдонима (просто вижу ПОСЛЕДНЮЮ версию)

Мне пришлось изменить ключ Events следующим образом:

'Events': {
   'RajivCopyEvent': {
      'Type': 'S3',
      'Properties': {
         "Bucket": {"Ref": "SrcBucket"},
         "Events": "s3:ObjectCreated:*"

      }
    }

}
person RAbraham    schedule 04.05.2017