CloudFormation - 为DynamoDB创建表启用TTL

时间:2017-03-19 17:47:26

标签: amazon-web-services amazon-dynamodb amazon-cloudformation

我想通过CloudFormation为我新创建的表启用TTL。我尝试过以下无效:

{
  "Resources" : {
    "mytable" : {
      "Type" : "AWS::DynamoDB::Table",
      "Properties" : {
        "TableName" : "my_table",
        "ProvisionedThroughput" : {"ReadCapacityUnits" : 1, "WriteCapacityUnits" : 5},
        "KeySchema" :
        [
          {"AttributeName" : "user_email", "KeyType" : "HASH"},
          {"AttributeName" : "datetime", "KeyType" : "RANGE"}
        ],
        "AttributeDefinitions": [
          {"AttributeName" : "user_email", "AttributeType" : "S"},
          {"AttributeName" : "datetime", "AttributeType" : "S"}
        ],
        "TimeToLiveDescription": {
          "AttributeName": "expire_at", 
          "TimeToLiveStatus": "ENABLED"
        }
      }
    }
}

我使用了TimeToLiveDescription,它是从this doc获得的。

尝试创建堆栈给了我以下错误:

Encountered unsupported property TimeToLiveDescription

4 个答案:

答案 0 :(得分:9)

现在,CloudFormation的DynamoDB TTL支持已经存在。参见:

http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-dynamodb-table-timetolivespecification.html

示例:

{
  "TableName": "MyTable",
  "AttributeDefinitions": [
    {
      "AttributeName": "Uid",
      "AttributeType": "S"
    }
  ],
  "KeySchema": [
    {
      "AttributeName": "Uid",
      "KeyType": "HASH"
    }
  ],
  "ProvisionedThroughput": {
    "ReadCapacityUnits": "1",
    "WriteCapacityUnits": "1"
  },
  "TimeToLiveSpecification": {
    "AttributeName": "TimeToLive",
    "Enabled": "TRUE"
  }
}

答案 1 :(得分:2)

AWS Dynamo DB的TTL是一项新功能(于2017年2月推出),就像Jared在回答中提到的那样,它似乎还没有得到AWS Cloudformation的支持。与此同时,你可以做的 - 如果你在同一个cloudformation模板中启动一个新的EC2实例 - 是执行(在UserData下)你链接到的aws cli命令,会更新TTL {{1} },引用你的dynamo数据库资源(mytable)。 (还要确保实例使用具有必要策略的IAM角色才能更新此资源)。

答案 2 :(得分:2)

为了完整起见,下面是一个示例CloudFromation YAML,它创建了一个启用了TTL的表

AWSTemplateFormatVersion: '2010-09-09'
Description: The database for my Service

Resources:
  BatchDataTable:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: "MyDynamoTable"
      BillingMode: PAY_PER_REQUEST
      AttributeDefinitions:
        - AttributeName: Id
          AttributeType: S
        - AttributeName: SortKey
          AttributeType: S
      KeySchema: 
        - AttributeName: Id
          KeyType: "HASH"
        - AttributeName: SortKey
          KeyType: "RANGE"           
      TimeToLiveSpecification:
        AttributeName: TimeToLive
        Enabled: true

现在,如果将带有名为“ TimeToLive”的属性的项目添加到此选项卡,并将其值设置为该项目应在其到期的Unix纪元,则DynamoDB将在达到TTL时从该表中清除该项目。 / p>

答案 3 :(得分:1)

该链接是AWS CLI的一个示例。

尚未向cloudformation添加对配置DynamoDB TTL的支持。