销毁通过 Serverless 创建的资源而不销毁 Lambda 端点

2023-12-21

我在 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}}

问题是...如果我这样做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}}

The 无服务器框架文档 https://serverless.com/framework/docs/providers/aws/cli-reference/remove/说以下关于sls remove:

The sls remove命令将删除已部署的服务,定义在 您当前的工作目录,来自提供商。

So 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/ https://virtualbonzo.com/2017/12/11/did-you-manually-delete-a-resource-created-by-aws-cloudformation/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

销毁通过 Serverless 创建的资源而不销毁 Lambda 端点 的相关文章

  • 初始化Object中的空字符串?

    有人使用以下方法来初始化 NSstring NSString astring NSString alloc init 我想知道为什么不直接使用 NSString atring nil or NSString astring 没有semant
  • 通知管道右侧左侧故障?

    我越来越喜欢在 shell 脚本中的函数之间使用类似于生成器的模式 像这样的事情 parse commands da cmd file process commands 然而 这种模式的基本问题是 如果 parse command 遇到错误
  • Aurelia - click.delegate 错误 - 说该函数不是函数

    Novice 我有一个视图模型 它有一个简单地切换值的函数 import autoinject from aurelia framework import bindable from aurelia templating import Lo
  • Mercurial:移植、记录、qrecord、搁置、移植、dirstate、队列

    我是 Mercurial 的新手 并且仍处于评估过程中 因此这四个概念对我来说有点令人困惑 有些被认为相当于 Git 的 Staging Index 概念 有些甚至比 Git 的 Staging 更好 四个命令怎么做hg graft hg
  • Android:列“_id”不存在

    我收到这个错误 IllegalArgumentException 列 id 不存在 当使用SimpleCursorAdapter从我的数据库中检索 该表确实有这个 id柱子 注意到这是一个常见问题 我尝试根据网上的一些解决方案来解决它 但它
  • 将二进制长字符串转换为十六进制 C#

    我正在寻找一种将长二进制字符串转换为十六进制字符串的方法 二进制字符串看起来像这样 0110011010010111001001110101011100110100001101101000011001010110001101101011 我
  • 如何找到 NuGet 包安装的可执行文件?

    我的项目需要打包为zip文件进行部署 我想在构建后步骤中创建此 zip 文件 为了实现这一点 我通过 NuGet 安装了 7 Zip 命令行包 该包提供了一个可执行文件 我想在构建后步骤中调用它 我知道我可以通过提供已安装软件包的路径来调用
  • android-如何在谷歌地图上将标记的位置显示为地址

    我已经尝试过 commonsware googlemapsv2 教程 特别是在地图上拖动标记 但现在另一个问题困扰着我 问题是如何将标记的当前位置显示为地图下方或上方的地址 字符串 这是我使用的代码 public class MainAct
  • 将redis数据移至MySQL的更快方法

    我们拥有庞大的购物和产品交易系统 我们在 MySQL 方面遇到了很多问题 因此经过几次研发后 我们计划使用 Redis 并开始将 Redis 集成到我们的系统中 继之前直接访问数据库之后 现在我们已经移动了Redis系统 用户购物车详情 关
  • Android 中带有无尽列表视图滚动的 AsyncTask

    我正在创建一个应用程序 其中我需要有无限的滚动列表视图 我不想在我的应用程序中使用任何库 我在网上看到了一些有助于实现此类列表视图的示例 但我的疑问是 当我的数据来自服务器并在异步任务中进行解析时 如何才能拥有无尽的列表视图 如何从滚动异步
  • 在网络托管上发布后,php 会话无法正常工作

    我的网站在本地主机上运行良好 但是一旦我将其部署到我的托管服务 会话就会停止工作
  • 在启动屏幕中执行代码已更新

    在原始启动屏幕中执行代码 https stackoverflow com questions 27642016 execute code in launch screen 现在默认的LaunchScreenXcode 项目中的文件已更改为
  • 获取线段上最接近另一个点的点[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我想找到线段AB上最接近另一个点P的点 我的想法是 Get a1 and b1由直线公式y1 a1x b1 使用 A 点
  • 如何在reactJS中将一个页面重定向到另一个页面?

    App js 这是按钮点击事件处理 this handleClick this handleClick bind this handleClick e debugger e preventDefault this context route
  • 将 firebase 消息传递添加到 flutter android 项目时出现依赖错误

    我已将 firebase 消息传递添加到我的 Flutter 项目中 在 iOS 上运行良好 在 Android 上运行时出现错误 Android dependency androidx localbroadcastmanager loca
  • 生成签名和加密的 JWT

    我正在尝试使用生成签名和加密的 JWT 令牌雨云智威汤逊 http connect2id com products nimbus jose jwt private void generateToken throws JOSEExceptio
  • Nodejs Express css和js未加载

    我在nodejs上使用express 我加载的 html 文件没有获取 java 脚本和 css 文件 索引 html
  • 如何在 Swift 中将所有 iOS 设备的标签水平居中

    我不知道如何使标签在图像视图中水平居中 标签说 You ve been here What would you rate us 我想要What would you rate us属于 You ve been here 我试图完成此操作的方法
  • Google Apps 脚本 - 脚本之间的通信

    Hi我的问题如下 我想创建一个小网页 在该网页上可以在 Google 日历中创建事件 但有一些限制 就我而言 我的室友可以编辑此日历来预订洗衣机 该预订不能重叠 而且我们所有人的使用天数都是有限的 我创造了私人日历 我已经创建了验证请求的脚
  • 独立值不会出现在 moxy - jaxb 生成的 xml 中

    我有一个使用 jaxb 的 moxy 实现生成的 xml 文件 但是独立值不会出现在 xml 文档中 Note 我是EclipseLink JAXB MOXy http www eclipse org eclipselink moxy ph

随机推荐