Бессерверный фреймворк, создающий дополнительные символы для корзины S3 из шаблона CloudFormation

#amazon-s3 #aws-lambda #yaml #amazon-cloudformation #serverless-framework

#amazon-s3 #aws-lambda #yaml #aws-cloudformation #бессерверный фреймворк

Вопрос:

Итак, я предполагаю, что, вероятно, есть прямой ответ на это (надеюсь), но я пытаюсь создать функцию AWS Lambda, которая обрабатывает файлы csv и помещает обработанные файлы в разные корзины s3 (в зависимости от того, что преобразуется и генерируется).

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

Корзина: new-process-2-dev-companyprocessedsalestotal08252-jdgsd2ljyqpx

на самом деле это должно было быть просто: companyprocessedsalestotal08252

Файл Yaml находится ниже, и я использовал ресурсы CloudFormation для создания других корзин. Как мне решить эту проблему с именованием?

 service: new-process-2

# You can pin your service to only deploy with a specific Serverless version
# Check out our docs for more details
# frameworkVersion: "=X.X.X"

resources:
  Resources:
    companyincoming08252020:
      Type: 'AWS::S3::Bucket'
      Properties: {}
    companyprocessedsalestotal08252020:
      Type: 'AWS::S3::Bucket'
      Properties: {}
    compnayprocessedwinloss08252020:
      Type: 'AWS::S3::Bucket'
      Properties: {}
    companyemployeestargetotal08252020:
      Type: 'AWS::S3::Bucket'
      Properties: {}
    companyemployeesalespivot08252020:
      Type: 'AWS::S3::Bucket'
      Properties: {}



provider:
  name: aws
  runtime: python3.8
  region: us-east-1
  profile: serverless-admin
  timeout: 120
  memorySize: 128
  iamRoleStatements:
   - Effect: "Allow"
     Action:
       - "s3:*"
     Resource: "*"


functions:
  csv-processor:
    handler: handler.featureengineering
    events:
      - s3:
          bucket: companyincoming08252020
          event: s3:ObjectCreated:*
          rules:
            - suffix: .csv

custom:
  pythonRequirements:
  dockerizePip: true




plugins:
  - serverless-python-requirements
  - serverless-s3-deploy
  

Ответ №1:

Свойство name должно быть определено для создаваемых корзин. Если это опущено, то CloudFormation сгенерирует имя для корзины:

Если вы не укажете имя, AWS CloudFormation сгенерирует уникальный идентификатор и будет использовать его в качестве имени корзины

В CFT свойство BucketName или, если оно определено в бессерверном файле, тогда это просто name

Информация о CFT здесь: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html#cfn-s3-bucket-name

Бессерверная информация здесь:https://www.serverless.com/framework/docs/providers/aws/events/s3#custom-bucket-configuration

Комментарии:

1. Кроме того, имена корзин S3 должны быть универсально уникальными (а не только уникальными в вашей учетной записи), поэтому, как правило, лучше позволить AWS «унифицировать» имя для вас.