Я использую Terraform для создания корзины в S3 и хочу добавить в нее «папки» и правила жизненного цикла.
Я могу создать корзину (используя ресурс «aws_s3_bucket»).
Я могу создать корзину и определить правила своего жизненного цикла в одном и том же ресурсе "aws_s3_bucket", т.е.во время создания.
Я могу добавить «папки» в корзину (я знаю, что они на самом деле не являются папками, но они представлены клиентским системам, как если бы они были ... :-)), используяресурс "aws_s3_bucket_object", т.е.после создания корзины.
Все хорошо ...
Но я хочу иметь возможность добавлять правила жизненного цикла ПОСЛЕ того, как я создал корзину, но я получаю ошибку, сообщающую, что корзина уже существует,(На самом деле я хочу иметь возможность впоследствии добавлять папки и соответствующие правила жизненного цикла по мере необходимости.)
Теперь я могу добавлять правила жизненного цикла в существующую корзину в графическом интерфейсе AWS, поэтому я знаю, что это разумночто нужно сделать.
Но есть ли способ сделать это с помощью Terraform?
Я что-то упустил?
resource "aws_s3_bucket" "bucket" {
bucket = "${replace(var.tags["Name"],"/_/","-")}"
region = "${var.aws_region}"
#tags = "${merge(var.tags, map("Name", "${var.tags["Name"]}"))}"
tags = "${merge(var.tags, map("Name", "${replace(var.tags["Name"],"/_/","-")}"))}"
}
resource "aws_s3_bucket" "bucket_quarterly" {
bucket = "${aws_s3_bucket.bucket.id}"
#region = "${var.aws_region}"
lifecycle_rule {
id = "quarterly_retention"
prefix = "quarterly/"
enabled = true
expiration {
days = 92
}
}
}
resource "aws_s3_bucket" "bucket_permanent" {
bucket = "${aws_s3_bucket.bucket.id}"
#region = "${var.aws_region}"
lifecycle_rule {
id = "permanent_retention"
enabled = true
prefix = "permanent/"
transition {
days = 1
storage_class = "GLACIER"
}
}
}
resource "aws_s3_bucket_object" "quarterly" {
bucket = "${aws_s3_bucket.bucket.id}"
#bucket = "${var.bucket_id}"
acl = "private"
key = "quarterly"
source = "/dev/null"
}
resource "aws_s3_bucket_object" "permanent" {
bucket = "${aws_s3_bucket.bucket.id}"
#bucket = "${var.bucket_id}"
acl = "private"
key = "permanent"
source = "/dev/null"
}
Я ожидаю, что ведро с2 правила жизненного цикла, но я получаю следующую ошибку:
Ошибка: ошибка при применении плана:
2 error(s) occurred:
* module.s3.aws_s3_bucket.bucket_quarterly: 1 error(s) occurred:
* aws_s3_bucket.bucket_quarterly: Error creating S3 bucket: BucketAlreadyOwnedByYou: Your previous request to create the named bucket succeeded and you already own it.
status code: 409, request id: EFE9C62B25341478, host id: hcsCNracNrpTJZ4QdU0AV2wNm/FqhYSEY4KieQ+zSHNsj6AUR69XvPF+0BiW4ZOpfgIoqwFoXkI=
* module.s3.aws_s3_bucket.bucket_permanent: 1 error(s) occurred:
* aws_s3_bucket.bucket_permanent: Error creating S3 bucket: BucketAlreadyOwnedByYou: Your previous request to create the named bucket succeeded and you already own it.
status code: 409, request id: 7DE1B1A36138A614, host id: 8jB6l7d6Hc6CZFgQSLQRMJg4wtvnrSL6Yp5R4RScq+GtuMW+6rkN39bcTUwQhzxeI7jRStgLXSc=
Terraform does not automatically rollback in the face of errors.
Instead, your Terraform state file has been partially updated with
any resources that successfully completed. Please address the error
above and apply again to incrementally change your infrastructure.