UNPKG

@cumulus/deployment

Version:
235 lines (221 loc) 7.51 kB
AWSTemplateFormatVersion: '2010-09-09' Description: 'stack: {{stackName}} | deployed by Kes' Resources: ################################################# # DynamoDB config BEGIN ################################################# {{#each dynamos}} {{@key}}DynamoDB: Type: AWS::DynamoDB::Table DeletionPolicy: Retain Properties: AttributeDefinitions: {{#each this.attributes}} - AttributeName: {{name}} AttributeType: {{type}} {{/each}} KeySchema: {{#if this.KeySchema}} {{#each this.KeySchema}} - AttributeName: {{this.AttributeName}} KeyType: {{this.KeyType}} {{/each}} {{else}} {{#each this.attributes}} - AttributeName: {{name}} KeyType: {{schema}} {{/each}} {{/if}} ProvisionedThroughput: ReadCapacityUnits: {{this.read}} WriteCapacityUnits: {{this.write}} TableName: {{../prefix}}-{{@key}} StreamSpecification: StreamViewType: "NEW_AND_OLD_IMAGES" {{#if this.GlobalSecondaryIndexes}} GlobalSecondaryIndexes: {{#each this.GlobalSecondaryIndexes}} - IndexName: {{IndexName}} KeySchema: {{#each this.KeySchema}} - AttributeName: {{this.AttributeName}} KeyType: {{this.KeyType}} {{/each}} {{#if this.Projection}} Projection: {{#each this.Projection}} {{@key}}: {{this}} {{/each}} {{/if}} ProvisionedThroughput: ReadCapacityUnits: {{../read}} WriteCapacityUnits: {{../write}} {{/each}} {{/if}} {{/each}} ################################################# # DynamoDB config END ################################################# ################################################# # Cumulus DynamoDB Auto Scaling START ################################################# {{# each dynamos}} {{#if this.enableAutoScaling}} ### Read scaling policy {{@key}}ReadCapacityScalableTarget: Type: "AWS::ApplicationAutoScaling::ScalableTarget" Properties: {{#if this.ReadMinCapacity}} MinCapacity: {{ this.ReadMinCapacity }} {{else}} MinCapacity: 5 {{/if}} {{#if this.ReadMaxCapacity}} MaxCapacity: {{ this.ReadMaxCapacity }} {{else}} MaxCapacity: 10 {{/if}} ResourceId: Fn::Sub: table/{{../../prefix}}-{{@key}} RoleARN: {{../../iams.scalingRoleArn}} ScalableDimension: "dynamodb:table:ReadCapacityUnits" ServiceNamespace: dynamodb {{@key}}TableReadScalingPolicy: Type: "AWS::ApplicationAutoScaling::ScalingPolicy" Properties: PolicyName: ReadAutoScalingPolicy PolicyType: TargetTrackingScaling ScalingTargetId: Ref: {{@key}}ReadCapacityScalableTarget TargetTrackingScalingPolicyConfiguration: TargetValue: {{ ../../AutoScalingPolicyConfiguration.targetValue }} ScaleInCooldown: {{ ../../AutoScalingPolicyConfiguration.scaleInCooldown }} ScaleOutCooldown: {{ ../../AutoScalingPolicyConfiguration.scaleOutCooldown }} PredefinedMetricSpecification: PredefinedMetricType: DynamoDBReadCapacityUtilization ### Write scaling policy {{@key}}WriteCapacityScalableTarget: Type: "AWS::ApplicationAutoScaling::ScalableTarget" Properties: {{#if this.WriteMinCapacity}} MinCapacity: {{ this.WriteMinCapacity }} {{else}} MinCapacity: 1 {{/if}} {{#if this.WriteMaxCapacity}} MaxCapacity: {{ this.WriteMaxCapacity }} {{else}} MaxCapacity: 2 {{/if}} ResourceId: Fn::Sub: table/{{../../prefix}}-{{@key}} RoleARN: {{../../iams.scalingRoleArn}} ScalableDimension: "dynamodb:table:WriteCapacityUnits" ServiceNamespace: dynamodb {{@key}}TableWriteScalingPolicy: Type: "AWS::ApplicationAutoScaling::ScalingPolicy" Properties: PolicyName: WriteAutoScalingPolicy PolicyType: TargetTrackingScaling ScalingTargetId: Ref: {{@key}}WriteCapacityScalableTarget TargetTrackingScalingPolicyConfiguration: TargetValue: {{ ../../AutoScalingPolicyConfiguration.targetValue }} ScaleInCooldown: {{ ../../AutoScalingPolicyConfiguration.scaleInCooldown }} ScaleOutCooldown: {{ ../../AutoScalingPolicyConfiguration.scaleOutCooldown }} PredefinedMetricSpecification: PredefinedMetricType: DynamoDBWriteCapacityUtilization {{/if}} {{/each}} ################################################# # Cumulus DynamoDB Auto Scaling END ################################################# {{# if es.name}} ################################################# # ElasticSearch config BEGIN ################################################# {{es.name}}Domain: Type: "AWS::Elasticsearch::Domain" DeletionPolicy: Retain Properties: DomainName: {{prefix}}-{{es.name}} ElasticsearchVersion: {{# if es.version}}{{es.version}}{{ else }}'5.3'{{/if}} ElasticsearchClusterConfig: InstanceCount: {{# if es.instanceCount}}{{es.instanceCount}}{{ else }}1{{/if}} InstanceType: {{# if es.instanceType}}{{es.instanceType}}{{ else }}"t2.small.elasticsearch"{{/if}} SnapshotOptions: AutomatedSnapshotStartHour: 0 EBSOptions: EBSEnabled: true VolumeType: gp2 VolumeSize: {{es.volumeSize}} AdvancedOptions: rest.action.multi.allow_explicit_index: "true" AccessPolicies: Version: "2012-10-17" Statement: - Effect: "Allow" Principal: AWS: {{iams.lambdaProcessingRoleArn}} Action: "es:*" Resource: - Fn::Sub: "arn:aws:es:${AWS::Region}:${AWS::AccountId}:domain/{{prefix}}-{{es.name}}/*" - Effect: "Allow" Principal: AWS: {{iams.lambdaApiGatewayRoleArn}} Action: "es:*" Resource: - Fn::Sub: "arn:aws:es:${AWS::Region}:${AWS::AccountId}:domain/{{prefix}}-{{es.name}}/*" {{# if vpc }} VPCOptions: SecurityGroupIds: - {{vpc.securityGroup}} SubnetIds: {{#each vpc.subnets}} - {{this}} {{/each}} {{/if}} {{#if es.alarms}} {{# each es.alarms}} {{../es.name}}{{@key}}Alarm: Type: AWS::CloudWatch::Alarm Properties: {{#if alarm_description}} AlarmDescription: {{ alarm_description }} {{/if}} AlarmName: {{../prefix}}-{{../es.name}}-{{@key}}Alarm ComparisonOperator: {{ comparison_operator }} EvaluationPeriods: {{#if evaluation_periods }}{{ evaluation_periods }}{{ else }}5{{/if}} MetricName: {{ metric }} Statistic: {{#if statistic }}{{ statistic }}{{ else }}Average{{/if}} Threshold: {{ threshold }} Period: {{#if period }}{{ period }}{{ else }}60{{/if}} Namespace: AWS/ES Dimensions: - Name: ClientId Value: Fn::Sub: ${AWS::AccountId} - Name: DomainName Value: Ref: {{../es.name}}Domain {{/each}} {{/if}} ################################################# # ElasticSearch config END ################################################# {{/if}} Outputs: {{#each dynamos}} {{@key}}DynamoDBStreamArn: Value: Fn::GetAtt: - {{@key}}DynamoDB - StreamArn {{/each}} {{#if es.name}} {{es.name}}DomainEndpoint: Value: Fn::GetAtt: - {{es.name}}Domain - DomainEndpoint {{/if}}