{"id":270,"date":"2022-12-20T18:01:17","date_gmt":"2022-12-20T09:01:17","guid":{"rendered":"https:\/\/sal-blog.com\/?p=270"},"modified":"2023-11-08T22:49:17","modified_gmt":"2023-11-08T13:49:17","slug":"%e3%80%90%e3%82%b5%e3%83%b3%e3%83%97%e3%83%abyaml%e3%81%82%e3%82%8a%e3%80%91dynamodb%e3%81%a7%e3%83%86%e3%83%bc%e3%83%96%e3%83%ab%e3%81%a8%e3%82%a4%e3%83%b3%e3%83%87%e3%83%83%e3%82%af%e3%82%b9","status":"publish","type":"post","link":"https:\/\/sal-blog.com\/%e3%80%90%e3%82%b5%e3%83%b3%e3%83%97%e3%83%abyaml%e3%81%82%e3%82%8a%e3%80%91dynamodb%e3%81%a7%e3%83%86%e3%83%bc%e3%83%96%e3%83%ab%e3%81%a8%e3%82%a4%e3%83%b3%e3%83%87%e3%83%83%e3%82%af%e3%82%b9\/","title":{"rendered":"\u3010\u30b5\u30f3\u30d7\u30ebyaml\u3042\u308a\u3011DynamoDB\u3067\u30c6\u30fc\u30d6\u30eb\u3068\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306e\u30aa\u30fc\u30c8\u30b9\u30b1\u30fc\u30eb\u3092\u4f5c\u6210\u3059\u308b"},"content":{"rendered":"\n
DynamoDB\u3067\u306f\u30c6\u30fc\u30d6\u30eb\u3068\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306e\u30aa\u30fc\u30c8\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u30dd\u30ea\u30b7\u30fc\u3092\u5206\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 \u4ee5\u524d\u306f\u500b\u5225\u306e\u8a2d\u5b9a\u5024\u3092\u30b3\u30f3\u30bd\u30fc\u30eb\u4e0a\u304b\u3089\u78ba\u8a8d\u3067\u304d\u306a\u304b\u3063\u305f\u306e\u3067\u4e0d\u4fbf\u3067\u3057\u305f\u3002\u3053\u306e\u6539\u5584\u306f\u3042\u308a\u304c\u305f\u3044\u3067\u3059\u306d\u3002<\/p>\n<\/span><\/span><\/span><\/div><\/div><\/div><\/div>\n\n\n GSI\u306e\u4f5c\u6210\u306fTable\u306e\u4e2d\u306eGlobalSecondaryIndexes\u3067\u5b9a\u7fa9\u3067\u304d\u307e\u3059\u3002 DynamoDB\u306b\u30aa\u30fc\u30c8\u30b9\u30b1\u30fc\u30eb\u3059\u308b\u305f\u3081\u306e\u6a29\u9650\u3092\u5272\u308a\u632f\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u306b\u306fAWS\u30b5\u30fc\u30d3\u30b9\u30ed\u30fc\u30eb\u3092\u4f7f\u3044\u307e\u3059\u3002\u52dd\u624b\u306b\u4f5c\u6210\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3082\u3042\u308a\u307e\u3059\u304c\u3001\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u306f\u4f5c\u6210\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n \u30c6\u30fc\u30d6\u30eb\u3068GSI\u3092\u4f5c\u6210\u3057\u3066\u305d\u308c\u305e\u308c\u306b\u5bfe\u3057\u3066\u30aa\u30fc\u30c8\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u3092\u8a2d\u5b9a\u3057\u3066\u3044\u308b\u30b5\u30f3\u30d7\u30ebyaml\u3067\u3059\u3002
\u4ee5\u524d\u30de\u30cd\u30fc\u30b8\u30e1\u30f3\u30c8\u30b3\u30f3\u30bd\u30fc\u30eb\u4e0a\u304b\u3089\u306fGSI\u306b\u30c6\u30fc\u30d6\u30eb\u3068\u540c\u3058\u30aa\u30fc\u30c8\u30b9\u30b1\u30fc\u30eb\u3092\u9069\u7528\u3059\u308b<\/span>\u3068\u3044\u3046\u9078\u629e\u80a2\u3057\u304b\u306a\u304b\u3063\u305f\u306e\u3067\u3059\u304c\u3044\u3064\u306e\u307e\u306b\u304b\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3055\u308c\u3066\u30b3\u30f3\u30bd\u30fc\u30eb\u4e0a\u304b\u3089\u3082\u8a2d\u5b9a\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3057\u305f\u3002
yaml\u3068\u30b3\u30f3\u30bd\u30fc\u30eb\u4e0a\u305d\u308c\u305e\u308c\u3067\u8a2d\u5b9a\u3059\u308b\u65b9\u6cd5\u3092\u8a18\u8f09\u3057\u307e\u3059\u3002<\/p>\n\n\nyaml\u3067\u306e\u8a2d\u5b9a<\/h2>\n\n\n\n
yaml\u306e\u8a18\u8ff0\u65b9\u6cd5<\/h3>\n\n\n\n
\u30aa\u30fc\u30c8\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u306b\u95a2\u3057\u3066\u306f\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u30dd\u30ea\u30b7\uff08AWS::ApplicationAutoScaling::ScalingPolicy\uff09\u3068\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u30bf\u30fc\u30b2\u30c3\u30c8\uff08AWS::ApplicationAutoScaling::ScalableTarget\uff09\u3067\u5b9a\u7fa9\u3001\u30a2\u30bf\u30c3\u30c1\u3057\u307e\u3059\u3002
\u30b3\u30e1\u30f3\u30c8\u30a2\u30a6\u30c8\u3057\u3066\u3044\u308bServiceRoleForDynamoDB\u306e\u8a18\u8ff0\u306f\u30b5\u30fc\u30d3\u30b9\u30ed\u30fc\u30eb\u304c\u4f5c\u6210\u3055\u308c\u3066\u3044\u306a\u3051\u308c\u3070\u30b3\u30e1\u30f3\u30c8\u30a2\u30a6\u30c8\u3092\u89e3\u9664\u3057\u3066\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\nServiceRoleForDynamoDB<\/h3>\n\n\n\n
\u30b5\u30f3\u30d7\u30ebyaml\u30b3\u30fc\u30c9<\/h3>\n\n\n\n
USER\u3068\u3044\u3046\u30c6\u30fc\u30d6\u30eb\u3092\u4f5c\u6210\u3057\u3066\u30aa\u30fc\u30c8\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u4f5c\u6210\u3001USER_NAME\u3068\u3044\u3046GSI\u3092\u4f5c\u6210\u3057\u3066\u30aa\u30fc\u30c8\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u3092\u8a2d\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002\u30b3\u30e1\u30f3\u30c8\u30a2\u30a6\u30c8\u3057\u3066\u3044\u308bServiceRoleForDynamoDB\u306e\u8a18\u8ff0\u306f\u30b5\u30fc\u30d3\u30b9\u30ed\u30fc\u30eb\u304c\u4f5c\u6210\u3055\u308c\u3066\u3044\u306a\u3051\u308c\u3070\u30b3\u30e1\u30f3\u30c8\u30a2\u30a6\u30c8\u3092\u89e3\u9664\u3057\u3066\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n#AWS CloudFormation \u30b9\u30bf\u30c3\u30af\u3092\u4f5c\u6210\u306e\u30ea\u30fc\u30b8\u30e7\u30f3\u3067\u4f5c\u6210\u3055\u308c\u307e\u3059\u3002\u5bfe\u8c61\u30ea\u30fc\u30b8\u30e7\u30f3\u3067\u30b9\u30bf\u30c3\u30af\u3092\u5c55\u958b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n#===============================================================================\n# CloudFormation Template\n#===============================================================================\nAWSTemplateFormatVersion: 2010-09-09\nDescription: DynamoDB Template\n\n#===============================================================================\n# Resources\n#===============================================================================\nResources:\n\n#-----------------------------------------------------------\n#ServiceLinkedRole\u306e\u6307\u5b9a\uff08\u30aa\u30fc\u30c8\u30b9\u30b1\u30fc\u30eb\u3092\u5b9f\u65bd\u3059\u308b\u30ed\u30fc\u30eb\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u30de\u30cd\u30fc\u30b8\u30c9\u3067\u3059\u3002\uff09\n#ServiceLinkedRole\u306f\u901a\u5e38\u81ea\u52d5\u3067\u4f5c\u6210\u3055\u308c\u307e\u3059\u304c\u3001\u4f5c\u6210\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u3053\u3053\u306e\u30b3\u30e1\u30f3\u30c8\u30a2\u30a6\u30c8\u3092\u5916\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n#-----------------------------------------------------------\n# ServiceRoleForDynamoDB:\n# Type: AWS::IAM::ServiceLinkedRole\n# Properties:\n# AWSServiceName: dynamodb.application-autoscaling.amazonaws.com\n# Description: AWS Service Role for application AutoScaling DynamoDBTable\n\n#============================================================\n#USER\u30c6\u30fc\u30d6\u30eb\u4f5c\u6210\n#============================================================\n tableUser:\n Type: 'AWS::DynamoDB::Table'\n Properties:\n TableName: "USER"\n AttributeDefinitions:\n - AttributeName: ID\n AttributeType: S\n - AttributeName: NAME\n AttributeType: S\n KeySchema:\n - AttributeName: ID\n KeyType: HASH\n ProvisionedThroughput:\n ReadCapacityUnits: '1'\n WriteCapacityUnits: '1'\n PointInTimeRecoverySpecification: \n PointInTimeRecoveryEnabled: false\n #============================================================\n #\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\uff08GSI\uff09\u306e\u4f5c\u6210\n #============================================================\n GlobalSecondaryIndexes:\n - IndexName: USER_NAME\n KeySchema:\n - AttributeName: NAME\n KeyType: HASH\n Projection:\n NonKeyAttributes:\n - JOB\n - OPTION\n ProjectionType: INCLUDE\n ProvisionedThroughput:\n ReadCapacityUnits: '1'\n WriteCapacityUnits: '1'\n\n#-----------------------------------------------------------\n# \u30c6\u30fc\u30d6\u30eb\u306b\u5bfe\u3057\u3066\u306e\u30aa\u30fc\u30c8\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u30bf\u30fc\u30b2\u30c3\u30c8\n#-----------------------------------------------------------\n\n UsertableWriteCapacityScalableTarget:\n Type: AWS::ApplicationAutoScaling::ScalableTarget\n Properties:\n MaxCapacity: 100\n MinCapacity: 1\n ResourceId: !Join\n - \/\n - - table\n - !Ref tableUser\n RoleARN: !Sub 'arn:aws:iam::${AWS::AccountId}:role\/aws-service-role\/dynamodb.application-autoscaling.amazonaws.com\/AWSServiceRoleForApplicationAutoScaling_DynamoDBTable'\n ScalableDimension: dynamodb:table:WriteCapacityUnits\n ServiceNamespace: dynamodb\n\n UsertableReadCapacityScalableTarget:\n Type: AWS::ApplicationAutoScaling::ScalableTarget\n Properties:\n MaxCapacity: 100\n MinCapacity: 1\n ResourceId: !Join\n - \/\n - - table\n - !Ref tableUser\n RoleARN: !Sub 'arn:aws:iam::${AWS::AccountId}:role\/aws-service-role\/dynamodb.application-autoscaling.amazonaws.com\/AWSServiceRoleForApplicationAutoScaling_DynamoDBTable'\n ScalableDimension: dynamodb:table:ReadCapacityUnits\n ServiceNamespace: dynamodb\n \n#-----------------------------------------------------------\n# \u30c6\u30fc\u30d6\u30eb\u306b\u5bfe\u3057\u3066\u306e\u30aa\u30fc\u30c8\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u30dd\u30ea\u30b7\u30fc\n#-----------------------------------------------------------\n\n UsertableWriteScalingPolicy:\n Type: AWS::ApplicationAutoScaling::ScalingPolicy\n Properties:\n PolicyName: UsertableWriteAutoScalingPolicy\n PolicyType: TargetTrackingScaling\n ScalingTargetId: !Ref UsertableWriteCapacityScalableTarget\n TargetTrackingScalingPolicyConfiguration:\n PredefinedMetricSpecification:\n PredefinedMetricType: DynamoDBWriteCapacityUtilization\n TargetValue: 70\n\n UsertableReadScalingPolicy:\n Type: AWS::ApplicationAutoScaling::ScalingPolicy\n Properties:\n PolicyName: UsertableReadAutoScalingPolicy\n PolicyType: TargetTrackingScaling\n ScalingTargetId: !Ref UsertableReadCapacityScalableTarget\n TargetTrackingScalingPolicyConfiguration:\n PredefinedMetricSpecification:\n PredefinedMetricType: DynamoDBReadCapacityUtilization\n TargetValue: 70\n\n#-----------------------------------------------------------\n# GSI\u306b\u5bfe\u3057\u3066\u306e\u30aa\u30fc\u30c8\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u30bf\u30fc\u30b2\u30c3\u30c8\n#-----------------------------------------------------------\n\n UserNameGsiWriteCapacityScalableTarget:\n Type: AWS::ApplicationAutoScaling::ScalableTarget\n Properties:\n MaxCapacity: 20\n MinCapacity: 1\n ResourceId: !Join\n - \/\n - - table\n - !Ref tableUser\n - index\n - USER_NAME\n RoleARN: !Sub 'arn:aws:iam::${AWS::AccountId}:role\/aws-service-role\/dynamodb.application-autoscaling.amazonaws.com\/AWSServiceRoleForApplicationAutoScaling_DynamoDBTable'\n ScalableDimension: dynamodb:index:WriteCapacityUnits\n ServiceNamespace: dynamodb\n\n UserNameGsiReadCapacityScalableTarget:\n Type: AWS::ApplicationAutoScaling::ScalableTarget\n Properties:\n MaxCapacity: 20\n MinCapacity: 1\n ResourceId: !Join\n - \/\n - - table\n - !Ref tableUser\n - index\n - USER_NAME\n RoleARN: !Sub 'arn:aws:iam::${AWS::AccountId}:role\/aws-service-role\/dynamodb.application-autoscaling.amazonaws.com\/AWSServiceRoleForApplicationAutoScaling_DynamoDBTable'\n ScalableDimension: dynamodb:index:ReadCapacityUnits\n ServiceNamespace: dynamodb\n \n#-----------------------------------------------------------\n# GSI\u306b\u5bfe\u3057\u3066\u306e\u30aa\u30fc\u30c8\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u30dd\u30ea\u30b7\u30fc\n#-----------------------------------------------------------\n\n UserNameGsiWriteScalingPolicy:\n Type: AWS::ApplicationAutoScaling::ScalingPolicy\n Properties:\n PolicyName: UsernamegsiWriteAutoScalingPolicy\n PolicyType: TargetTrackingScaling\n ScalingTargetId: !Ref UserNameGsiWriteCapacityScalableTarget\n TargetTrackingScalingPolicyConfiguration:\n PredefinedMetricSpecification:\n PredefinedMetricType: DynamoDBWriteCapacityUtilization\n TargetValue: 90\n\n UserNameGsiReadScalingPolicy:\n Type: AWS::ApplicationAutoScaling::ScalingPolicy\n Properties:\n PolicyName: UsernamegsiReadAutoScalingPolicy\n PolicyType: TargetTrackingScaling\n ScalingTargetId: !Ref UserNameGsiReadCapacityScalableTarget\n TargetTrackingScalingPolicyConfiguration:\n PredefinedMetricSpecification:\n PredefinedMetricType: DynamoDBReadCapacityUtilization\n TargetValue: 90<\/code><\/pre><\/div>\n\n\n\n
\u30b5\u30f3\u30d7\u30ebyaml\u30c7\u30d7\u30ed\u30a4<\/h3>\n\n\n\n
\u3053\u3061\u3089\u3092CloudFormation\u3067\u30b9\u30bf\u30c3\u30af\u3092\u4f5c\u6210\u3059\u308b\u3068\u30c6\u30fc\u30d6\u30eb\u3068GSI\u3001\u30aa\u30fc\u30c8\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u304c\u4f5c\u6210\u3055\u308c\u307e\u3059\u3002<\/span><\/pre><\/p>\n\n\n\n