/ config / providers / aws.go
aws.go
 1  package providers
 2  
 3  import (
 4  	"fmt"
 5  	"github.com/pulumi/pulumi-aws/sdk/v7/go/aws/s3"
 6  	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
 7  )
 8  
 9  type AwsS3Website struct {
10  	pulumi.ResourceState
11  	Url pulumi.StringOutput
12  }
13  
14  type AwsS3WebsiteArgs struct {
15  	Files []string
16  }
17  
18  func NewAwsS3Website(ctx *pulumi.Context, name string, args AwsS3WebsiteArgs, opts ...pulumi.ResourceOption) (*AwsS3Website, error) {
19  	self := &AwsS3Website{}
20  	err := ctx.RegisterComponentResource("quickstart:index:AwsS3Website", name, self, opts...)
21  	if err != nil {
22  		return nil, err
23  	}
24  
25  	bucket, err := s3.NewBucket(ctx, "my-bucket", nil,
26  		pulumi.Parent(self))
27  
28  	if err != nil {
29  		return nil, err
30  	}
31  
32  	website, err := s3.NewBucketWebsiteConfiguration(ctx, "website", &s3.BucketWebsiteConfigurationArgs{
33  		Bucket: bucket.ID(),
34  		IndexDocument: &s3.BucketWebsiteConfigurationIndexDocumentArgs{
35  			Suffix: pulumi.String("index.html"),
36  		},
37  	}, pulumi.Parent(self))
38  
39  	if err != nil {
40  		return nil, err
41  	}
42  
43  	ownershipControls, err := s3.NewBucketOwnershipControls(ctx, "ownership-controls", &s3.BucketOwnershipControlsArgs{
44  		Bucket: bucket.ID(),
45  		Rule: &s3.BucketOwnershipControlsRuleArgs{
46  			ObjectOwnership: pulumi.String("ObjectWriter"),
47  		},
48  	}, pulumi.Parent(self))
49  
50  	if err != nil {
51  		return nil, err
52  	}
53  
54  	publicAccessBlock, err := s3.NewBucketPublicAccessBlock(ctx, "public-access-block", &s3.BucketPublicAccessBlockArgs{
55  		Bucket:          bucket.ID(),
56  		BlockPublicAcls: pulumi.Bool(false),
57  	}, pulumi.Parent(self))
58  
59  	if err != nil {
60  		return nil, err
61  	}
62  
63  	for _, file := range args.Files {
64  		_, err = s3.NewBucketObject(ctx, file, &s3.BucketObjectArgs{
65  			Bucket:      bucket.ID(),
66  			Source:      pulumi.NewFileAsset(file),
67  			ContentType: pulumi.String("text/html"),
68  			Acl:         pulumi.String("public-read"),
69  		}, pulumi.DependsOn([]pulumi.Resource{ownershipControls, publicAccessBlock}),
70  			pulumi.Parent(self))
71  	}
72  
73  	if err != nil {
74  		return nil, err
75  	}
76  
77  	self.Url = website.WebsiteEndpoint.ApplyT(func(websiteEndpoint string) (string, error) {
78  		return fmt.Sprintf("http://%v", websiteEndpoint), nil
79  	}).(pulumi.StringOutput)
80  
81  	ctx.RegisterResourceOutputs(website, pulumi.Map{"url": self.Url})
82  	return self, nil
83  }