Od poprzedniego wtorku spędziłem 48h na zrobienie działającej lambdy na AWS


I dalej k⁎⁎wa nie działa, teraz wywala timeouty przy próbie pobrania pliku z S3

#pracbaza #zalesie #programista15k

Komentarze (12)

@na_kanapie_siedzi_len ma uprawnienia do bucketa, ale nie wiem co to są "odpowiednie" uprawnienia. W życiu nic na AWS nie konfigurowałem

@redve - ustawiasz wszystko ręcznie czy korzystasz z CloudFormation?

Poza tym w jakim języku ta Lambda?

Czy Lambda i S3 bucket są w tym samym regionie?

@redve - spróbuj stworzyć stack z CloudFormation, który masz pewność, że działa (jak na przykład stąd: https://repost.aws/knowledge-center/cloudformation-s3-notification-lambda czy ten co wkleiłem w innym komentarzu) i potem porównaj konfigurację tej działającej lambdy utworzonej przez CloudFormation z tą Twoją.

@redve - ChatGPT wysrał mi taki CloudFormation template, który wygląda na moje oko poprawnie:

AWSTemplateFormatVersion: '2010-09-09'

Description: CloudFormation template to deploy an S3 bucket and a Lambda function that can read from the bucket.


Resources:

 # S3 Bucket

 MyS3Bucket:

   Type: AWS::Bucket

   Properties:

     BucketName: my-s3-bucket-unique-name # Change this to a unique bucket name


 # IAM Role for Lambda Function

 LambdaExecutionRole:

   Type: AWS::Role

   Properties:

     RoleName: LambdaExecutionRole

     AssumeRolePolicyDocument:

       Version: '2012-10-17'

       Statement:

         - Effect: Allow

           Principal:

             Service: lambda.amazonaws.com

           Action: sts:AssumeRole

     Policies:

       - PolicyName: S3ReadPolicy

         PolicyDocument:

           Version: '2012-10-17'

           Statement:

             - Effect: Allow

               Action:

                 - s3:GetObject

               Resource: !Sub 'arns3:::${MyS3Bucket}/*'


 # Lambda Function

 MyLambdaFunction:

   Type: AWS::Function

   Properties:

     FunctionName: MyPythonLambdaFunction

     Handler: index.handler

     Role: !GetAtt LambdaExecutionRole.Arn

     Code:

       ZipFile: |

         import json

         import boto3


         def handler(event, context):

             s3 = boto3.client('s3')

             bucket_name = event['bucket']

             file_key = event['file_key']


             try:

                 response = s3.get_object(Bucket=bucket_name, Key=file_key)

                 file_content = response['Body'].read().decode('utf-8')

                 print(f"File content: {file_content}")

                 return {

                     'statusCode': 200,

                     'body': json.dumps('File read successfully!')

                 }

             except Exception as e:

                 print(e)

                 return {

                     'statusCode': 500,

                     'body': json.dumps('Error reading file from S3')

                 }

     Runtime: python3.8

     Timeout: 30


Outputs:

 S3BucketName:

   Description: "Name of the S3 bucket"

   Value: !Ref MyS3Bucket


 LambdaFunctionArn:

   Description: "ARN of the Lambda function"

   Value: !GetAtt MyLambdaFunction.Arn

Zaloguj się aby komentować