aws Cloud9 лямбда-импорт не удалось - PullRequest
0 голосов
/ 24 января 2020

У меня есть рабочая производственная среда с несколькими Lambda, развернутыми из моего P C с использованием AWS SAM.

Я хочу перевести свою лямбду в Cloud9 и отладить оттуда, но ...

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

Я возьму довольно простую лямбду, называемую uploaddirect, и это выглядит так:

AWSTemplateFormatVersion : '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: add docs directly from s3

Parameters:

  Environment:
    Type: String
    Default: staging
  DocumentMetadataBucketName:
    Type: String
  DocumentSourceBucketName:
    Type: String
  DocumentMetadataBucketArn:
    Type: String
  DocumentSourceBucketArn:
    Type: String

Resources:
  UploaddirectFunction:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: !Sub leopro-uploaddirect-function-${Environment}
      Handler: uploaddirect.handler
      Runtime: nodejs10.x
      Timeout: 300
      Role: !GetAtt UploaddirectExecutionRole.Arn
      Environment:
        Variables:
          DOCUMENT_METADATA_BUCKET: !Ref DocumentMetadataBucketName
          DOCUMENT_SOURCE_BUCKET: !Ref DocumentSourceBucketName
      CodeUri: .

  UploaddirectExecutionRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: !Sub leopro-uploaddirect-exec-role-${Environment}
      ManagedPolicyArns:
        - "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
      Policies:
        -
          PolicyName: !Sub leopro-uploaddirect-access-s3-${Environment}
          PolicyDocument:
            Version: "2012-10-17"
            Statement:
              -
                Effect: "Allow"
                Action:
                  - "s3:GetObject"
                  - "s3:PutObject"
                Resource: 'arn:aws:s3:::*/*'
            Statement:
              -
                Effect: "Allow"
                Action:
                  - "s3:*"
                Resource: '*'
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          -
            Effect: "Allow"
            Principal:
              Service:
                - "lambda.amazonaws.com"
            Action:
              - "sts:AssumeRole"

  UploaddirectBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: !Sub leopro-uploaddirect-dropbox-bucket-${Environment}
      NotificationConfiguration:
        LambdaConfigurations:
          -
            Event: 's3:ObjectCreated:*'
            Function: !GetAtt UploaddirectFunction.Arn

  UploaddirectBucketPolicy:
      Type: AWS::S3::BucketPolicy
      Properties:
        Bucket: !Ref UploaddirectBucket
        PolicyDocument:
          Statement:
            -
              Action:
                - "s3:GetObject"
              Effect: "Allow"
              Resource: !Sub "arn:aws:s3:::leopro-uploaddirect-dropbox-bucket-${Environment}/*"
              Principal: "*"

  InvokeFromS3Permission:
    Type: AWS::Lambda::Permission
    Properties:
      FunctionName: !GetAtt UploaddirectFunction.Arn
      Action: "lambda:InvokeFunction"
      Principal: "s3.amazonaws.com"
      SourceArn: !Join [ "", [ "arn:aws:s3:::", !Sub "leopro-uploaddirect-dropbox-bucket-${Environment}" ] ]

Я перепробовал множество вещей, включая изменение имени функции, повторное развертывание, очистку кеша, перезапуск cloud9, удаление папок ...

Есть идеи?

1 Ответ

1 голос
/ 28 января 2020

Если кто-то столкнется с этой проблемой, то я решил создать другой проект с точно такими же настройками и кодом (сравнивать, если хотите), но просто изменить имена стека, приложения, функций и политики.

Первоначальная версия этого приложения была развернута с использованием узла 8.10, который недавно был объявлен устаревшим. Может быть, это было частью проблемы.

Если это поможет вам, как этот пост, я, вероятно, сэкономил вам день продуктивности: p

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...