77 lines
1.9 KiB
Go
77 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"mime"
|
|
"path"
|
|
|
|
"github.com/pulumi/pulumi-aws/sdk/v2/go/aws/s3"
|
|
"github.com/pulumi/pulumi/sdk/v2/go/pulumi"
|
|
)
|
|
|
|
func main() {
|
|
pulumi.Run(func(ctx *pulumi.Context) error {
|
|
siteBucket, err := s3.NewBucket(ctx, "siteBucket", &s3.BucketArgs{
|
|
Website: &s3.BucketWebsiteArgs{
|
|
IndexDocument: pulumi.String("index.html"),
|
|
},
|
|
})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
siteDir := "www"
|
|
files0, err := ioutil.ReadDir(siteDir)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
fileNames0 := make([]string, len(files0))
|
|
for i0, val0 := range files0 {
|
|
fileNames0[i0] = val0.Name()
|
|
}
|
|
for i0, val0 := range fileNames0 {
|
|
_, err = s3.NewBucketObject(ctx, "files-"+string(i0), &s3.BucketObjectArgs{
|
|
Bucket: siteBucket.ID(),
|
|
Key: pulumi.String(val0),
|
|
Source: pulumi.NewFileAsset(fmt.Sprintf("%v%v%v", siteDir, "/", val0)),
|
|
ContentType: pulumi.String(mime.TypeByExtension(path.Ext(val0))),
|
|
})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
_, err = s3.NewBucketPolicy(ctx, "bucketPolicy", &s3.BucketPolicyArgs{
|
|
Bucket: siteBucket.ID(),
|
|
Policy: siteBucket.ID().ApplyT(func(id string) (pulumi.String, error) {
|
|
var _zero pulumi.String
|
|
tmpJSON0, err := json.Marshal(map[string]interface{}{
|
|
"Version": "2012-10-17",
|
|
"Statement": []map[string]interface{}{
|
|
map[string]interface{}{
|
|
"Effect": "Allow",
|
|
"Principal": "*",
|
|
"Action": []string{
|
|
"s3:GetObject",
|
|
},
|
|
"Resource": []string{
|
|
fmt.Sprintf("%v%v%v", "arn:aws:s3:::", id, "/*"),
|
|
},
|
|
},
|
|
},
|
|
})
|
|
if err != nil {
|
|
return _zero, err
|
|
}
|
|
json0 := string(tmpJSON0)
|
|
return pulumi.String(json0), nil
|
|
}).(pulumi.StringOutput),
|
|
})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
ctx.Export("bucketName", siteBucket.Bucket)
|
|
ctx.Export("websiteUrl", siteBucket.WebsiteEndpoint)
|
|
return nil
|
|
})
|
|
}
|