@cumulus/deployment
Version:
Deployment templates for cumulus
235 lines (221 loc) • 7.51 kB
YAML
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}}