pulumi/tests/testdata/codegen/aws-s3-folder-pp/dotnet/aws-s3-folder.cs

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,
};
});