Skip to content

Commit

Permalink
Created aws-py-voting-app example (pulumi#759)
Browse files Browse the repository at this point in the history
  • Loading branch information
jetvova committed Aug 17, 2020
1 parent 3db0fc8 commit 252b00a
Show file tree
Hide file tree
Showing 11 changed files with 637 additions and 0 deletions.
1 change: 1 addition & 0 deletions aws-py-voting-app/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
venv
8 changes: 8 additions & 0 deletions aws-py-voting-app/Pulumi.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
name: voting-app
runtime: python
description: Voting app that uses containers
template:
config:
aws:region:
description: The AWS region to deploy into
default: us-west-2
99 changes: 99 additions & 0 deletions aws-py-voting-app/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
[![Deploy](https://get.pulumi.com/new/button.svg)](https://app.pulumi.com/new)

# 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

1. [Install Pulumi](https://www.pulumi.com/docs/get-started/install/)
1. [Configure Pulumi for AWS](https://www.pulumi.com/docs/intro/cloud-providers/aws/setup/)
1. [Configure Pulumi for Python](https://www.pulumi.com/docs/intro/languages/python/)
1. [Install Docker](https://docs.docker.com/engine/installation/)

## Deploying and running the program

1. Create a new stack:

```bash
$ pulumi stack init aws-py-voting-app
```

1. Set the AWS region and Redis password:

```bash
$ pulumi config set aws:region us-west-2
$ pulumi config set redis-password <PASSWORD> --secret
```

1. Create a Python virtualenv, activate it, and install dependencies:

This installs the dependent packages [needed](https://www.pulumi.com/docs/intro/concepts/how-pulumi-works/) for our Pulumi program.

```bash
$ python3 -m venv venv
$ source venv/bin/activate
$ pip3 install -r requirements.txt
```

1. Run `pulumi up -y` to deploy changes:
```bash
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
```

1. View the DNS address of the instance via `stack output`:

```bash
$ pulumi stack output
Current stack outputs (1):
OUTPUT VALUE
app-url flask-balancer-3987b84-b596c9ee2027f152.elb.us-west-2.amazonaws.com

```

1. 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.
Loading

0 comments on commit 252b00a

Please sign in to comment.