AWS Python Voting App
Voting app that uses containers
This example lives in the pulumi/examples repository. Check out just this directory to use it:
git clone --filter=blob:none --sparse https://github.com/pulumi/examples pulumi-examplesgit -C pulumi-examples sparse-checkout set aws-py-voting-appcd pulumi-examples/aws-py-voting-appVoting app Using Redis and Flask#
A simple voting app that uses Redis for a data store and a Python Flask app for the frontend. The example has been ported from https://github.com/Azure-Samples/azure-voting-app-redis.
The example shows how easy it is to deploy containers into production and to connect them to one another. Since the example defines a custom container, Pulumi does the following:
- Builds the Docker image
- Provisions AWS Container Registry (ECR) instance
- Pushes the image to the ECR instance
- Creates a new ECS task definition, pointing to the ECR image definition
Prerequisites#
Deploying and running the program#
-
Create a new stack:
Terminal window pulumi stack init aws-py-voting-app -
Set the AWS region and Redis password:
Terminal window pulumi config set aws:region us-west-2pulumi config set redis-password <PASSWORD> --secret -
Run
pulumi up -yto deploy changes:Terminal window Updating (aws-py-voting-app):Type Name Status Info+ pulumi:pulumi:Stack webserver-py-aws-py-voting-app created+ ├─ docker-build:image:Image flask-dockerimage created+ ├─ aws:ec2:Vpc app-vpc created+ ├─ aws:ecs:Cluster app-cluster created+ ├─ aws:iam:Role app-exec-role created+ ├─ aws:iam:Role app-task-role created+ ├─ aws:ecr:Repository app-ecr-repo created+ ├─ aws:ecr:LifecyclePolicy app-lifecycle-policy created+ ├─ aws:iam:RolePolicyAttachment app-exec-policy created+ ├─ aws:iam:RolePolicyAttachment app-access-policy created+ ├─ aws:iam:RolePolicyAttachment app-lambda-policy created+ ├─ aws:ecs:TaskDefinition redis-task-definition created+ ├─ aws:ec2:InternetGateway app-gateway created+ ├─ aws:ec2:SecurityGroup security-group created+ ├─ aws:ec2:Subnet app-vpc-subnet created+ ├─ aws:lb:TargetGroup redis-targetgroup created+ ├─ aws:lb:TargetGroup flask-targetgroup created+ ├─ aws:ec2:RouteTable app-routetable created+ ├─ aws:lb:LoadBalancer redis-balancer created+ ├─ aws:lb:LoadBalancer flask-balancer created+ ├─ aws:ec2:MainRouteTableAssociation app_routetable_association created+ ├─ aws:lb:Listener flask-listener created+ ├─ aws:lb:Listener redis-listener created+ ├─ aws:ecs:TaskDefinition flask-task-definition created+ ├─ aws:ecs:Service redis-service created+ └─ aws:ecs:Service flask-service createdOutputs:app-url: "flask-balancer-3987b84-b596c9ee2027f152.elb.us-west-2.amazonaws.com"Resources:+ 26 createdDuration: 3m10s -
View the DNS address of the instance via
stack output:Terminal window pulumi stack outputCurrent stack outputs (1):OUTPUT VALUEapp-url flask-balancer-3987b84-b596c9ee2027f152.elb.us-west-2.amazonaws.com -
Verify that the EC2 instance exists, by connecting to it in a browser window.
Clean up#
To clean up resources, run pulumi destroy and answer the confirmation question at the prompt.
