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