要解决"AWS无服务器:SQS Lambda触发器未创建成功"的问题,需要检查一下以下几个方面:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sqs:CreateQueue",
"sqs:GetQueueUrl",
"sqs:SetQueueAttributes",
"lambda:CreateEventSourceMapping"
],
"Resource": [
"arn:aws:sqs:region:account-id:queue-name",
"arn:aws:lambda:region:account-id:function:function-name"
]
}
]
}
请确保将 "region"、"account-id"、"queue-name" 和 "function-name" 替换为实际的值。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowMySQSTrigger",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::account-id:role/lambda-execution-role"
},
"Action": "sqs:SendMessage",
"Resource": "arn:aws:sqs:region:account-id:queue-name"
}
]
}
请确保将 "region"、"account-id" 和 "queue-name" 替换为实际的值,而 "lambda-execution-role" 是您的 Lambda 函数所使用的角色的 ARN。
import boto3
def create_sqs_trigger(function_name, queue_url):
client = boto3.client('lambda')
response = client.create_event_source_mapping(
EventSourceArn=queue_url,
FunctionName=function_name,
Enabled=True,
BatchSize=1
)
return response
# 示例用法
function_name = 'your-lambda-function'
queue_url = 'your-sqs-queue-url'
response = create_sqs_trigger(function_name, queue_url)
print(response)
请确保将 "your-lambda-function" 替换为您的 Lambda 函数的名称,"your-sqs-queue-url" 替换为您的 SQS 队列的 URL。
通过检查和修复上述方面,您应该能够解决"AWS无服务器:SQS Lambda触发器未创建成功"的问题。