Bucket Args
Creates a new bucket in Google cloud storage service (GCS). Once a bucket has been created, its location can't be changed. For more information see the official documentation and API. Note: If the project id is not set on the resource or in the provider block it will be dynamically determined which will require enabling the compute api.
Example Usage
Creating A Private Bucket In Standard Storage, In The EU Region. Bucket Configured As Static Website And CORS Configurations
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const static_site = new gcp.storage.Bucket("static-site", {
name: "image-store.com",
location: "EU",
forceDestroy: true,
uniformBucketLevelAccess: true,
website: {
mainPageSuffix: "index.html",
notFoundPage: "404.html",
},
cors: [{
origins: ["http://image-store.com"],
methods: [
"GET",
"HEAD",
"PUT",
"POST",
"DELETE",
],
responseHeaders: ["*"],
maxAgeSeconds: 3600,
}],
});
import pulumi
import pulumi_gcp as gcp
static_site = gcp.storage.Bucket("static-site",
name="image-store.com",
location="EU",
force_destroy=True,
uniform_bucket_level_access=True,
website={
"main_page_suffix": "index.html",
"not_found_page": "404.html",
},
cors=[{
"origins": ["http://image-store.com"],
"methods": [
"GET",
"HEAD",
"PUT",
"POST",
"DELETE",
],
"response_headers": ["*"],
"max_age_seconds": 3600,
}])
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var static_site = new Gcp.Storage.Bucket("static-site", new()
{
Name = "image-store.com",
Location = "EU",
ForceDestroy = true,
UniformBucketLevelAccess = true,
Website = new Gcp.Storage.Inputs.BucketWebsiteArgs
{
MainPageSuffix = "index.html",
NotFoundPage = "404.html",
},
Cors = new[]
{
new Gcp.Storage.Inputs.BucketCorArgs
{
Origins = new[]
{
"http://image-store.com",
},
Methods = new[]
{
"GET",
"HEAD",
"PUT",
"POST",
"DELETE",
},
ResponseHeaders = new[]
{
"*",
},
MaxAgeSeconds = 3600,
},
},
});
});
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := storage.NewBucket(ctx, "static-site", &storage.BucketArgs{
Name: pulumi.String("image-store.com"),
Location: pulumi.String("EU"),
ForceDestroy: pulumi.Bool(true),
UniformBucketLevelAccess: pulumi.Bool(true),
Website: &storage.BucketWebsiteArgs{
MainPageSuffix: pulumi.String("index.html"),
NotFoundPage: pulumi.String("404.html"),
},
Cors: storage.BucketCorArray{
&storage.BucketCorArgs{
Origins: pulumi.StringArray{
pulumi.String("http://image-store.com"),
},
Methods: pulumi.StringArray{
pulumi.String("GET"),
pulumi.String("HEAD"),
pulumi.String("PUT"),
pulumi.String("POST"),
pulumi.String("DELETE"),
},
ResponseHeaders: pulumi.StringArray{
pulumi.String("*"),
},
MaxAgeSeconds: pulumi.Int(3600),
},
},
})
if err != nil {
return err
}
return nil
})
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.storage.Bucket;
import com.pulumi.gcp.storage.BucketArgs;
import com.pulumi.gcp.storage.inputs.BucketWebsiteArgs;
import com.pulumi.gcp.storage.inputs.BucketCorArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var static_site = new Bucket("static-site", BucketArgs.builder()
.name("image-store.com")
.location("EU")
.forceDestroy(true)
.uniformBucketLevelAccess(true)
.website(BucketWebsiteArgs.builder()
.mainPageSuffix("index.html")
.notFoundPage("404.html")
.build())
.cors(BucketCorArgs.builder()
.origins("http://image-store.com")
.methods(
"GET",
"HEAD",
"PUT",
"POST",
"DELETE")
.responseHeaders("*")
.maxAgeSeconds(3600)
.build())
.build());
}
}
resources:
static-site:
type: gcp:storage:Bucket
properties:
name: image-store.com
location: EU
forceDestroy: true
uniformBucketLevelAccess: true
website:
mainPageSuffix: index.html
notFoundPage: 404.html
cors:
- origins:
- http://image-store.com
methods:
- GET
- HEAD
- PUT
- POST
- DELETE
responseHeaders:
- '*'
maxAgeSeconds: 3600
Life Cycle Settings For Storage Bucket Objects
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const auto_expire = new gcp.storage.Bucket("auto-expire", {
name: "auto-expiring-bucket",
location: "US",
forceDestroy: true,
lifecycleRules: [
{
condition: {
age: 3,
},
action: {
type: "Delete",
},
},
{
condition: {
age: 1,
},
action: {
type: "AbortIncompleteMultipartUpload",
},
},
],
});
import pulumi
import pulumi_gcp as gcp
auto_expire = gcp.storage.Bucket("auto-expire",
name="auto-expiring-bucket",
location="US",
force_destroy=True,
lifecycle_rules=[
{
"condition": {
"age": 3,
},
"action": {
"type": "Delete",
},
},
{
"condition": {
"age": 1,
},
"action": {
"type": "AbortIncompleteMultipartUpload",
},
},
])
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var auto_expire = new Gcp.Storage.Bucket("auto-expire", new()
{
Name = "auto-expiring-bucket",
Location = "US",
ForceDestroy = true,
LifecycleRules = new[]
{
new Gcp.Storage.Inputs.BucketLifecycleRuleArgs
{
Condition = new Gcp.Storage.Inputs.BucketLifecycleRuleConditionArgs
{
Age = 3,
},
Action = new Gcp.Storage.Inputs.BucketLifecycleRuleActionArgs
{
Type = "Delete",
},
},
new Gcp.Storage.Inputs.BucketLifecycleRuleArgs
{
Condition = new Gcp.Storage.Inputs.BucketLifecycleRuleConditionArgs
{
Age = 1,
},
Action = new Gcp.Storage.Inputs.BucketLifecycleRuleActionArgs
{
Type = "AbortIncompleteMultipartUpload",
},
},
},
});
});
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := storage.NewBucket(ctx, "auto-expire", &storage.BucketArgs{
Name: pulumi.String("auto-expiring-bucket"),
Location: pulumi.String("US"),
ForceDestroy: pulumi.Bool(true),
LifecycleRules: storage.BucketLifecycleRuleArray{
&storage.BucketLifecycleRuleArgs{
Condition: &storage.BucketLifecycleRuleConditionArgs{
Age: pulumi.Int(3),
},
Action: &storage.BucketLifecycleRuleActionArgs{
Type: pulumi.String("Delete"),
},
},
&storage.BucketLifecycleRuleArgs{
Condition: &storage.BucketLifecycleRuleConditionArgs{
Age: pulumi.Int(1),
},
Action: &storage.BucketLifecycleRuleActionArgs{
Type: pulumi.String("AbortIncompleteMultipartUpload"),
},
},
},
})
if err != nil {
return err
}
return nil
})
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.storage.Bucket;
import com.pulumi.gcp.storage.BucketArgs;
import com.pulumi.gcp.storage.inputs.BucketLifecycleRuleArgs;
import com.pulumi.gcp.storage.inputs.BucketLifecycleRuleConditionArgs;
import com.pulumi.gcp.storage.inputs.BucketLifecycleRuleActionArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var auto_expire = new Bucket("auto-expire", BucketArgs.builder()
.name("auto-expiring-bucket")
.location("US")
.forceDestroy(true)
.lifecycleRules(
BucketLifecycleRuleArgs.builder()
.condition(BucketLifecycleRuleConditionArgs.builder()
.age(3)
.build())
.action(BucketLifecycleRuleActionArgs.builder()
.type("Delete")
.build())
.build(),
BucketLifecycleRuleArgs.builder()
.condition(BucketLifecycleRuleConditionArgs.builder()
.age(1)
.build())
.action(BucketLifecycleRuleActionArgs.builder()
.type("AbortIncompleteMultipartUpload")
.build())
.build())
.build());
}
}
resources:
auto-expire:
type: gcp:storage:Bucket
properties:
name: auto-expiring-bucket
location: US
forceDestroy: true
lifecycleRules:
- condition:
age: 3
action:
type: Delete
- condition:
age: 1
action:
type: AbortIncompleteMultipartUpload
Life Cycle Settings For Storage Bucket Objects With Send_age_if_zero
Disabled
When creating a life cycle condition that does not also include an age
field, a default age
of 0 will be set. Set the send_age_if_zero
flag to false
to prevent this and avoid any potentially unintended interactions.
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const no_age_enabled = new gcp.storage.Bucket("no-age-enabled", {
name: "no-age-enabled-bucket",
location: "US",
forceDestroy: true,
lifecycleRules: [{
action: {
type: "Delete",
},
condition: {
daysSinceNoncurrentTime: 3,
sendAgeIfZero: false,
},
}],
});
import pulumi
import pulumi_gcp as gcp
no_age_enabled = gcp.storage.Bucket("no-age-enabled",
name="no-age-enabled-bucket",
location="US",
force_destroy=True,
lifecycle_rules=[{
"action": {
"type": "Delete",
},
"condition": {
"days_since_noncurrent_time": 3,
"send_age_if_zero": False,
},
}])
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var no_age_enabled = new Gcp.Storage.Bucket("no-age-enabled", new()
{
Name = "no-age-enabled-bucket",
Location = "US",
ForceDestroy = true,
LifecycleRules = new[]
{
new Gcp.Storage.Inputs.BucketLifecycleRuleArgs
{
Action = new Gcp.Storage.Inputs.BucketLifecycleRuleActionArgs
{
Type = "Delete",
},
Condition = new Gcp.Storage.Inputs.BucketLifecycleRuleConditionArgs
{
DaysSinceNoncurrentTime = 3,
SendAgeIfZero = false,
},
},
},
});
});
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := storage.NewBucket(ctx, "no-age-enabled", &storage.BucketArgs{
Name: pulumi.String("no-age-enabled-bucket"),
Location: pulumi.String("US"),
ForceDestroy: pulumi.Bool(true),
LifecycleRules: storage.BucketLifecycleRuleArray{
&storage.BucketLifecycleRuleArgs{
Action: &storage.BucketLifecycleRuleActionArgs{
Type: pulumi.String("Delete"),
},
Condition: &storage.BucketLifecycleRuleConditionArgs{
DaysSinceNoncurrentTime: pulumi.Int(3),
SendAgeIfZero: pulumi.Bool(false),
},
},
},
})
if err != nil {
return err
}
return nil
})
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.storage.Bucket;
import com.pulumi.gcp.storage.BucketArgs;
import com.pulumi.gcp.storage.inputs.BucketLifecycleRuleArgs;
import com.pulumi.gcp.storage.inputs.BucketLifecycleRuleActionArgs;
import com.pulumi.gcp.storage.inputs.BucketLifecycleRuleConditionArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var no_age_enabled = new Bucket("no-age-enabled", BucketArgs.builder()
.name("no-age-enabled-bucket")
.location("US")
.forceDestroy(true)
.lifecycleRules(BucketLifecycleRuleArgs.builder()
.action(BucketLifecycleRuleActionArgs.builder()
.type("Delete")
.build())
.condition(BucketLifecycleRuleConditionArgs.builder()
.daysSinceNoncurrentTime(3)
.sendAgeIfZero(false)
.build())
.build())
.build());
}
}
resources:
no-age-enabled:
type: gcp:storage:Bucket
properties:
name: no-age-enabled-bucket
location: US
forceDestroy: true
lifecycleRules:
- action:
type: Delete
condition:
daysSinceNoncurrentTime: 3
sendAgeIfZero: false
Enabling Public Access Prevention
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const no_public_access = new gcp.storage.Bucket("no-public-access", {
name: "no-public-access-bucket",
location: "US",
forceDestroy: true,
publicAccessPrevention: "enforced",
});
import pulumi
import pulumi_gcp as gcp
no_public_access = gcp.storage.Bucket("no-public-access",
name="no-public-access-bucket",
location="US",
force_destroy=True,
public_access_prevention="enforced")
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var no_public_access = new Gcp.Storage.Bucket("no-public-access", new()
{
Name = "no-public-access-bucket",
Location = "US",
ForceDestroy = true,
PublicAccessPrevention = "enforced",
});
});
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := storage.NewBucket(ctx, "no-public-access", &storage.BucketArgs{
Name: pulumi.String("no-public-access-bucket"),
Location: pulumi.String("US"),
ForceDestroy: pulumi.Bool(true),
PublicAccessPrevention: pulumi.String("enforced"),
})
if err != nil {
return err
}
return nil
})
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.storage.Bucket;
import com.pulumi.gcp.storage.BucketArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var no_public_access = new Bucket("no-public-access", BucketArgs.builder()
.name("no-public-access-bucket")
.location("US")
.forceDestroy(true)
.publicAccessPrevention("enforced")
.build());
}
}
resources:
no-public-access:
type: gcp:storage:Bucket
properties:
name: no-public-access-bucket
location: US
forceDestroy: true
publicAccessPrevention: enforced
Enabling Hierarchical Namespace
import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
const hns_enabled = new gcp.storage.Bucket("hns-enabled", {
name: "hns-enabled-bucket",
location: "US",
forceDestroy: true,
hierarchicalNamespace: {
enabled: true,
},
});
import pulumi
import pulumi_gcp as gcp
hns_enabled = gcp.storage.Bucket("hns-enabled",
name="hns-enabled-bucket",
location="US",
force_destroy=True,
hierarchical_namespace={
"enabled": True,
})
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
return await Deployment.RunAsync(() =>
{
var hns_enabled = new Gcp.Storage.Bucket("hns-enabled", new()
{
Name = "hns-enabled-bucket",
Location = "US",
ForceDestroy = true,
HierarchicalNamespace = new Gcp.Storage.Inputs.BucketHierarchicalNamespaceArgs
{
Enabled = true,
},
});
});
package main
import (
"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := storage.NewBucket(ctx, "hns-enabled", &storage.BucketArgs{
Name: pulumi.String("hns-enabled-bucket"),
Location: pulumi.String("US"),
ForceDestroy: pulumi.Bool(true),
HierarchicalNamespace: &storage.BucketHierarchicalNamespaceArgs{
Enabled: pulumi.Bool(true),
},
})
if err != nil {
return err
}
return nil
})
}
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.storage.Bucket;
import com.pulumi.gcp.storage.BucketArgs;
import com.pulumi.gcp.storage.inputs.BucketHierarchicalNamespaceArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var hns_enabled = new Bucket("hns-enabled", BucketArgs.builder()
.name("hns-enabled-bucket")
.location("US")
.forceDestroy(true)
.hierarchicalNamespace(BucketHierarchicalNamespaceArgs.builder()
.enabled(true)
.build())
.build());
}
}
resources:
hns-enabled:
type: gcp:storage:Bucket
properties:
name: hns-enabled-bucket
location: US
forceDestroy: true
hierarchicalNamespace:
enabled: true
Import
Storage buckets can be imported using the name
or project/name
. If the project is not passed to the import command it will be inferred from the provider block or environment variables. If it cannot be inferred it will be queried from the Compute API (this will fail if the API is not enabled).
{{project_id}}/{{bucket}}
{{bucket}}
When using thepulumi import
command, Storage buckets can be imported using one of the formats above. For example:
$ pulumi import gcp:storage/bucket:Bucket default {{bucket}}
$ pulumi import gcp:storage/bucket:Bucket default {{project_id}}/{{bucket}}
false
in state. If you've set it to true
in config, run pulumi up
to update the value set in state. If you delete this resource before updating the value, objects in the bucket will not be destroyed.
Constructors
Properties
The bucket's Autoclass configuration. Structure is documented below.
The bucket's Cross-Origin Resource Sharing (CORS) configuration. Multiple blocks of this type are permitted. Structure is documented below.
The bucket's custom location configuration, which specifies the individual regions that comprise a dual-region bucket. If the bucket is designated a single or multi-region, the parameters are empty. Structure is documented below.
Whether or not to automatically apply an eventBasedHold to new objects added to the bucket.
Enables object retention on a storage bucket.
The bucket's encryption configuration. Structure is documented below.
When deleting a bucket, this boolean option will delete all contained objects. If you try to delete a bucket that contains objects, the provider will fail that run.
The bucket's hierarchical namespace policy, which defines the bucket capability to handle folders in logical structure. Structure is documented below. To use this configuration, uniform_bucket_level_access
must be enabled on bucket.
The bucket's Lifecycle Rules configuration. Multiple blocks of this type are permitted. Structure is documented below.
The GCS location.
The bucket's Access & Storage Logs configuration. Structure is documented below.
Prevents public access to a bucket. Acceptable values are "inherited" or "enforced". If "inherited", the bucket uses public access prevention only if the bucket is subject to the public access prevention organization policy constraint. Defaults to "inherited".
Enables Requester Pays on a storage bucket.
Configuration of the bucket's data retention policy for how long objects in the bucket should be retained. Structure is documented below.
The recovery point objective for cross-region replication of the bucket. Applicable only for dual and multi-region buckets. "DEFAULT"
sets default replication. "ASYNC_TURBO"
value enables turbo replication, valid for dual-region buckets only. See Turbo Replication for more information. If rpo is not specified at bucket creation, it defaults to "DEFAULT"
for dual and multi-region buckets. NOTE If used with single-region bucket, It will throw an error.
The bucket's soft delete policy, which defines the period of time that soft-deleted objects will be retained, and cannot be permanently deleted. If it is not provided, by default Google Cloud Storage sets this to default soft delete policy
The Storage Class of the new bucket. Supported values include: STANDARD
, MULTI_REGIONAL
, REGIONAL
, NEARLINE
, COLDLINE
, ARCHIVE
.
Enables Uniform bucket-level access access to a bucket.
The bucket's Versioning configuration. Structure is documented below.
Configuration if the bucket acts as a website. Structure is documented below.