-
Notifications
You must be signed in to change notification settings - Fork 881
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add AWS Python S3 folder example (#266)
* Add aws-py-s3-folder example * Add example test * Add README.md
- Loading branch information
1 parent
2153a2e
commit 97a4edf
Showing
9 changed files
with
151 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,2 @@ | ||
*.pyc | ||
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,3 @@ | ||
name: aws-py-s3-folder | ||
runtime: python | ||
description: A minimal AWS Python Pulumi program |
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,82 @@ | ||
[](https://app.pulumi.com/new) | ||
|
||
# Static Website Hosted on AWS S3 | ||
|
||
A static website that uses [S3's website support](https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html). | ||
For a detailed walkthrough of this example, see the tutorial [Static Website on AWS S3](https://pulumi.io/quickstart/aws-s3-website.html). | ||
|
||
## Deploying and running the program | ||
|
||
Note: some values in this example will be different from run to run. These values are indicated | ||
with `***`. | ||
|
||
1. Create a new stack: | ||
|
||
```bash | ||
$ pulumi stack init website-testing | ||
``` | ||
|
||
1. Set the AWS region: | ||
|
||
``` | ||
$ pulumi config set aws:region us-west-2 | ||
``` | ||
|
||
1. Create a Python virtualenv, activate it, and install dependencies: | ||
|
||
``` | ||
$ virtualenv -p python3 venv | ||
$ source venv/bin/activate | ||
$ pip3 install -r requirements.txt | ||
``` | ||
|
||
1. Run `pulumi up` to preview and deploy changes. After the preview is shown you will be | ||
prompted if you want to continue or not. | ||
|
||
```bash | ||
$ pulumi up | ||
Previewing update (dev): | ||
Type Name Plan | ||
+ pulumi:pulumi:Stack aws-py-s3-folder-dev create | ||
+ ├─ aws:s3:Bucket s3-website-bucket create | ||
+ ├─ aws:s3:BucketObject index.html create | ||
+ ├─ aws:s3:BucketObject python.png create | ||
+ ├─ aws:s3:BucketObject favicon.png create | ||
+ └─ aws:s3:BucketPolicy bucket-policy create | ||
Resources: | ||
+ 6 to create | ||
Do you want to perform this update? | ||
> yes | ||
no | ||
details | ||
``` | ||
|
||
1. To see the resources that were created, run `pulumi stack output`: | ||
|
||
```bash | ||
$ pulumi stack output | ||
Current stack outputs (2): | ||
OUTPUT VALUE | ||
bucket_name s3-website-bucket-*** | ||
website_url ***.s3-website-us-west-2.amazonaws.com | ||
``` | ||
|
||
1. To see that the S3 objects exist, you can either use the AWS Console or the AWS CLI: | ||
|
||
```bash | ||
$ aws s3 ls $(pulumi stack output bucket_name) | ||
2018-04-17 15:40:47 13731 favicon.png | ||
2018-04-17 15:40:48 249 index.html | ||
``` | ||
|
||
1. Open the site URL in a browser to see both the rendered HTML, the favicon, and Python splash image: | ||
|
||
```bash | ||
$ pulumi stack output website_url | ||
***.s3-website-us-west-2.amazonaws.com | ||
``` | ||
|
||
1. To clean up resources, run `pulumi destroy` and answer the confirmation question at the prompt. |
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,43 @@ | ||
import json | ||
import mimetypes | ||
import os | ||
|
||
from pulumi import export, FileAsset | ||
from pulumi_aws import s3 | ||
|
||
web_bucket = s3.Bucket('s3-website-bucket', website={ | ||
"index_document": "index.html" | ||
}) | ||
|
||
content_dir = "www" | ||
for file in os.listdir(content_dir): | ||
filepath = os.path.join(content_dir, file) | ||
mime_type, _ = mimetypes.guess_type(filepath) | ||
obj = s3.BucketObject(file, | ||
bucket=web_bucket.id, | ||
source=FileAsset(filepath), | ||
content_type=mime_type) | ||
|
||
def public_read_policy_for_bucket(bucket_name): | ||
return json.dumps({ | ||
"Version": "2012-10-17", | ||
"Statement": [{ | ||
"Effect": "Allow", | ||
"Principal": "*", | ||
"Action": [ | ||
"s3:GetObject" | ||
], | ||
"Resource": [ | ||
f"arn:aws:s3:::{bucket_name}/*", | ||
] | ||
}] | ||
}) | ||
|
||
bucket_name = web_bucket.id | ||
bucket_policy = s3.BucketPolicy("bucket-policy", | ||
bucket=bucket_name, | ||
policy=bucket_name.apply(public_read_policy_for_bucket)) | ||
|
||
# Export the name of the bucket | ||
export('bucket_name', web_bucket.id) | ||
export('website_url', web_bucket.website_endpoint) |
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,2 @@ | ||
pulumi>=0.16.4 | ||
pulumi_aws>=0.16.2 |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
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 @@ | ||
<html> | ||
<head><meta charset="UTF-8"> | ||
<title>Hello, Pulumi!</title></head> | ||
<body> | ||
<p>Hello, S3!</p> | ||
<p>Made with ❤️ with <a href="https://pulumi.com">Pulumi</a> and Python</p> | ||
<img src="python.png" /> | ||
</body></html> |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
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