package main import ( "github.com/pulumi/pulumi-aws/sdk/v5/go/aws/ecs" "github.com/pulumi/pulumi-aws/sdk/v5/go/aws/lb" "github.com/pulumi/pulumi-awsx/sdk/go/awsx/ecr" "github.com/pulumi/pulumi-awsx/sdk/go/awsx/ecs" "github.com/pulumi/pulumi-awsx/sdk/go/awsx/lb" "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) func main() { pulumi.Run(func(ctx *pulumi.Context) error { repository, err := ecr.NewRepository(ctx, "repository", nil) if err != nil { return err } image, err := ecr.NewImage(ctx, "image", &ecr.ImageArgs{ RepositoryUrl: repository.Url, Path: pulumi.String("./app"), }) if err != nil { return err } cluster, err := ecs.NewCluster(ctx, "cluster", nil) if err != nil { return err } lb, err := lb.NewApplicationLoadBalancer(ctx, "lb", nil) if err != nil { return err } _, err = ecs.NewFargateService(ctx, "service", &ecs.FargateServiceArgs{ Cluster: cluster.Arn, AssignPublicIp: pulumi.Bool(true), TaskDefinitionArgs: &ecs.FargateServiceTaskDefinitionArgs{ Container: &ecs.TaskDefinitionContainerDefinitionArgs{ Image: image.ImageUri, Cpu: pulumi.Int(512), Memory: pulumi.Int(128), Essential: pulumi.Bool(true), PortMappings: []ecs.TaskDefinitionPortMappingArgs{ &ecs.TaskDefinitionPortMappingArgs{ TargetGroup: lb.DefaultTargetGroup, }, }, }, }, }) if err != nil { return err } ctx.Export("url", lb.LoadBalancer.ApplyT(func(loadBalancer *lb.LoadBalancer) (string, error) { return loadBalancer.DnsName, nil }).(pulumi.StringOutput)) return nil }) }