# AWS-资源
如果您使用AWS作为您的服务的提供者,那么所有资源都是AWS Lambda在您的服务中所依赖的其他AWS基础设施资源,比如AWS DynamoDB或AWS S3。
使用Serverless Framework,您可以在serverless.yml中定义所需的基础结构资源,并轻松部署它们。
# 配置
使用aws提供程序通过 serverless.yml 部署到的每个阶段都是一个AWS CloudFormation堆栈。 这里定义了AWS Lambda函数及其事件配置,以及如何部署它们。当您添加资源时,这些资源将在 serverless deploy 时添加到CloudFormation堆栈中。
在名为resources的属性中定义AWS资源。这个属性中的内容是原始的CloudFormation模板语法,在YAML中,如下所示:
# serverless.yml
service: usersCrud
provider: aws
functions:
resources: # CloudFormation模板语法
Resources:
usersTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: usersTable
AttributeDefinitions:
- AttributeName: email
AttributeType: S
KeySchema:
- AttributeName: email
KeyType: HASH
ProvisionedThroughput:
ReadCapacityUnits: 1
WriteCapacityUnits: 1
您可以将任何类型的资源附加到您的CloudFormation堆栈中。你可以添加Resources,Outputs。您还可以为资源模板中的敏感数据或可重用配置使用Serverless变量。
注意:通过配置resources.Resources,提供资源。资源可能会意外覆盖框架生成的资源。要有意扩展此类资源,请使用resources.extensions。
# AWS CloudFormation资源参考
为了在部署的CloudFormation模板中具有一致的命名,我们使用标准模式:
{Function Name}{Cloud Formation Resource Type}{Resource Name}{SequentialID, instanceId or Random String}
- Function Name - 当函数名更改时,应该重新创建资源,这是可选的。这些资源也称为函数绑定
- Cloud Formation Resource Type - 例如,S3Bucket
- Resource Name - 特定资源的标识符,例如为S3存储桶配置的存储桶名称。
- SequentialID, instanceId or Random String - 对于一些资源,我们需要添加可选的序列ID,Serverless instanceId(可通过$ {sls:instanceId}访问)或随机字符串来标识它们
Serverless 部署的所有资源名称都必须遵循此命名方案。唯一的例外(出于向后兼容的原因)是用于上传工件的S3 Bucket,以便可以将它们部署到您的函数中。
在本指南中,我们还使用了术语normalizedName或类似的术语。这意味着删除资源名称中不允许的字符,例如特殊字符。
提示:如果您不确定如何命名资源,您想从自定义资源中引用它,则可以执行 serverless package 命令。这将在 .serverless 文件夹中为您的服务创建CloudFormation模板(它名为cloudformation-template-update-stack.json)。 只需打开文件并检查生成的资源名称即可。
# 覆盖AWS CloudFormation资源
您可以覆盖特定的CloudFormation资源以应用您自己的选项(将所有此类扩展名放在 resources.extensions 部分中)。 例如,如果您要将AWS :: Logs :: LogGroup保留时间设置为30天,请使用上表的名称模板覆盖它。
覆盖基本资源时,当涉及 normalizedFunctionName 时,要记住两点:
- 它应该以大写字母开头
- -将被改为Dash,_将被改为Underscore
下面是一个例子:
functions:
write-post:
handler: handler.writePost
events:
- http:
method: post
path: ${self:service}/api/posts/new
cors: true
resources:
extensions:
WriteDashPostLogGroup:
Properties:
RetentionInDays: '30'
扩展逻辑的定义方式如下:
资源属性 | 操作 |
---|---|
CreationPolicy | 设置为扩展值(如果存在) |
DeletionPolicy | 设置为扩展值(如果存在) |
DependsOn | 合并。 扩展值将添加到资源的DependsOn列表中 |
Metadata | 合并。如果资源中存在同名元数据键,则将用扩展值替换该值 |
Properties | 合并。如果资源中存在同名属性,则将用扩展值替换该值 |
UpdatePolicy | 如果存在,设置为扩展值 |
UpdateReplacePolicy | 如果存在,设置为扩展值 |
other | 不支持。 如果您尝试扩展不受支持的属性,将引发错误 |
使用 resources.extensions 进行扩展仅适用于CloudFormation模板的 Resources 部分。