我想通过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
答案 0 :(得分:9)
现在,CloudFormation的DynamoDB TTL支持已经存在。参见:
示例:
{
"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的表 p>
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的支持。