Этот вопрос относится к лямбда-функции AWS, которая вызывается из другой AWS лямбда-функции, а затем в вызванной функции я хотел прочитать файл и записать файл обратно в S3. Но почему-то это не работает. Детали приведены ниже:
Я использовал основную AWS лямбда-функцию для вызова другой функции с этим кодом:
import json
import boto3
def lambda_handler(event, context):
invokerLam = boto3.client("lambda") # Defining an object for the lambda service
BlastFoldername = '1.047. 2020 S3C 5009 P1'
inputsForInvocation = {'BlastFoldername' : BlastFoldername }
response = invokerLam.invoke(FunctionName = 'arn:aws:lambda:us-east-
1:131394402205:function:DestinationLambda', InvocationType = 'Event',
Payload = json.dumps(inputsForInvocation))
Вызванная AWS лямбда-функция затем импортирует полезную нагрузку, чтение файла из корзины и запись того же файла в корзину со следующим кодом:
import json
import boto3
import io
import pandas as pd
def lambda_handler(event, context):
# Reading the payload
BlastFolder = event['BlastFoldername']
NewBlastFolder = BlastFolder + "_transformed"
FileName = "Collar Coordiantes 2820 S3C 5007 P1"
LocationKey1 = NewBlastFolder + "/" + FileName
#Read from the s3 Bucket with the same code
s3 = boto3.client('s3')
bucket_name = 'shivay.aws108'
file_name = 'Transformed/Blast/Collar Coordinates.xls'
file_cor = s3.get_object(Bucket = bucket_name, Key = file_name)
file_content = file_cor['Body'].read()
read_excel_data = io.BytesIO(file_content)
df = pd.read_excel(read_excel_data)
print(df)
#Writing the data frame as CSV in the same S3 bucket
csv_buffer = io.StringIO()
df.to_csv(csv_buffer)
s3_resource = boto3.resource('s3')
HoleFile_save1 = "/Transformed/WritingBackCheck.csv"
s3_path = HoleFile_save1
s3_resource.Object(bucket_name, s3_path).put(Body = csv_buffer.getvalue())
Третий шаг записи файла в s3 не работает. Однако чтение файла и создание фрейма данных работают. Эта функция работает в других обычных AWS лямбда-функциях, где лямбда-функция запускается триггером создания объекта, но когда она запускается из другой лямбда-функции, она не записывает файл в s3.
Для справки: роль для первой функции:
{
"permissionsBoundary": {},
"roleName": "trackore-lambda",
"policies": [
{
"document": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
}
]
},
"name": "AmazonS3FullAccess",
"id": "ANPAIFIR6V6BVTRAHWINE",
"type": "managed",
"arn": "arn:aws:iam::aws:policy/AmazonS3FullAccess"
},
{
"document": {
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"autoscaling:Describe*",
"cloudwatch:*",
"logs:*",
"sns:*",
"iam:GetPolicy",
"iam:GetPolicyVersion",
"iam:GetRole"
],
"Effect": "Allow",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "iam:CreateServiceLinkedRole",
"Resource": "arn:aws:iam::*:role/aws-service-role/events.amazonaws.com/AWSServiceRoleForCloudWatchEvents*",
"Condition": {
"StringLike": {
"iam:AWSServiceName": "events.amazonaws.com"
}
}
}
]
},
"name": "CloudWatchFullAccess",
"id": "ANPAIKEABORKUXN6DEAZU",
"type": "managed",
"arn": "arn:aws:iam::aws:policy/CloudWatchFullAccess"
},
{
"document": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*"
}
]
},
"name": "AWSLambdaBasicExecutionRole",
"id": "ANPAJNCQGXC42545SKXIK",
"type": "managed",
"arn": "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
},
{
"document": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"lambda:InvokeFunction"
],
"Resource": [
"*"
]
}
]
},
"name": "AWSLambdaRole",
"id": "ANPAJX4DPCRGTC4NFDUXI",
"type": "managed",
"arn": "arn:aws:iam::aws:policy/service-role/AWSLambdaRole"
}
],
"trustedEntities": [
"lambda.amazonaws.com"
]
}
, а роль для второй функции:
{
"permissionsBoundary": {},
"roleName": "trackore-lambda",
"policies": [
{
"document": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
}
]
},
"name": "AmazonS3FullAccess",
"id": "ANPAIFIR6V6BVTRAHWINE",
"type": "managed",
"arn": "arn:aws:iam::aws:policy/AmazonS3FullAccess"
},
{
"document": {
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"autoscaling:Describe*",
"cloudwatch:*",
"logs:*",
"sns:*",
"iam:GetPolicy",
"iam:GetPolicyVersion",
"iam:GetRole"
],
"Effect": "Allow",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "iam:CreateServiceLinkedRole",
"Resource": "arn:aws:iam::*:role/aws-service-role/events.amazonaws.com/AWSServiceRoleForCloudWatchEvents*",
"Condition": {
"StringLike": {
"iam:AWSServiceName": "events.amazonaws.com"
}
}
}
]
},
"name": "CloudWatchFullAccess",
"id": "ANPAIKEABORKUXN6DEAZU",
"type": "managed",
"arn": "arn:aws:iam::aws:policy/CloudWatchFullAccess"
},
{
"document": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*"
}
]
},
"name": "AWSLambdaBasicExecutionRole",
"id": "ANPAJNCQGXC42545SKXIK",
"type": "managed",
"arn": "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
},
{
"document": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"lambda:InvokeFunction"
],
"Resource": [
"*"
]
}
]
},
"name": "AWSLambdaRole",
"id": "ANPAJX4DPCRGTC4NFDUXI",
"type": "managed",
"arn": "arn:aws:iam::aws:policy/service-role/AWSLambdaRole"
}
],
"trustedEntities": [
"lambda.amazonaws.com"
]
}
Пожалуйста, помогите.
Спасибо