当前位置: 首页 > 知识库问答 >
问题:

如何在serverless.yml中引用二级索引?

邹玮
2023-03-14

我非常不清楚引用或变量如何与CloudFormation一起工作。

目前,我的 serverless.yml 中的 iAmRole 如下所示:

  iamRoleStatements:
    - Effect: Allow
      Action:
        - dynamodb:DescribeTable
        - dynamodb:Query
        - dynamodb:Scan
        - dynamodb:GetItem
        - dynamodb:PutItem
        - dynamodb:UpdateItem
        - dynamodb:DeleteItem
      # Restrict our IAM role permissions to
      # the specific table for the stage
      Resource:
        - "Fn::GetAtt": [ ReportsTable, Arn ]

报告表是在另一个文件中创建的表,如下所示:

Resources:
  ReportsTable:
    Type: AWS::DynamoDB::Table
    Properties:
    ...
    LocalSecondaryIndexes:
        - IndexName: typeId-accessToken-index
          KeySchema:
          - AttributeName: typeId
            KeyType: HASH
            ...etc

我知道 Fn::GetAtt 数组中的第二个值引用了一个属性名称,但我不明白 Arn 来自哪里。它似乎是一个变量,但它没有在任何地方定义

最终,我需要添加另一个引用我创建的本地二级索引的效果、操作、资源块,但我不知道从哪里开始。

编辑:看起来 Arn 来自 dynamoDB 表返回值 (https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html)

编辑2:好的,所以我现在有权限参考文档中的格式arn:aws:dynamodb:region:account-id:table/table-name/index/*,现在正在测试。

共有2个答案

侯善
2023-03-14

参考这些文档后:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html

和这些: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/api-permissions-reference.html

我能够弄清楚引用索引表所需的格式是 arn:aws:dynamodb:region:account-id:table/table-name/index/*

此外,为了不对所有值进行硬编码(在我的情况下,因为我有几个暂存环境),您可以像这样进行连接:

        Fn::Join:
          - ''
          -
            - 'arn:aws:dynamodb:'
            - Ref: AWS::Region
            - ':'
            - Ref: AWS::AccountId
            - ':table/'
            - ${self:custom.tableName}/
            - 'index/*'

在自定义块中定义表名的位置。

葛子昂
2023-03-14

您可以使用 Cloudformation 内在函数 Sub 来创建索引 arn

!Sub '${ReportsTable.Arn}/index/*'
 类似资料:
  • 考虑以下查询: 该查询将如何在Cassandra中“在引擎盖下”执行? 高基数列索引()将如何影响其性能? Cassandra会为上述查询接触所有节点吗?为什么? 先执行哪个条件,基表partition_key还是辅助索引partition_key?Cassandra将如何将这两个结果相交?

  • SDS 的二级索引支持局部二级索引与及全局二级索引,目前这两种索引都是强一致的索引 局部二级索引 使用局部二级索引必须要定义实体组键,由一个到多个表属性组成, 索引分为Lazy,Eager和Immutable三种类别 Lazy索引 -写入时同时写入索引记录,但是不会立马删除已无效的索引记录,需要等到读取时,读到无效的索引记录再删除,写效率高而读效率较低,所以此类型索引适合写多读少的场景,不支持投影

  • 我在Dynamodb中有一个表,我试图通过命名全局二级索引来获取一个项目(使用),但我得到了错误: 我的问题是: 但后来我查看了get文档,它没有属性。所以我想也许我应该命名GSI而不是表名: 但后来我面对: 这意味着不被识别为全局表。所以我的问题是,拥有操作列表: 批量获取 批量写入 createSet 删除 得到 把 查询 扫描 更新 哪些支持GSI和LSI?此外,如果您想使用GSI检索一个特

  • 我试过这个: 我必须创建一个origin access标识和一个具有此标识的CloudFront发行版。我们可以在一个CloudFormation脚本中或使用Serverless(使用)来完成这两件事吗?

  • 我的主键是一个名为“ID”的字段 我在表中的字段“group_number”上添加了一个辅助索引 我通过二级索引进行查询,如下所示: 然而;我得到错误“ValidationException:query condition missed key schema Element:ID” DynamoDB只允许查询主键吗?我的印象是您使用“getitem”作为主键,因为如果您使用一个主键,只有一个记录可

  • 我有一个名为的couchbase bucket,其中包含将近2000个文档,我为此bucket创建了一个二级索引(idx_customer),以优化我的查询: 在couchbase查询监视器中执行时,查询命中索引。 但我认为,当从spring数据存储库播放时,它错过了索引。这主要是因为存储库中的排序和分页使我的查询在其他没有索引的查询中被翻译。 我使用此存储库中的spring数据在spring b

  • 我正在DynamoDB中创建一个表和GSI,使用以下参数,如文档所示: 是表的主键,我使用作为GSI的主键。(为了简洁起见,我删除了一些不必要的配置参数) 我正在使用以下命令查询此表: 但我一直在犯错误: "一个或多个参数值无效:条件参数类型与模式类型不匹配" 在文档中,它指定主可以是或,并且您可以在字段中设置。我正在以的形式发送,不确定这里缺少了什么。 问题是在我创建表的方式上,还是在我查询表的

  • 是否有一种方法可以使用查询dynamodb的。我找不到任何在线教程或资源。