mirror of https://github.com/pulumi/pulumi.git
38 lines
1.3 KiB
TypeScript
38 lines
1.3 KiB
TypeScript
import * as pulumi from "@pulumi/pulumi";
|
|
import * as aws from "@pulumi/aws";
|
|
import * as fs from "fs";
|
|
|
|
// Create a bucket and expose a website index document
|
|
const siteBucket = new aws.s3.Bucket("siteBucket", {website: {
|
|
indexDocument: "index.html",
|
|
}});
|
|
const siteDir = "www";
|
|
// For each file in the directory, create an S3 object stored in `siteBucket`
|
|
const files: aws.s3.BucketObject[] = [];
|
|
for (const range of fs.readdirSync(siteDir).map((v, k) => ({key: k, value: v}))) {
|
|
files.push(new aws.s3.BucketObject(`files-${range.key}`, {
|
|
bucket: siteBucket.id,
|
|
key: range.value,
|
|
source: new pulumi.asset.FileAsset(`${siteDir}/${range.value}`),
|
|
contentType: range.value,
|
|
}, {
|
|
deletedWith: siteBucket,
|
|
}));
|
|
}
|
|
// set the MIME type of the file
|
|
// Set the access policy for the bucket so all objects are readable
|
|
const bucketPolicy = new aws.s3.BucketPolicy("bucketPolicy", {
|
|
bucket: siteBucket.id,
|
|
policy: pulumi.jsonStringify({
|
|
Version: "2012-10-17",
|
|
Statement: [{
|
|
Effect: "Allow",
|
|
Principal: "*",
|
|
Action: ["s3:GetObject"],
|
|
Resource: [pulumi.interpolate`arn:aws:s3:::${siteBucket.id}/*`],
|
|
}],
|
|
}),
|
|
});
|
|
export const bucketName = siteBucket.bucket;
|
|
export const websiteUrl = siteBucket.websiteEndpoint;
|