【发布时间】:2020-12-30 13:42:30
【问题描述】:
我写了一个serverless.yml,在其中创建了3 个S3 存储桶资源。这是我必须完成的一些带回家的项目,它需要两个用于我必须处理的静态模板的存储桶和一个用于结果的存储桶。我正在定义 SQS,它成功地创建了队列,我能够从我的 lambda 向它发送消息并通过另一个 lambda 接收消息。
但是,定义 S3 存储桶资源给了我 An error occurred: S3LanguageTemplatesBucket - Bucket name should not contain uppercase characters.
我尝试对存储桶名称使用硬编码值,但没有帮助。
我的serverless.yml文件内容如下:
service: process-scores
org: osano
frameworkVersion: '2'
provider:
name: aws
runtime: nodejs12.x
profile: serverless-admin
region: us-east-1
environment:
SQS_URL: MyQueue
S3_HTML_TEMPLATES: ${self:service}-html-templates-sf68N5umh8gC8yM4
S3_LANGUAGE_TEMPLATES: ${self:service}-language-templates-gY9b7REadVPtKChV
S3_STATIC_WEBSITE: '${self:service}-static-website-pD4c7M2297pjAmST'
functions:
send:
handler: scores/producer.send
events:
- http:
path: scores
method: post
integration: lambda
cors: true
iamRoleStatements:
- Effect: Allow
Action:
- "sqs:SendMessage"
- "sqs:GetQueueUrl"
Resource:
Fn::GetAtt: [ MyQueue, Arn ]
receive:
handler: scores/consumer.receive
events:
- sqs:
arn:
Fn::GetAtt:
- MyQueue
- Arn
iamRoleStatements:
- Effect: Allow
Action:
- "s3:GetObject"
Resource:
- 'arn:aws:s3:::${self:provider.environment.S3_HTML_TEMPLATES}/*'
- 'arn:aws:s3:::${self:provider.environment.S3_LANGUAGE_TEMPLATES}/*'
- Effect: Allow
Action:
- "s3:PutObject"
Resource:
- 'arn:aws:s3:::${self:provider.environment.S3_STATIC_WEBSITE}/*'
resources:
Resources:
MyQueue:
Type: "AWS::SQS::Queue"
Properties:
QueueName: "MyQueue"
S3HTMLTemplatesBucket:
Type: "AWS::S3::Bucket"
Properties:
BucketName: '${self:provider.environment.S3_HTML_TEMPLATES}'
S3LanguageTemplatesBucket:
Type: "AWS::S3::Bucket"
Properties:
BucketName: '${self:provider.environment.S3_LANGUAGE_TEMPLATES}'
S3StaticWebsiteBucket:
Type: "AWS::S3::Bucket"
Properties:
BucketName: '${self:provider.environment.S3_STATIC_WEBSITE}'
我不知道它是否有帮助,但我还在下面提供了生成的 cloudformation 模板的链接:
【问题讨论】:
-
S3_STATIC_WEBSITE和其他环境变量的值是多少? -
self:service应该返回在文件顶部设置的 process-scores 值。然后在添加其余S3_STATIC_WEBSITE变量后应该等于process-scores-static-website-pD4c7M2297pjAmST -
哦,天哪,我真笨。我知道命名规则,但出于某种原因,我什至没有注意到名称的最后一部分有大写字母。只是改变它并重新部署。一切都很顺利。谢谢!
-
没问题。如果答案有帮助,我们将不胜感激。
标签: amazon-web-services amazon-s3 amazon-cloudformation serverless