Jos*_*han 6 amazon-web-services aws-lambda aws-api-gateway serverless-framework serverless
我在serverless.yml文件中定义了以下资源.它非常适合为我所有不同的开发阶段创建资源.
resources:
Resources:
uploadBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: ${self:service}-${self:custom.stage}-uploads
visitsTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: ${self:custom.visitsTable}
AttributeDefinitions:
- AttributeName: userId
AttributeType: S
- AttributeName: visitId
AttributeType: S
KeySchema:
- AttributeName: userId
KeyType: HASH
- AttributeName: visitId
KeyType: RANGE
ProvisionedThroughput:
ReadCapacityUnits: ${self:custom.dynamoDbCapacityUnits.${self:custom.stage}}
WriteCapacityUnits: ${self:custom.dynamoDbCapacityUnits.${self:custom.stage}}
Run Code Online (Sandbox Code Playgroud)
问题是......如果我sls remove在删除数据库时这样做,它还会删除其他所有内容,包括lambda函数及其api网关端点,我需要保留它们,因为我已经为它们明确设置了策略. 如何告诉无服务器我只想删除数据库或S3或其他任何东西而不是其余的?
我试过的事情:
我在AWS上手动删除了,但是如果你这样做并且执行sls部署它不会再次创建数据库!所以不确定最好的方法来做到这一点......
整个Serverless.yml文件
service: mydomain-api
# Use serverless-webpack plugin to transpile ES6/ES7
plugins:
- serverless-webpack
- serverless-domain-manager
custom:
webpackIncludeModules: true
stage: ${opt:stage, self:provider.stage}
visitsTable: "${self:service}-visits-${self:custom.stage}"
domains:
prod: api.mydomain.com
staging: staging-api.mydomain.com
dev: dev-api.mydomain.com
dynamoDbCapacityUnits:
prod: 5
staging: 2
dev: 2
customDomain:
basePath: ""
domainName: ${self:custom.domains.${self:custom.stage}}
stage: "${self:custom.stage}"
certificateName: "mydomain.com"
createRoute53Record: true
provider:
name: aws
runtime: nodejs6.10
stage: prod
region: us-east-1
environment:
VISITS_TABLE: ${self:custom.visitsTable}
# 'iamRoleStatement' defines the permission policy for the Lambda function.
# In this case Lambda functions are granted with permissions to access DynamoDB.
iamRoleStatements:
- Effect: Allow
Action:
- dynamodb:DescribeTable
- dynamodb:Query
- dynamodb:Scan
- dynamodb:GetItem
- dynamodb:PutItem
- dynamodb:UpdateItem
- dynamodb:DeleteItem
Resource: "arn:aws:dynamodb:us-east-1:*:*"
functions:
create:
handler: src/visits/create.main
events:
- http:
path: visits
method: post
cors: true
authorizer: aws_iam
get:
handler: src/visits/get.main
events:
- http:
path: visits/{id}
method: get
cors: true
authorizer: aws_iam
list:
handler: src/visits/list.main
events:
- http:
path: visits
method: get
cors: true
authorizer: aws_iam
update:
handler: src/visits/update.main
events:
- http:
path: visits/{id}
method: put
cors: true
authorizer: aws_iam
delete:
handler: src/visits/delete.main
events:
- http:
path: visits/{id}
method: delete
cors: true
authorizer: aws_iam
resources:
Resources:
uploadBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: ${self:service}-${self:custom.stage}-uploads
visitsTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: ${self:custom.visitsTable}
AttributeDefinitions:
- AttributeName: userId
AttributeType: S
- AttributeName: visitId
AttributeType: S
KeySchema:
- AttributeName: userId
KeyType: HASH
- AttributeName: visitId
KeyType: RANGE
ProvisionedThroughput:
ReadCapacityUnits: ${self:custom.dynamoDbCapacityUnits.${self:custom.stage}}
WriteCapacityUnits: ${self:custom.dynamoDbCapacityUnits.${self:custom.stage}}
Run Code Online (Sandbox Code Playgroud)
dom*_*dom 10
在无服务器架构文档说大概有以下sls remove:
该
sls remove命令将从提供程序中删除在您当前工作目录中定义的已部署服务。
所以sls remove不是要走的路。只需visitsTable从您的资源中删除serverless.yaml并sls deploy再次运行。无服务器框架在底层使用 AWS CloudFormation。所以手动删除东西不是个好主意。请记住:作为 AWS CloudFormation 堆栈的一部分创建的资源必须通过堆栈更新进行管理和修改。也许这是一个很好的阅读:https : //virtualbonzo.com/2017/12/11/did-you-manually-delete-a-resource-created-by-aws-cloudformation/
对于您不想在堆栈删除时删除的资源,将 DeletionPolicy 设置为“保留”,其余资源将在您运行时删除sls remove。
resources:
Resources:
uploadBucket:
Type: AWS::S3::Bucket
DeletionPolicy: Retain
...
Run Code Online (Sandbox Code Playgroud)
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-deletionpolicy.html
| 归档时间: |
|
| 查看次数: |
4823 次 |
| 最近记录: |