使用无服务器创建 S3 存储桶时出现“存储桶名称不应包含大写字符”错误
Getting the error `Bucket name should not contain uppercase characters` when creating S3 buckets using serverless
我写了一个 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 模板的链接:
存储桶名称中的大写字母 can't be used:
Bucket names can consist only of lowercase letters, numbers, dots (.), and hyphens (-).
因此代替:
S3_HTML_TEMPLATES: ${self:service}-html-templates-sf68N5umh8gC8yM4
S3_LANGUAGE_TEMPLATES: ${self:service}-language-templates-gY9b7REadVPtKChV
S3_STATIC_WEBSITE: '${self:service}-static-website-pD4c7M2297pjAmST'
你可以试试(只能小写字母):
S3_HTML_TEMPLATES: ${self:service}-html-templates-sf68n5umh8gc8ym4
S3_LANGUAGE_TEMPLATES: ${self:service}-language-templates-gy9b7readvptkchv
S3_STATIC_WEBSITE: '${self:service}-static-website-pd4c7m2297pjamst'
我写了一个 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 模板的链接:
存储桶名称中的大写字母 can't be used:
Bucket names can consist only of lowercase letters, numbers, dots (.), and hyphens (-).
因此代替:
S3_HTML_TEMPLATES: ${self:service}-html-templates-sf68N5umh8gC8yM4
S3_LANGUAGE_TEMPLATES: ${self:service}-language-templates-gY9b7REadVPtKChV
S3_STATIC_WEBSITE: '${self:service}-static-website-pD4c7M2297pjAmST'
你可以试试(只能小写字母):
S3_HTML_TEMPLATES: ${self:service}-html-templates-sf68n5umh8gc8ym4
S3_LANGUAGE_TEMPLATES: ${self:service}-language-templates-gy9b7readvptkchv
S3_STATIC_WEBSITE: '${self:service}-static-website-pd4c7m2297pjamst'