AWS v6.60.0 published on Tuesday, Nov 19, 2024 by Pulumi
Voting 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:
$ pulumi stack init aws-py-voting-app
Set the AWS region and Redis password:
$ pulumi config set aws:region us-west-2 $ pulumi config set redis-password <PASSWORD> --secret
Run
pulumi up -y
to deploy changes:Updating (aws-py-voting-app): Type Name Status Info + pulumi:pulumi:Stack webserver-py-aws-py-voting-app created + ├─ docker: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 created Outputs: app-url: "flask-balancer-3987b84-b596c9ee2027f152.elb.us-west-2.amazonaws.com" Resources: + 26 created Duration: 3m10s
View the DNS address of the instance via
stack output
:$ pulumi stack output Current stack outputs (1): OUTPUT VALUE app-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.