diff --git a/content/docs/iac/packages-and-automation/automation-api/getting-started-automation-api.md b/content/docs/iac/packages-and-automation/automation-api/getting-started-automation-api.md index 9551f87f8a1e..9b4527b6a780 100644 --- a/content/docs/iac/packages-and-automation/automation-api/getting-started-automation-api.md +++ b/content/docs/iac/packages-and-automation/automation-api/getting-started-automation-api.md @@ -67,11 +67,7 @@ This tutorial is based on the [`inlineProgram-ts` example](https://github.com/pu ```typescript const pulumiProgram = async () => { // Create a bucket and expose a website index document. - const siteBucket = new s3.Bucket("s3-website-bucket", { - website: { - indexDocument: "index.html", - }, - }); + const siteBucket = new s3.BucketV2("s3-website-bucket", {}); const indexContent = ` Hello S3 @@ -80,39 +76,42 @@ const pulumiProgram = async () => { ` - // Write our index.html into the site bucket. - let object = new s3.BucketObject("index", { - bucket: siteBucket, - content: indexContent, - contentType: "text/html; charset=utf-8", - key: "index.html" + const ownershipControls = new aws.s3.BucketOwnershipControls("ownership-controls", { + bucket: siteBucket.id, + rule: { + objectOwnership: "ObjectWriter", + }, }); - // Create an S3 Bucket Policy to allow public read of all objects in bucket. - function publicReadPolicyForBucket(bucketName): PolicyDocument { - return { - Version: "2012-10-17", - Statement: [{ - Effect: "Allow", - Principal: "*", - Action: [ - "s3:GetObject" - ], - Resource: [ - `arn:aws:s3:::${bucketName}/*` // Policy refers to bucket name explicitly. - ] - }] - }; - } + const publicAccessBlock = new aws.s3.BucketPublicAccessBlock("public-access-block", { + bucket: siteBucket.id, + blockPublicAcls: false, + }); + + const website = new aws.s3.BucketWebsiteConfigurationV2("website", { + bucket: siteBucket.id, + indexDocument: { + suffix: "index.html", + }, + }); - // Set the access policy for the bucket so all objects are readable. - let bucketPolicy = new s3.BucketPolicy("bucketPolicy", { - bucket: siteBucket.bucket, // Refer to the bucket created earlier. - policy: siteBucket.bucket.apply(publicReadPolicyForBucket) // Use output property `siteBucket.bucket`. + // Write our index.html into the site bucket. + const object = new s3.BucketObject("index", { + bucket: siteBucket.id, + content: indexContent, + contentType: "text/html; charset=utf-8", + key: "index.html", + acl: "public-read" + }, { + dependsOn: [ + publicAccessBlock, + ownershipControls, + website, + ], }); return { - websiteUrl: siteBucket.websiteEndpoint, + websiteUrl: website.websiteEndpoint, }; }; ``` @@ -128,7 +127,8 @@ This tutorial is based on the [`inline_program` example](https://github.com/pulu ```python def pulumi_program(): # Create a bucket and expose a website index document. - site_bucket = s3.Bucket("s3-website-bucket", website=s3.BucketWebsiteArgs(index_document="index.html")) + site_bucket = s3.BucketV2("s3-website-bucket") + index_content = """ Hello S3 @@ -139,27 +139,37 @@ def pulumi_program(): """ + ownership_controls = s3.BucketOwnershipControls("ownership-controls", + bucket=site_bucket.id, + rule={ + "object_ownership": "ObjectWriter", + }) + + public_access_block = s3.BucketPublicAccessBlock("public-access-block", + bucket=site_bucket.id, + block_public_acls=False) + + website = aws.s3.BucketWebsiteConfigurationV2("website", + bucket=site_bucket.id, + index_document={ + "suffix": "index.html", + }) + # Write our index.html into the site bucket. s3.BucketObject("index", bucket=site_bucket.id, # Reference to the s3.Bucket object. content=index_content, + acl="public-read", key="index.html", # Set the key of the object. - content_type="text/html; charset=utf-8") # Set the MIME type of the file. - - # Set the access policy for the bucket so all objects are readable. - s3.BucketPolicy("bucket-policy", bucket=site_bucket.id, policy={ - "Version": "2012-10-17", - "Statement": { - "Effect": "Allow", - "Principal": "*", - "Action": ["s3:GetObject"], - # Policy refers to bucket explicitly. - "Resource": [pulumi.Output.concat("arn:aws:s3:::", site_bucket.id, "/*")] - }, - }) + content_type="text/html; charset=utf-8", # Set the MIME type of the file. + opts=pulumi.ResourceOptions(depends_on=[ + public_access_block, + ownership_controls, + website, + ])) # Export the website URL. - pulumi.export("website_url", site_bucket.website_endpoint) + pulumi.export("website_url", website.website_endpoint) ``` {{% /choosable %}} @@ -172,59 +182,66 @@ This tutorial is based on the [`inline_program` example](https://github.com/pulu ```go deployFunc := func(ctx *pulumi.Context) error { - // Similar go git_repo_program, our program defines a s3 website. - // Here we create the bucket. - siteBucket, err := s3.NewBucket(ctx, "s3-website-bucket", &s3.BucketArgs{ - Website: s3.BucketWebsiteArgs{ - IndexDocument: pulumi.String("index.html"), - }, - }) - if err != nil { - return err - } - - // We define and upload our HTML inline. - indexContent := ` - Hello S3 + // Similar go git_repo_program, our program defines a s3 website. + // Here we create the bucket. + siteBucket, err := s3.NewBucketV2(ctx, "s3-website-bucket", nil) + if err != nil { + return err + } + + // We define and upload our HTML inline. + indexContent := ` +Hello S3

Hello, world!

Made with ❤️ with Pulumi

` - // Upload our index.html. - if _, err := s3.NewBucketObject(ctx, "index", &s3.BucketObjectArgs{ - Bucket: siteBucket.ID(), // Reference to the s3.Bucket object. - Content: pulumi.String(indexContent), - Key: pulumi.String("index.html"), // Set the key of the object. - ContentType: pulumi.String("text/html; charset=utf-8"), // Set the MIME type of the file. - }); err != nil { - return err - } - - // Set the access policy for the bucket so all objects are readable. - if _, err := s3.NewBucketPolicy(ctx, "bucketPolicy", &s3.BucketPolicyArgs{ - Bucket: siteBucket.ID(), // Refer to the bucket created earlier. - Policy: pulumi.Any(map[string]interface{}{ - "Version": "2012-10-17", - "Statement": []map[string]interface{}{ - { - "Effect": "Allow", - "Principal": "*", - "Action": []interface{}{ - "s3:GetObject", - }, - "Resource": []interface{}{ - pulumi.Sprintf("arn:aws:s3:::%s/*", siteBucket.ID()), // Policy refers to bucket name explicitly. - }, + + ownershipControls, err := s3.NewBucketOwnershipControls(ctx, "ownership-controls", &s3.BucketOwnershipControlsArgs{ + Bucket: siteBucket.ID(), + Rule: &s3.BucketOwnershipControlsRuleArgs{ + ObjectOwnership: pulumi.String("ObjectWriter"), }, - }, - }), - }); err != nil { - return err - } - - // Export the website URL. - ctx.Export("websiteUrl", siteBucket.WebsiteEndpoint) - return nil + }) + if err != nil { + return err + } + + publicAccessBlock, err := s3.NewBucketPublicAccessBlock(ctx, "public-access-block", &s3.BucketPublicAccessBlockArgs{ + Bucket: siteBucket.ID(), + BlockPublicAcls: pulumi.Bool(false), + }) + if err != nil { + return err + } + + website, err := s3.NewBucketWebsiteConfigurationV2(ctx, "website", &s3.BucketWebsiteConfigurationV2Args{ + Bucket: siteBucket.ID(), + IndexDocument: &s3.BucketWebsiteConfigurationV2IndexDocumentArgs{ + Suffix: pulumi.String("index.html"), + }, + }) + if err != nil { + return err + } + // Upload our index.html. + if _, err := s3.NewBucketObject(ctx, "index", &s3.BucketObjectArgs{ + Bucket: siteBucket.ID(), // Reference to the s3.Bucket object. + Content: pulumi.String(indexContent), + Acl: pulumi.String("public-read"), + Key: pulumi.String("index.html"), // Set the key of the object. + ContentType: pulumi.String("text/html; charset=utf-8"), // Set the MIME type of the file. + }, pulumi.DependsOn([]pulumi.Resource{ + publicAccessBlock, + ownershipControls, + website, + })); err != nil { + return err + } + + // Export the website URL. + ctx.Export("websiteUrl", website.WebsiteEndpoint) + return nil } ``` @@ -241,75 +258,63 @@ This tutorial is based on the [`InlineProgram` example](https://github.com/pulum var program = PulumiFn.Create(() => { // Create a bucket and expose a website index document. - var siteBucket = new Pulumi.Aws.S3.Bucket( - "s3-website-bucket", - new Pulumi.Aws.S3.BucketArgs - { - Website = new Pulumi.Aws.S3.Inputs.BucketWebsiteArgs - { - IndexDocument = "index.html", - }, - }); + var siteBucket = new Pulumi.Aws.S3.Bucket("s3-website-bucket"); - const string indexContent = @" + const string indexContent = @" - Hello S3 + Hello S3

Hello, world!

Made with ❤️ with Pulumi

- -"; +"; - // Write our index.html into the site bucket. - var @object = new Pulumi.Aws.S3.BucketObject( - "index", - new Pulumi.Aws.S3.BucketObjectArgs + var ownershipControls = new Aws.S3.BucketOwnershipControls("ownership-controls", new() + { + Bucket = siteBucket.Id, + Rule = new Aws.S3.Inputs.BucketOwnershipControlsRuleArgs { - Bucket = siteBucket.BucketName, // Reference to the s3 bucket object. - Content = indexContent, - Key = "index.html", // Set the key of the object. - ContentType = "text/html; charset=utf-8", // Set the MIME type of the file. - }); + ObjectOwnership = "ObjectWriter", + }, + }); + + var publicAccessBlock = new Aws.S3.BucketPublicAccessBlock("public-access-block", new() + { + Bucket = siteBucket.Id, + BlockPublicAcls = false, + }); - var bucketPolicyDocument = siteBucket.Arn.Apply(bucketArn => + var website = new Aws.S3.BucketWebsiteConfigurationV2("website", new() { - return Output.Create(Pulumi.Aws.Iam.GetPolicyDocument.InvokeAsync( - new Pulumi.Aws.Iam.GetPolicyDocumentArgs - { - Statements = new List - { - new Pulumi.Aws.Iam.Inputs.GetPolicyDocumentStatementArgs - { - Effect = "Allow", - Principals = new List - { - new Pulumi.Aws.Iam.Inputs.GetPolicyDocumentStatementPrincipalArgs - { - Identifiers = new List { "*" }, - Type = "AWS", - }, - }, - Actions = new List { "s3:GetObject" }, - Resources = new List { $"{bucketArn}/*" }, - }, - }, - })); + Bucket = siteBucket.Id, + IndexDocument = new Aws.S3.Inputs.BucketWebsiteConfigurationV2IndexDocumentArgs + { + Suffix = "index.html", + }, }); - // Set the access policy for the bucket so all objects are readable. - new Pulumi.Aws.S3.BucketPolicy( - "bucket-policy", - new Pulumi.Aws.S3.BucketPolicyArgs + // Write our index.html into the site bucket. + var @object = new Pulumi.Aws.S3.BucketObject("index", new Pulumi.Aws.S3.BucketObjectArgs + { + Bucket = siteBucket.BucketName, // Reference to the s3 bucket object. + Content = indexContent, + Acl = "public-read", + Key = "index.html", // Set the key of the object. + ContentType = "text/html; charset=utf-8", // Set the MIME type of the file. + }, new CustomResourceOptions + { + DependsOn = { - Bucket = siteBucket.BucketName, - Policy = bucketPolicyDocument.Apply(x => x.Json), - }); + publicAccessBlock, + ownershipControls, + website, + }, + }); // Export the website url. return new Dictionary { - ["website_url"] = siteBucket.WebsiteEndpoint, + ["website_url"] = website.WebsiteEndpoint }; }); ```