1. Packages
  2. AWS Classic
  3. How-to Guides
  4. Voting app Using Redis and Flask

Try AWS Native preview for resources not in the classic version.

AWS Classic v6.32.0 published on Friday, Apr 19, 2024 by Pulumi

Voting app Using Redis and Flask

aws logo

Try AWS Native preview for resources not in the classic version.

AWS Classic v6.32.0 published on Friday, Apr 19, 2024 by Pulumi

    View Code Deploy

    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

    1. Install Pulumi
    2. Configure Pulumi for AWS
    3. Configure Pulumi for Python
    4. Install Docker

    Deploying and running the program

    1. Create a new stack:

      $ pulumi stack init aws-py-voting-app
      
    2. Set the AWS region and Redis password:

      $ pulumi config set aws:region us-west-2
      $ pulumi config set redis-password <PASSWORD> --secret
      
    3. 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
      
    4. 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
      
    5. 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.

    aws logo

    Try AWS Native preview for resources not in the classic version.

    AWS Classic v6.32.0 published on Friday, Apr 19, 2024 by Pulumi