Hejto.pl
Dodaj post

Wpisz coś do wyszukania (minimum 2 znaki)

Wpis użytkownika redve w Hydepark

Fanatyk

w Hydepark

4piorunów

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

Komentarze (12)

Fanatyk1piorunów

@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::S3::Bucket
>   Properties:
>     BucketName: my-s3-bucket-unique-name # Change this to a unique bucket name
>
> # IAM Role for Lambda Function
> LambdaExecutionRole:
>   Type: AWS::IAM::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 'arn:aws:s3:::${MyS3Bucket}/*'
>
> # Lambda Function
> MyLambdaFunction:
>   Type: AWS::Lambda::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

Fanatyk1piorunów

@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?

Fanatyk1piorunów

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

Create Amazon S3 notification configurations for Lambda on S3 bucketsI want to use an existing Amazon Simple Storage Service (Amazon S3) bucket to create an Amazon S3 notification configuration for an AWS Lambda function.Amazon Web Services, Inc.
Fanatyk1piorunów

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

Fanatyk0piorunów

>timeouty przy próbie
@redve A security groupy kolega sprawdził?

Fenomen0piorunów

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

Fenomen0piorunów

Sprawdź czy rola lambdy ma wystarczające uprawnienia

Kosmonauta0piorunów

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

Fanatyk0piorunów

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

Fanatyk0piorunów

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