forked from pulumi/examples
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Created aws-py-voting-app example (pulumi#759)
- Loading branch information
Showing
11 changed files
with
637 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
venv |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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. |
Oops, something went wrong.