如何解决从无服务器功能中获取 SQS URL 名称?
我想获取无服务器函数的名称。这是我的代码。
我想要实现的是,我希望将 env https://sqs.us-east-1.amazonaws.com/xxxx/channels.fifo
设置为 SQS_URL
,而不是 arn channels.fifo
。我查看了 cloudformation 的 Fn::Split fucntion,但无法正确使用它在 env 上进行设置。
functions:
S3ToSqs:
handler: lambda_function.lambda_handler
role: S3ToSqsLambdaRole
memorySize: 128
timeout: 5
events:
- schedule:
name: 'S3ToSqsCronEvent'
rate: rate(1 minute)
enabled: true
environment:
SQS_URL:
Ref: sqsQueue
REGION: 'us-east-1'
resources:
Resources:
S3ToSqsLambdaRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Statement:
- Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
- events.amazonaws.com
Action:
- sts:AssumeRole
Policies:
- PolicyName: S3ToSqsRole
PolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Action:
- logs:CreateLogGroup
- logs:CreateLogStream
- logs:PutLogEvents
- sqs:DeleteMessage
- sqs:GetQueueUrl
- sqs:ChangeMessageVisibility
- sqs:SendMessageBatch
- sqs:ReceiveMessage
- sqs:SendMessage
- sqs:GetQueueAttributes
- sqs:ListQueueTags
- sqs:ListDeadLetterSourceQueues
- sqs:DeleteMessageBatch
- sqs:PurgeQueue
- sqs:DeleteQueue
- sqs:CreateQueue
- sqs:ChangeMessageVisibilityBatch
- sqs:SetQueueAttribute
- s3:GetobjectVersion
- s3:Getobject
- s3:ListBucket
Resource: "arn:aws:logs:*:*:*"
sqsQueue:
Type: "AWS::SQS::Queue"
Properties:
ContentBasedDeduplication: true
FifoQueue: true
QueueName: "channels.fifo"
#Package used from https://github.com/arabold/serverless-export-env
plugins:
- serverless-export-env
解决方法
如果您查看 SQS::Queue CloudFormation resource,您可以看到队列名称作为属性公开。
因此,您可以使用:!GetAtt sqsQueue.QueueName
或 Fn::GetAtt [sqsQueue,QueueName]
,这两者可能比您提出的解决方案(仍然有效)更容易阅读。
我能够通过替换来实现它
environment:
SQS_URL:
Ref: sqsQueue
REGION: 'us-east-1'
部分与
environment:
SQS_URL: !Select [4,!Split ["/",!Ref sqsQueue ]]
现在给我的输出是 channels.info
而不是 https://sqs.us-east-1.amazonaws.com/xxxx/channels.fifo
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。