Try AWS Native preview for resources not in the classic version.
NGINX on AWS ECS Fargate using Go IaC
Try AWS Native preview for resources not in the classic version.
This example shows authoring Infrastructure as Code in the Go programming language. It provisions a full Amazon Elastic Container Service (ECS) “Fargate” cluster and related infrastructure, building a docker image, pushing it to ECR, and using it to run a web server accessible over the Internet on port 80. This example is inspired by Docker’s Getting Started Tutorial.
Prerequisites
- Install Pulumi
- Configure Pulumi to Use AWS (if your AWS CLI is configured, no further changes are required)
- Install Go
Running the Example
Clone this repo and cd
into it.
Next, to deploy the application and its infrastructure, follow these steps:
Create a new stack, which is an isolated deployment target for this example:
$ pulumi stack init dev
Set your desired AWS region:
$ pulumi config set aws:region us-east-1 # any valid AWS region will work
Deploy everything with a single
pulumi up
command. This will show you a preview of changes first, which includes all of the required AWS resources (clusters, services, and the like). Don’t worry if it’s more than you expected – this is one of the benefits of Pulumi, it configures everything so that so you don’t need to!$ pulumi up
After being prompted and selecting “yes”, your deployment will begin. It’ll complete in a few minutes:
Updating (dev): Type Name Status + pulumi:pulumi:Stack aws-go-fargate-dev created + ├─ aws:ec2:SecurityGroup web-sg created + ├─ aws:ecs:Cluster app-cluster created + ├─ aws:iam:Role task-exec-role created + ├─ aws:elasticloadbalancingv2:TargetGroup web-tg created + ├─ aws:ecr:Repository app-repo created + ├─ docker:image:Image app-img created + ├─ aws:iam:RolePolicyAttachment task-exec-policy created + ├─ aws:ecs:TaskDefinition app-task created + ├─ aws:elasticloadbalancingv2:LoadBalancer web-lb created + └─ aws:ecs:Service app-svc created Outputs: url: "web-lb-651d804-400248986.us-west-2.elb.amazonaws.com" Resources: + 11 created Duration: 3m41s Permalink: https://app.pulumi.com/acmecorp/aws-go-fargate/dev/updates/1
Notice that the automatically assigned load-balancer URL is printed as a stack output.
At this point, your app is running – let’s curl it. The CLI makes it easy to grab the URL:
$ curl http://$(pulumi stack output url) 42 $ curl http://$(pulumi stack output url) 19 $ curl http://$(pulumi stack output url) 88
Try making some changes, rebuilding, and rerunning
pulumi up
. For example, let’s scale up to 5 instances:- DesiredCount: pulumi.Int(3), + DesiredCount: pulumi.Int(5),
Running
pulumi up
will show you the delta and then, after confirming, will deploy just those changes:$ pulumi up
Notice that
pulumi up
redeploys just the parts of the application/infrastructure that you’ve edited.Updating (dev): Type Name Status Info pulumi:pulumi:Stack aws-go-fargate-dev ~ └─ aws:ecs:Service app-svc updated [diff: ~desiredCount] Outputs: url: "web-lb-651d804-400248986.us-west-2.elb.amazonaws.com" Resources: ~ 1 updated 9 unchanged Duration: 5s Permalink: https://app.pulumi.com/acmecorp/aws-go-fargate/dev/updates/2
Once you are done, you can destroy all of the resources, and the stack:
$ pulumi destroy $ pulumi stack rm
Try AWS Native preview for resources not in the classic version.