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

Sprawdź czy rola lambdy ma wystarczające uprawnienia

redve

@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

Wywala taki sam timeout jak chce jakis http request wyslac, wiec strzelam na problem z ustawieniami sieci

Amhon

@redve to na lambdzie masz jakieś SG? Przecież bucket to zasób publicznie dostępny. Kwestia właśnie IAM.

FriendGatherArena

@na_kanapie_siedzi_len jak by nie miała uprawnien to by wywalała błąd o uprawnieniach, a nie timeout

na_kanapie_siedzi_len

I czy plik który chcesz pobrać nie jest przypadkiem w glacier

LondoMollari

timeouty przy próbie

@redve A security groupy kolega sprawdził?

koszotorobur

@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

@koszotorobur ręcznie, python, oba w tym samym regionie

koszotorobur

@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ą.

koszotorobur

@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

koszotorobur

@redve - i jak tam z tą Lambdą?

Zaloguj się aby komentować