mirror of https://github.com/pulumi/pulumi.git
70 lines
2.1 KiB
C#
70 lines
2.1 KiB
C#
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text.Json;
|
|
using Pulumi;
|
|
using Aws = Pulumi.Aws;
|
|
|
|
return await Deployment.RunAsync(() =>
|
|
{
|
|
// Create a bucket and expose a website index document
|
|
var siteBucket = new Aws.S3.Bucket("siteBucket", new()
|
|
{
|
|
Website = new Aws.S3.Inputs.BucketWebsiteArgs
|
|
{
|
|
IndexDocument = "index.html",
|
|
},
|
|
});
|
|
|
|
var siteDir = "www";
|
|
|
|
// For each file in the directory, create an S3 object stored in `siteBucket`
|
|
var files = new List<Aws.S3.BucketObject>();
|
|
foreach (var range in Directory.GetFiles(siteDir).Select(Path.GetFileName).Select((v, k) => new { Key = k, Value = v }))
|
|
{
|
|
files.Add(new Aws.S3.BucketObject($"files-{range.Key}", new()
|
|
{
|
|
Bucket = siteBucket.Id,
|
|
Key = range.Value,
|
|
Source = new FileAsset($"{siteDir}/{range.Value}"),
|
|
ContentType = range.Value,
|
|
}, new CustomResourceOptions
|
|
{
|
|
DeletedWith = siteBucket,
|
|
}));
|
|
}
|
|
// set the MIME type of the file
|
|
// Set the access policy for the bucket so all objects are readable
|
|
var bucketPolicy = new Aws.S3.BucketPolicy("bucketPolicy", new()
|
|
{
|
|
Bucket = siteBucket.Id,
|
|
Policy = Output.JsonSerialize(Output.Create(new Dictionary<string, object?>
|
|
{
|
|
["Version"] = "2012-10-17",
|
|
["Statement"] = new[]
|
|
{
|
|
new Dictionary<string, object?>
|
|
{
|
|
["Effect"] = "Allow",
|
|
["Principal"] = "*",
|
|
["Action"] = new[]
|
|
{
|
|
"s3:GetObject",
|
|
},
|
|
["Resource"] = new[]
|
|
{
|
|
siteBucket.Id.Apply(id => $"arn:aws:s3:::{id}/*"),
|
|
},
|
|
},
|
|
},
|
|
})),
|
|
});
|
|
|
|
return new Dictionary<string, object?>
|
|
{
|
|
["bucketName"] = siteBucket.BucketName,
|
|
["websiteUrl"] = siteBucket.WebsiteEndpoint,
|
|
};
|
|
});
|
|
|