alicloud_oss_bucket
Provides a resource to create a oss bucket and set its attribution.
-> NOTE: The bucket namespace is shared by all users of the OSS system. Please set bucket name as unique as possible.
-> NOTE: Available since v1.2.0.
Example Usage
Private Bucket
resource "random_integer" "default" {
max = 99999
min = 10000
}
resource "alicloud_oss_bucket" "bucket-acl" {
bucket = "example-value-${random_integer.default.result}"
}
resource "alicloud_oss_bucket_acl" "bucket-acl" {
bucket = alicloud_oss_bucket.bucket-acl.bucket
acl = "private"
}
Static Website
resource "random_integer" "default" {
max = 99999
min = 10000
}
resource "alicloud_oss_bucket" "bucket-website" {
bucket = "example-value-${random_integer.default.result}"
website {
index_document = "index.html"
error_document = "error.html"
}
}
Enable Logging
resource "random_integer" "default" {
max = 99999
min = 10000
}
resource "alicloud_oss_bucket" "bucket-target" {
bucket = "example-value-${random_integer.default.result}"
}
resource "alicloud_oss_bucket_acl" "bucket-target" {
bucket = alicloud_oss_bucket.bucket-target.bucket
acl = "public-read"
}
resource "alicloud_oss_bucket" "bucket-logging" {
bucket = "example-logging-${random_integer.default.result}"
logging {
target_bucket = alicloud_oss_bucket.bucket-target.id
target_prefix = "log/"
}
}
Referer configuration
resource "random_integer" "default" {
max = 99999
min = 10000
}
resource "alicloud_oss_bucket" "bucket-referer" {
bucket = "example-value-${random_integer.default.result}"
referer_config {
allow_empty = false
referers = ["http://www.aliyun.com", "https://www.aliyun.com"]
}
}
resource "alicloud_oss_bucket_acl" "default" {
bucket = alicloud_oss_bucket.bucket-referer.bucket
acl = "private"
}
Set lifecycle rule
resource "random_integer" "default" {
max = 99999
min = 10000
}
resource "alicloud_oss_bucket" "bucket-lifecycle1" {
bucket = "example-lifecycle1-${random_integer.default.result}"
lifecycle_rule {
id = "rule-days"
prefix = "path1/"
enabled = true
expiration {
days = 365
}
}
lifecycle_rule {
id = "rule-date"
prefix = "path2/"
enabled = true
expiration {
date = "2018-01-12"
}
}
}
resource "alicloud_oss_bucket_acl" "bucket-lifecycle1" {
bucket = alicloud_oss_bucket.bucket-lifecycle1.bucket
acl = "public-read"
}
resource "alicloud_oss_bucket" "bucket-lifecycle2" {
bucket = "example-lifecycle2-${random_integer.default.result}"
lifecycle_rule {
id = "rule-days-transition"
prefix = "path3/"
enabled = true
transitions {
days = "3"
storage_class = "IA"
}
transitions {
days = "30"
storage_class = "Archive"
}
}
}
resource "alicloud_oss_bucket_acl" "bucket-lifecycle2" {
bucket = alicloud_oss_bucket.bucket-lifecycle2.bucket
acl = "public-read"
}
resource "alicloud_oss_bucket" "bucket-lifecycle3" {
bucket = "example-lifecycle3-${random_integer.default.result}"
lifecycle_rule {
id = "rule-days-transition"
prefix = "path3/"
enabled = true
transitions {
created_before_date = "2022-11-11"
storage_class = "IA"
}
transitions {
created_before_date = "2021-11-11"
storage_class = "Archive"
}
}
}
resource "alicloud_oss_bucket_acl" "bucket-lifecycle3" {
bucket = alicloud_oss_bucket.bucket-lifecycle3.bucket
acl = "public-read"
}
resource "alicloud_oss_bucket" "bucket-lifecycle4" {
bucket = "example-lifecycle4-${random_integer.default.result}"
lifecycle_rule {
id = "rule-abort-multipart-upload"
prefix = "path3/"
enabled = true
abort_multipart_upload {
days = 128
}
}
}
resource "alicloud_oss_bucket_acl" "bucket-lifecycle4" {
bucket = alicloud_oss_bucket.bucket-lifecycle4.bucket
acl = "public-read"
}
resource "alicloud_oss_bucket" "bucket-versioning-lifecycle" {
bucket = "example-lifecycle5-${random_integer.default.result}"
versioning {
status = "Enabled"
}
lifecycle_rule {
id = "rule-versioning"
prefix = "path1/"
enabled = true
expiration {
expired_object_delete_marker = true
}
noncurrent_version_expiration {
days = 240
}
noncurrent_version_transition {
days = 180
storage_class = "Archive"
}
noncurrent_version_transition {
days = 60
storage_class = "IA"
}
}
}
resource "alicloud_oss_bucket_acl" "bucket-versioning-lifecycle" {
bucket = alicloud_oss_bucket.bucket-versioning-lifecycle.bucket
acl = "private"
}
resource "alicloud_oss_bucket" "bucket-access-monitor-lifecycle" {
bucket = format("example-lifecycle6-%s", random_integer.default.result)
access_monitor {
status = "Enabled"
}
lifecycle_rule {
id = "rule-days-transition"
prefix = "path/"
enabled = true
transitions {
days = 30
storage_class = "IA"
is_access_time = true
return_to_std_when_visit = true
}
}
}
resource "alicloud_oss_bucket_acl" "bucket-access-monitor-lifecycle" {
bucket = alicloud_oss_bucket.bucket-access-monitor-lifecycle.bucket
acl = "private"
}
resource "alicloud_oss_bucket" "bucket-tag-lifecycle" {
bucket = format("example-lifecycle7-%s", random_integer.default.result)
lifecycle_rule {
id = "rule-days-transition"
prefix = "path/"
enabled = true
transitions {
created_before_date = "2022-11-11"
storage_class = "IA"
}
}
tags = {
Created = "TF",
For = "example",
}
}
resource "alicloud_oss_bucket_acl" "bucket-tag-lifecycle" {
bucket = alicloud_oss_bucket.bucket-tag-lifecycle.bucket
acl = "private"
}
Set bucket policy
resource "random_integer" "default" {
max = 99999
min = 10000
}
resource "alicloud_oss_bucket" "bucket-policy" {
bucket = "example-policy-${random_integer.default.result}"
policy = <<POLICY
{"Statement":
[{"Action":
["oss:PutObject", "oss:GetObject", "oss:DeleteBucket"],
"Effect":"Allow",
"Resource":
["acs:oss:*:*:*"]}],
"Version":"1"}
POLICY
}
resource "alicloud_oss_bucket_acl" "default" {
bucket = alicloud_oss_bucket.bucket-policy.bucket
acl = "private"
}
IA Bucket
resource "random_integer" "default" {
max = 99999
min = 10000
}
resource "alicloud_oss_bucket" "default" {
bucket = "example-${random_integer.default.result}"
storage_class = "IA"
}
Set bucket server-side encryption rule
resource "random_integer" "default" {
max = 99999
min = 10000
}
resource "alicloud_oss_bucket" "bucket-sserule" {
bucket = "terraform-example-${random_integer.default.result}"
server_side_encryption_rule {
sse_algorithm = "AES256"
}
}
resource "alicloud_oss_bucket_acl" "bucket-sserule" {
bucket = alicloud_oss_bucket.bucket-sserule.bucket
acl = "private"
}
resource "alicloud_kms_key" "kms" {
description = "terraform-example"
pending_window_in_days = "7"
status = "Enabled"
}
resource "alicloud_oss_bucket" "bucket-kms" {
bucket = "terraform-example-kms-${random_integer.default.result}"
server_side_encryption_rule {
sse_algorithm = "KMS"
kms_master_key_id = alicloud_kms_key.kms.id
}
}
resource "alicloud_oss_bucket_acl" "bucket-kms" {
bucket = alicloud_oss_bucket.bucket-kms.bucket
acl = "private"
}
Set bucket tags
resource "random_integer" "default" {
max = 99999
min = 10000
}
resource "alicloud_oss_bucket" "bucket-tags" {
bucket = "terraform-example-${random_integer.default.result}"
tags = {
key1 = "value1"
key2 = "value2"
}
}
resource "alicloud_oss_bucket_acl" "bucket-tags" {
bucket = alicloud_oss_bucket.bucket-tags.bucket
acl = "private"
}
Enable bucket versioning
resource "random_integer" "default" {
max = 99999
min = 10000
}
resource "alicloud_oss_bucket" "bucket-versioning" {
bucket = "terraform-example-${random_integer.default.result}"
versioning {
status = "Enabled"
}
}
resource "alicloud_oss_bucket_acl" "default" {
bucket = alicloud_oss_bucket.bucket-versioning.bucket
acl = "private"
}
Set bucket redundancy type
resource "random_integer" "default" {
max = 99999
min = 10000
}
resource "alicloud_oss_bucket" "bucket-redundancytype" {
bucket = "terraform-example-${random_integer.default.result}"
redundancy_type = "ZRS"
# ... other configuration ...
}
Set bucket accelerate configuration
resource "random_integer" "default" {
max = 99999
min = 10000
}
resource "alicloud_oss_bucket" "bucket-accelerate" {
bucket = "terraform-example-${random_integer.default.result}"
transfer_acceleration {
enabled = false
}
}
Set bucket resource group id
resource "random_integer" "default" {
max = 99999
min = 10000
}
data "alicloud_resource_manager_resource_groups" "default" {
name_regex = "default"
}
resource "alicloud_oss_bucket" "bucket-accelerate" {
bucket = "terraform-example-${random_integer.default.result}"
resource_group_id = data.alicloud_resource_manager_resource_groups.default.groups.0.id
}
Argument Reference
The following arguments are supported:
bucket
- (Optional, ForceNew) The name of the bucket. If omitted, Terraform will assign a random and unique name.acl
- (Optional, Computed, Deprecated since 1.220.0) The canned ACL to apply. Can be "private", "public-read" and "public-read-write". This property has been deprecated since 1.220.0, please use the resourcealicloud_oss_bucket_acl
instead.cors_rule
- (Optional) A rule of Cross-Origin Resource Sharing. The items of core rule are no more than 10 for every OSS bucket. Seecors_rule
below.website
- (Optional) A website configuration. Seewebsite
below.logging
- (Optional) A Settings of bucket logging. Seelogging
below.logging_isenable
- (Optional, Deprecated from 1.37.0.) The flag of using logging enable container. Defaults true.referer_config
- (Optional, Deprecated since 1.220.0) The configuration of referer. This property has been deprecated since 1.220.0, please use the resourcealicloud_oss_bucket_referer
instead. Seereferer_config
below.lifecycle_rule
- (Optional) A configuration of object lifecycle management. Seelifecycle_rule
below.policy
- (Optional, Available since 1.41.0, Deprecated since 1.220.0) Json format text of bucket policy bucket policy management. This property has been deprecated since 1.220.0, please use the resourcealicloud_oss_bucket_policy
instead.storage_class
- (Optional, ForceNew) The storage class to apply. Can be "Standard", "IA", "Archive", "ColdArchive" and "DeepColdArchive". Defaults to "Standard". "ColdArchive" is available since 1.203.0. "DeepColdArchive" is available since 1.209.0.redundancy_type
- (Optional, ForceNew, Available since 1.91.0) The redundancy type to enable. Can be "LRS", and "ZRS". Defaults to "LRS".server_side_encryption_rule
- (Optional, Available since 1.45.0) A configuration of server-side encryption. Seeserver_side_encryption_rule
below.tags
- (Optional, Available since 1.45.0) A mapping of tags to assign to the bucket. The items are no more than 10 for a bucket.versioning
- (Optional, Available since 1.45.0) A state of versioning. Seeversioning
below.force_destroy
- (Optional, Available since 1.45.0) A boolean that indicates all objects should be deleted from the bucket so that the bucket can be destroyed without error. These objects are not recoverable. Defaults to "false".transfer_acceleration
- (Optional, Available since 1.123.1) A transfer acceleration status of a bucket. Seetransfer_acceleration
below.lifecycle_rule_allow_same_action_overlap
- (Optional, Available since 1.208.1) A boolean that indicates lifecycle rules allow prefix overlap.access_monitor
- (Optional, Available since 1.208.1) A access monitor status of a bucket. Seeaccess_monitor
below.resource_group_id
- (Optional, Available since 1.219.0) The ID of the resource group to which the bucket belongs.
cors_rule
The cors_rule configuration block supports the following:
allowed_headers
- (Optional) Specifies which headers are allowed.allowed_methods
- (Required) Specifies which methods are allowed. Can be GET, PUT, POST, DELETE or HEAD.allowed_origins
- (Required) Specifies which origins are allowed.expose_headers
- (Optional) Specifies expose header in the response.max_age_seconds
- (Optional) Specifies time in seconds that browser can cache the response for a preflight request.
website
The website configuration block supports the following:
index_document
- (Required) Alicloud OSS returns this index document when requests are made to the root domain or any of the subfolders.error_document
- (Optional) An absolute path to the document to return in case of a 4XX error.
logging
The logging configuration block supports the following:
target_bucket
- (Required) The name of the bucket that will receive the log objects.target_prefix
- (Optional) To specify a key prefix for log objects.
referer_config
The referer_config configuration block supports the following:
allow_empty
- (Optional, Type: bool) Allows referer to be empty. Defaults false.referers
- (Required, Type: list) The list of referer.
lifecycle_rule
The lifecycle_rule configuration block supports the following:
id
- (Optional) Unique identifier for the rule. If omitted, OSS bucket will assign a unique name.prefix
- (Optional, Available since v1.90.0) Object key prefix identifying one or more objects to which the rule applies. Default value is null, the rule applies to all objects in a bucket.enabled
- (Required, Type: bool) Specifies lifecycle rule status.expiration
- (Optional, Type: set) Specifies a period in the object's expire. Seeexpiration
below.transitions
- (Optional, Type: set, Available since 1.62.1) Specifies the time when an object is converted to the IA or archive storage class during a valid life cycle. Seetransitions
below.abort_multipart_upload
- (Optional, Type: set, Available since 1.121.2) Specifies the number of days after initiating a multipart upload when the multipart upload must be completed. Seeabort_multipart_upload
below.noncurrent_version_expiration
- (Optional, Type: set, Available since 1.121.2) Specifies when noncurrent object versions expire. Seenoncurrent_version_expiration
below.noncurrent_version_transition
- (Optional, Type: set, Available since 1.121.2) Specifies when noncurrent object versions transitions. Seenoncurrent_version_transition
below.tags
- (Optional, Available since 1.209.0) Key-value map of resource tags. All of these tags must exist in the object's tag set in order for the rule to apply.filter
- (Optional, Available since 1.209.1) Configuration block used to identify objects that a Lifecycle rule applies to. Seefilter
below.
NOTE
: At least one of expiration, transitions, abort_multipart_upload, noncurrent_version_expiration and noncurrent_version_transition should be configured.
lifecycle_rule-expiration
The expiration configuration block supports the following:
date
- (Optional) Specifies the date after which you want the corresponding action to take effect. The value obeys ISO8601 format like2017-03-09
.days
- (Optional, Type: int) Specifies the number of days after object creation when the specific rule action takes effect.created_before_date
- (Optional, Available since 1.121.2) Specifies the time before which the rules take effect. The date must conform to the ISO8601 format and always be UTC 00:00. For example: 2002-10-11T00:00:00.000Z indicates that objects updated before 2002-10-11T00:00:00.000Z are deleted or converted to another storage class, and objects updated after this time (including this time) are not deleted or converted.expired_object_delete_marker
- (Optional, Type: bool, Available since 1.121.2) On a versioned bucket (versioning-enabled or versioning-suspended bucket), you can add this element in the lifecycle configuration to direct OSS to delete expired object delete markers. This cannot be specified with Days, Date or CreatedBeforeDate in a Lifecycle Expiration Policy.
NOTE
: One and only one of "date", "days", "created_before_date" and "expired_object_delete_marker" can be specified in one expiration configuration.
lifecycle_rule-transitions
The transitions configuration block supports the following:
created_before_date
- (Optional) Specifies the time before which the rules take effect. The date must conform to the ISO8601 format and always be UTC 00:00. For example: 2002-10-11T00:00:00.000Z indicates that objects updated before 2002-10-11T00:00:00.000Z are deleted or converted to another storage class, and objects updated after this time (including this time) are not deleted or converted.days
- (Optional, Type: int) Specifies the number of days after object creation when the specific rule action takes effect.storage_class
- (Required) Specifies the storage class that objects that conform to the rule are converted into. The storage class of the objects in a bucket of the IA storage class can be converted into Archive but cannot be converted into Standard. Values:IA
,Archive
,ColdArchive
,DeepColdArchive
. ColdArchive is available since 1.203.0. DeepColdArchive is available since 1.209.0.is_access_time
- (Optional, Type: bool, Available since 1.208.1) Specifies whether the lifecycle rule applies to objects based on their last access time. If set totrue
, the rule applies to objects based on their last access time; if set tofalse
, the rule applies to objects based on their last modified time. If configure the rule based on the last access time, please enableaccess_monitor
first.return_to_std_when_visit
- (Optional, Type: bool, Available since 1.208.1) Specifies whether to convert the storage class of non-Standard objects back to Standard after the objects are accessed. It takes effect only when the IsAccessTime parameter is set to true. If set totrue
, converts the storage class of the objects to Standard; if set tofalse
, does not convert the storage class of the objects to Standard.NOTE
: One and only one of "created_before_date" and "days" can be specified in one transition configuration.
lifecycle_rule-abort_multipart_upload
The abort_multipart_upload configuration block supports the following:
created_before_date
- (Optional) Specifies the time before which the rules take effect. The date must conform to the ISO8601 format and always be UTC 00:00. For example: 2002-10-11T00:00:00.000Z indicates that parts created before 2002-10-11T00:00:00.000Z are deleted, and parts created after this time (including this time) are not deleted.days
- (Optional, Type: int) Specifies the number of days after object creation when the specific rule action takes effect.
NOTE
: One and only one of "created_before_date" and "days" can be specified in one abort_multipart_upload configuration.
lifecycle_rule-noncurrent_version_expiration
The noncurrent_version_expiration configuration block supports the following:
days
- (Required, Type: int) Specifies the number of days noncurrent object versions expire.
lifecycle_rule-noncurrent_version_transition
The noncurrent_version_transition configuration block supports the following:
days
- (Required, Type: int) Specifies the number of days noncurrent object versions transition.storage_class
- (Required) Specifies the storage class that objects that conform to the rule are converted into. The storage class of the objects in a bucket of the IA storage class can be converted into Archive but cannot be converted into Standard. Values:IA
,Archive
,CodeArchive
,DeepColdArchive
. ColdArchive is available since 1.203.0. DeepColdArchive is available since 1.209.0.is_access_time
- (Optional, Type: bool, Available since 1.208.1) Specifies whether the lifecycle rule applies to objects based on their last access time. If set totrue
, the rule applies to objects based on their last access time; if set tofalse
, the rule applies to objects based on their last modified time. If configure the rule based on the last access time, please enableaccess_monitor
first.return_to_std_when_visit
- (Optional, Type: bool, Available since 1.208.1) Specifies whether to convert the storage class of non-Standard objects back to Standard after the objects are accessed. It takes effect only when the IsAccessTime parameter is set to true. If set totrue
, converts the storage class of the objects to Standard; if set tofalse
, does not convert the storage class of the objects to Standard.
lifecycle_rule-filter
The filter configuration block supports the following:
not
- (Optional) The condition that is matched by objects to which the lifecycle rule does not apply. Seenot
below.object_size_greater_than
- (Optional) Minimum object size (in bytes) to which the rule applies.object_size_less_than
- (Optional) Maximum object size (in bytes) to which the rule applies.
lifecycle_rule-filter-not
The not configuration block supports the following:
prefix
- (Optional) The prefix in the names of the objects to which the lifecycle rule does not apply.tag
- (Optional) The tag of the objects to which the lifecycle rule does not apply. Seetag
below.
lifecycle_rule-filter-not-tag
The tag configuration block supports the following:
key
- (Required) The key of the tag that is specified for the objects.value
- (Required) The value of the tag that is specified for the objects.
server_side_encryption_rule
The server_side_encryption_rule configuration block supports the following:
sse_algorithm
- (Required) The server-side encryption algorithm to use. Possible values:AES256
andKMS
.kms_master_key_id
- (Optional, Available since 1.92.0) The alibaba cloud KMS master key ID used for the SSE-KMS encryption.
versioning
The versioning configuration block supports the following:
status
- (Required) Specifies the versioning state of a bucket. Valid values:Enabled
andSuspended
.
transfer_acceleration
The transfer_acceleration configuration block supports the following:
enabled
- (Required, Type: bool) Specifies the accelerate status of a bucket.
access_monitor
The access_monitor configuration block supports the following:
status
- (Optional) The access monitor state of a bucket. If you want to manage objects based on the last access time of the objects, specifies the status toEnabled
. Valid values:Enabled
andDisabled
.
Attributes Reference
The following attributes are exported:
id
- The name of the bucket.creation_date
- The creation date of the bucket.extranet_endpoint
- The extranet access endpoint of the bucket.intranet_endpoint
- The intranet access endpoint of the bucket.location
- The location of the bucket.owner
- The bucket owner.
Import
OSS bucket can be imported using the bucket name, e.g.
$ terraform import alicloud_oss_bucket.bucket bucket-12345678