Wpis użytkownika redve w Hydepark
redveFanatyk
4piorunówOd 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)
@redve - i jak tam z tą Lambdą?
@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
@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ą.
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.@koszotorobur ręcznie, python, oba w tym samym regionie
>timeouty przy próbie
@redve A security groupy kolega sprawdził?
I czy plik który chcesz pobrać nie jest przypadkiem w glacier
Sprawdź czy rola lambdy ma wystarczające uprawnienia
@na_kanapie_siedzi_len jak by nie miała uprawnien to by wywalała błąd o uprawnieniach, a nie timeout
@redve to na lambdzie masz jakieś SG? Przecież bucket to zasób publicznie dostępny. Kwestia właśnie IAM.
Wywala taki sam timeout jak chce jakis http request wyslac, wiec strzelam na problem z ustawieniami sieci
@na_kanapie_siedzi_len ma uprawnienia do bucketa, ale nie wiem co to są "odpowiednie" uprawnienia. W życiu nic na AWS nie konfigurowałem