如何在无服务器框架中为多个 dynamodb 表定义 iamrolestatements 资源?

2024-01-12

我想在我的无服务器项目中使用多个 dynamodb 表。如何在 iamrolestatements 中正确定义多个资源?

我有一个例子serverless.yml

service: serverless-expense-tracker
frameworkVersion: ">=1.1.0 <2.0.0"

provider:
  name: aws
  runtime: nodejs6.10
  environment:
    EXPENSES_TABLE: "${self:service}-${opt:stage, self:provider.stage}-expenses"
    BUDGETS_TABLE: "${self:service}-${opt:stage, self:provider.stage}-budgets"

  iamRoleStatements:
    - Effect: Allow
      Action:
        - dynamodb:Query
        - dynamodb:Scan
        - dynamodb:GetItem
        - dynamodb:PutItem
        - dynamodb:UpdateItem
        - dynamodb:DeleteItem
      Resource: "arn:aws:dynamodb:${opt:region, self:provider.region}:*:table/${self:provider.environment.EXPENSES_TABLE}"
      # what is the best way to add the other DB as a resource

functions:
  create:
    handler: expenseTracker/create.create
    events:
      - http:
          path: expenses
          method: post
          cors: true

  list:
    handler: expenseTracker/list.list
    events:
      - http:
          path: expenses
          method: get
          cors: true

  get:
    handler: expenseTracker/get.get
    events:
      - http:
          path: expenses/{id}
          method: get
          cors: true

  update:
    handler: expenseTracker/update.update
    events:
      - http:
          path: expenses/{id}
          method: put
          cors: true

  delete:
    handler: expenseTracker/delete.delete
    events:
      - http:
          path: expenses/{id}
          method: delete
          cors: true

resources:
  Resources:
    DynamoDbExpenses:
      Type: 'AWS::DynamoDB::Table'
      DeletionPolicy: Retain
      Properties:
        AttributeDefinitions:
          -
            AttributeName: id
            AttributeType: S
        KeySchema:
          -
            AttributeName: id
            KeyType: HASH
        ProvisionedThroughput:
          ReadCapacityUnits: 1
          WriteCapacityUnits: 1
        TableName: ${self:provider.environment.EXPENSES_TABLE}

    DynamoDbBudgets:
      Type: 'AWS::DynamoDB::Table'
      DeletionPolicy: Retain
      Properties:
        AttributeDefinitions:
          -
            AttributeName: id
            AttributeType: S
        KeySchema:
          -
            AttributeName: id
            KeyType: HASH
        ProvisionedThroughput:
          ReadCapacityUnits: 1
          WriteCapacityUnits: 1
        TableName: ${self:provider.environment.BUDGETS_TABLE}

您可以在评论中看到有问题的区域。


我得到了它!

关键只是在该键下添加一个列表- Resource,但我还了解到,最好只使用配置表时使用的逻辑 ID。完整示例如下:

service: serverless-expense-tracker

frameworkVersion: ">=1.1.0 <2.0.0"

provider:
  name: aws
  runtime: nodejs6.10
  environment:
    EXPENSES_TABLE: { "Ref": "DynamoDbExpenses" } #DynamoDbExpenses is a logicalID also used when provisioning below
    BUDGETS_TABLE: { "Ref": "DynamoDbBudgets" }

  iamRoleStatements:
    - Effect: Allow
      Action:
        - dynamodb:DescribeTable
        - dynamodb:Query
        - dynamodb:Scan
        - dynamodb:GetItem
        - dynamodb:PutItem
        - dynamodb:UpdateItem
        - dynamodb:DeleteItem
      Resource:
        - { "Fn::GetAtt": ["DynamoDbExpenses", "Arn"] } #you will also see the logical IDs below where they are provisioned
        - { "Fn::GetAtt": ["DynamoDbBudgets", "Arn"] }
functions:
  create:
    handler: expenseTracker/create.create
    events:
      - http:
          path: expenses
          method: post
          cors: true

  createBudget:
    handler: expenseTracker/createBudget.createBudget
    events:
      - http:
          path: budgets
          method: post
          cors: true

  list:
    handler: expenseTracker/list.list
    events:
      - http:
          path: expenses
          method: get
          cors: true

  listBudgets:
    handler: expenseTracker/listBudgets.listBudgets
    events:
      - http:
          path: budgets
          method: get
          cors: true

  get:
    handler: expenseTracker/get.get
    events:
      - http:
          path: expenses/{id}
          method: get
          cors: true

  update:
    handler: expenseTracker/update.update
    events:
      - http:
          path: expenses/{id}
          method: put
          cors: true

  delete:
    handler: expenseTracker/delete.delete
    events:
      - http:
          path: expenses/{id}
          method: delete
          cors: true

resources:
  Resources:
    DynamoDbExpenses: #this is where the logicalID is defined
      Type: 'AWS::DynamoDB::Table'
      DeletionPolicy: Retain
      Properties:
        AttributeDefinitions:
          -
            AttributeName: id
            AttributeType: S
        KeySchema:
          -
            AttributeName: id
            KeyType: HASH
        ProvisionedThroughput:
          ReadCapacityUnits: 1
          WriteCapacityUnits: 1

    DynamoDbBudgets: #here too
      Type: 'AWS::DynamoDB::Table'
      DeletionPolicy: Retain
      Properties:
        AttributeDefinitions:
          -
            AttributeName: id
            AttributeType: S
        KeySchema:
          -
            AttributeName: id
            KeyType: HASH
        ProvisionedThroughput:
          ReadCapacityUnits: 1
          WriteCapacityUnits: 1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在无服务器框架中为多个 dynamodb 表定义 iamrolestatements 资源? 的相关文章

随机推荐

  • 自定义numpy的向量化运算的效率问题

    我有一个 python 函数 如下所示 def myfun x if x gt 0 return 0 else return np exp x where np is the numpy图书馆 我想在 numpy 中对函数进行向量化 所以我
  • Python HTML 编码 \xc2\xa0

    我已经为此苦苦挣扎了一段时间 我正在尝试将字符串写入 HTML 但是在清理它们后 格式出现问题 这是一个例子 paragraphs Grocery giant and household name Woolworths is battere
  • 如何创建不可选择的上下文菜单项?

    我有一个简单的上下文菜单 我想添加一个标题项到它 它无法被选择 甚至不能用鼠标光标突出显示 当我设定Enabled false 我仍然可以标记它 但感觉很愚蠢 因为它显然已被禁用并且文本是灰色的 Example 像这样 我无法标记或选择 菜
  • 从 FirebaseListAdapter 中的 onItemClick 检索 Firebase 密钥

    我有一个 Firebase DB 我正在使用push 方法将条目添加到数据库中 从而生成随机密钥作为每个条目的参考 在应用程序的一部分中 我使用 FirebaseListAdapter 将一些数据库条目填充到列表视图中 然后我正在实施set
  • 将嵌套组分配给 Azure AD 应用程序中的角色 用户和组

    我在 Azure AD 应用程序清单中配置了一些角色类型 当我将组 X 分配给角色时 我可以看到 X 中的用户已分配 现在假设组 Y 是 X 内部的组 Y 中的用户未分配 为什么 有没有办法让所有 内部 用户也被分配 Thanks 今天不行
  • 我如何强制 MediaWiki 尊重单行中断?

    默认情况下 MediaWiki 会忽略单个换行符 将它们视为单个空格 要在页面中插入新行 必须在源代码中插入两个连续的换行符 这会产生一个新段落 p 也可以插入 br 直接进入源码 如何修改 MediaWiki 解析引擎 以便源代码中的单行
  • Hibernate:集合的集合

    这是我一直遇到的一个问题 我想让 hibernate 管理一个代表集合集合的表 例如 地图中的地图 套装清单 列表地图 例如 我希望能够表示这一点 class OwningClass Long entityId Map
  • 如何正确使用matchedGeometry?

    当我使用匹配的几何视图修改器时 我总是收到警告 Multiple inserted views in matched geometry group Pair
  • 获取文件夹的树形结构

    我的数据库中的 文件夹 表中有以下文件夹 Folder1 Folder2 Folder3 Folder4 文件夹的路径 Folder1 Folder2 Folder3 Folder4 当我单击Folder3时 我必须获取路径为 Folder
  • 使用通用 List 线程安全吗

    我有一个System Collections Generic List
  • 两个张量的双点积

    我有两个张量 A是二阶张量并且B是四阶张量 我知道当计算双点积 http en wikipedia org wiki Dyadics Product of dyadic and dyadic两个张量的结果张量的秩将减少两倍 因此在我的示例中
  • 我如何知道 .NET Standard 需要哪些平台扩展?

    我跑了 NET 可移植性分析器 https marketplace visualstudio com items itemName ConnieYau NETPortabilityAnalyzer针对我想从我自己的 NET Standard
  • 将徽章添加到选项卡

    如何向选项卡添加徽章 我正在使用这个代码 protected void onCreate Bundle savedInstanceState super onCreate savedInstanceState setContentView
  • 如何更改作为参数传递的变量的值?

    如何更改 C 中作为参数传递的变量的值 我试过这个 void foo char foo int baa if baa foo ab else foo cb 并致电 char x baa foo x 1 printf s n x 但它打印ba
  • 如何在 Netbeans 平台上获取项目类型?

    有没有办法知道所选项目的类型 我想根据项目类型 如 J2SE 项目 执行一些特定操作 以下是我发现的唯一方法 public final class MyAction extends CookieAction Override public
  • 如何从 JavaScript 中的 foreach 循环中删除特定数组元素

    var fruit apple pear pear pear banana 如何从该数组中删除所有 梨 水果 我尝试了以下方法 但仍然留下一个梨 for var f in fruit if fruit f pear fruit splice
  • 动态添加边缘 visjs

    谁能帮我在这个 visjs 网络中动态添加边 实际上 我正在尝试使用拖放将节点添加到画布 但是当我单击节点并将边缘动态添加到画布上现有的另一个节点时 我需要帮助添加边缘 您可以使用 vis js 的 更新 函数动态添加节点或边 您只需传入一
  • 禁用 WebAPI 的 Windows 身份验证

    我正在使用 MVC4 应用程序并使用 WebAPI 来获取 发送我的所有数据 在控制器中 我使用 HttpClient 请求来获取数据 一切正常 我面临的问题是 当在项目中启用 Windows 身份验证时 Web API 调用将返回 401
  • 如何解决错误: getSharedPreferences(String, int) 对于 new View.OnClickListener(){} 类型未定义

    我在编码中遇到此错误 但不完全确定如何解决此问题 我已经尝试尝试解决此问题 但似乎找不到任何有效的方法 我以前做过这个 但从来没有在片段中做过 所以也许是因为这个 我正在关注exception new View OnClickListene
  • 如何在无服务器框架中为多个 dynamodb 表定义 iamrolestatements 资源?

    我想在我的无服务器项目中使用多个 dynamodb 表 如何在 iamrolestatements 中正确定义多个资源 我有一个例子serverless yml service serverless expense tracker fram