/
ecsFargate.go
95 lines (84 loc) · 3.43 KB
/
ecsFargate.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package redis
import (
"github.com/DataDog/test-infra-definitions/common/config"
fakeintakeComp "github.com/DataDog/test-infra-definitions/components/datadog/fakeintake"
"github.com/DataDog/test-infra-definitions/resources/aws"
ecsClient "github.com/DataDog/test-infra-definitions/resources/aws/ecs"
classicECS "github.com/pulumi/pulumi-aws/sdk/v6/go/aws/ecs"
"github.com/pulumi/pulumi-awsx/sdk/v2/go/awsx/ecs"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
type EcsFargateComponent struct {
pulumi.ResourceState
}
func FargateAppDefinition(e aws.Environment, clusterArn pulumi.StringInput, apiKeySSMParamName pulumi.StringInput, fakeIntake *fakeintakeComp.Fakeintake, opts ...pulumi.ResourceOption) (*EcsFargateComponent, error) {
namer := e.Namer.WithPrefix("redis").WithPrefix("fg")
opts = append(opts, e.WithProviders(config.ProviderAWS, config.ProviderAWSX))
EcsFargateComponent := &EcsFargateComponent{}
if err := e.Ctx.RegisterComponentResource("dd:apps", namer.ResourceName("grp"), EcsFargateComponent, opts...); err != nil {
return nil, err
}
opts = append(opts, pulumi.Parent(EcsFargateComponent))
serverContainer := &ecs.TaskDefinitionContainerDefinitionArgs{
Name: pulumi.String("redis"),
Image: pulumi.String("public.ecr.aws/docker/library/redis:latest"),
DockerLabels: pulumi.StringMap{
"com.datadoghq.ad.tags": pulumi.String("[\"ecs_launch_type:fargate\"]"),
},
Cpu: pulumi.IntPtr(0),
Essential: pulumi.BoolPtr(true),
DependsOn: ecs.TaskDefinitionContainerDependencyArray{
ecs.TaskDefinitionContainerDependencyArgs{
ContainerName: pulumi.String("datadog-agent"),
Condition: pulumi.String("HEALTHY"),
},
},
PortMappings: ecs.TaskDefinitionPortMappingArray{
ecs.TaskDefinitionPortMappingArgs{
ContainerPort: pulumi.IntPtr(6379),
HostPort: pulumi.IntPtr(6379),
Protocol: pulumi.StringPtr("tcp"),
},
},
LogConfiguration: ecsClient.GetFirelensLogConfiguration(pulumi.String("redis"), pulumi.String("redis"), apiKeySSMParamName),
}
queryContainer := &ecs.TaskDefinitionContainerDefinitionArgs{
Name: e.CommonNamer.DisplayName(255, pulumi.String("query")),
Image: pulumi.String("ghcr.io/datadog/apps-redis-client:main"),
Command: pulumi.StringArray{
pulumi.String("-addr"),
pulumi.Sprintf("localhost:6379"),
},
Cpu: pulumi.IntPtr(50),
Memory: pulumi.IntPtr(32),
Essential: pulumi.BoolPtr(true),
}
serverTaskDef, err := ecsClient.FargateTaskDefinitionWithAgent(e, "redis-fg", pulumi.String("redis-fg"), 1024, 2048,
map[string]ecs.TaskDefinitionContainerDefinitionArgs{
"redis": *serverContainer,
"query": *queryContainer,
},
apiKeySSMParamName,
fakeIntake,
opts...,
)
if err != nil {
return nil, err
}
if _, err := ecs.NewFargateService(e.Ctx, namer.ResourceName("server"), &ecs.FargateServiceArgs{
Cluster: clusterArn,
Name: e.CommonNamer.DisplayName(255, pulumi.String("redis"), pulumi.String("fg")),
DesiredCount: pulumi.IntPtr(1),
NetworkConfiguration: classicECS.ServiceNetworkConfigurationArgs{
AssignPublicIp: pulumi.BoolPtr(e.ECSServicePublicIP()),
SecurityGroups: pulumi.ToStringArray(e.DefaultSecurityGroups()),
Subnets: e.RandomSubnets(),
},
TaskDefinition: serverTaskDef.TaskDefinition.Arn(),
EnableExecuteCommand: pulumi.BoolPtr(true),
ContinueBeforeSteadyState: pulumi.BoolPtr(true),
}, opts...); err != nil {
return nil, err
}
return EcsFargateComponent, nil
}