-
Notifications
You must be signed in to change notification settings - Fork 68
/
Copy pathmain.go
87 lines (79 loc) · 2.49 KB
/
main.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
package main
import (
"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/ecs"
"github.com/pulumi/pulumi-awsx/sdk/v2/go/awsx/ecr"
ecrx "github.com/pulumi/pulumi-awsx/sdk/v2/go/awsx/ecr"
ecsx "github.com/pulumi/pulumi-awsx/sdk/v2/go/awsx/ecs"
lbx "github.com/pulumi/pulumi-awsx/sdk/v2/go/awsx/lb"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi/config"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
cfg := config.New(ctx, "")
containerPort := 80
if param := cfg.GetInt("containerPort"); param != 0 {
containerPort = param
}
cpu := 512
if param := cfg.GetInt("cpu"); param != 0 {
cpu = param
}
memory := 128
if param := cfg.GetInt("memory"); param != 0 {
memory = param
}
// An ECS cluster to deploy into
cluster, err := ecs.NewCluster(ctx, "cluster", nil)
if err != nil {
return err
}
// An ALB to serve the container endpoint to the internet
loadbalancer, err := lbx.NewApplicationLoadBalancer(ctx, "loadbalancer", nil)
if err != nil {
return err
}
// An ECR repository to store our application's container image
repo, err := ecrx.NewRepository(ctx, "repo", &ecrx.RepositoryArgs{
ForceDelete: pulumi.Bool(true),
})
if err != nil {
return err
}
// Build and publish our application's container image from ./app to the ECR repository
image, err := ecrx.NewImage(ctx, "image", &ecr.ImageArgs{
RepositoryUrl: repo.Url,
Context: pulumi.String("./app"),
Platform: pulumi.String("linux/amd64"),
})
if err != nil {
return err
}
// Deploy an ECS Service on Fargate to host the application container
_, err = ecsx.NewFargateService(ctx, "service", &ecsx.FargateServiceArgs{
Cluster: cluster.Arn,
AssignPublicIp: pulumi.Bool(true),
TaskDefinitionArgs: &ecsx.FargateServiceTaskDefinitionArgs{
Container: &ecsx.TaskDefinitionContainerDefinitionArgs{
Name: pulumi.String("app"),
Image: image.ImageUri,
Cpu: pulumi.Int(cpu),
Memory: pulumi.Int(memory),
Essential: pulumi.Bool(true),
PortMappings: ecsx.TaskDefinitionPortMappingArray{
&ecsx.TaskDefinitionPortMappingArgs{
ContainerPort: pulumi.Int(containerPort),
TargetGroup: loadbalancer.DefaultTargetGroup,
},
},
},
},
})
if err != nil {
return err
}
// The URL at which the container's HTTP endpoint will be available
ctx.Export("url", pulumi.Sprintf("http://%s", loadbalancer.LoadBalancer.DnsName()))
return nil
})
}