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 }