使用以下 Terraform 和 aws 提供程式
Terraform v1.1.8
on linux_amd64
Installed hashicorp/aws v4.10.0
以及以下代碼
# S3 Bucket Policy
data "aws_iam_policy_document" "lambda-bucket" {
statement {
effect = "Allow"
actions = [
"s3:*",
]
principals {
type = "AWS"
identifiers = [
"arn:aws:iam::${var.account_ids.account_1}:role/Teamcity-fullaccess",
"arn:aws:iam::${var.account_ids.account_2}:role/teamcity-poweruser"
]
}
resources = [
aws_s3_bucket.lambda-bucket.arn,
"${aws_s3_bucket.lambda-bucket.arn}/*",
]
}
}
# Bucket
resource "aws_s3_bucket" "lambda-bucket" {
bucket = "lambdas-${terraform.workspace}"
tags = merge(var.default_tags, local.env_tag, {
Name = "lambdas-${terraform.workspace}"
})
}
resource "aws_s3_bucket_versioning" "lambda-bucket" {
bucket = aws_s3_bucket.lambda-bucket.bucket
versioning_configuration {
status = "Enabled"
}
}
resource "aws_s3_bucket_server_side_encryption_configuration" "lambda-bucket" {
bucket = aws_s3_bucket.lambda-bucket.bucket
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "AES256"
}
}
}
resource "aws_s3_bucket_acl" "lambda-bucket" {
bucket = aws_s3_bucket.lambda-bucket.bucket
acl = "private"
}
resource "aws_s3_bucket_policy" "lambda-bucket" {
bucket = aws_s3_bucket.lambda-bucket.id
policy = data.aws_iam_policy_document.lambda-bucket.json
}
我不斷收到通知說物件在 Terraform 之外發生了變化,這不是真的 AFAIK
# aws_s3_bucket.lambda-bucket has changed
~ resource "aws_s3_bucket" "lambda-bucket" {
id = "lambdas-dev1"
~ policy = jsonencode(
~ {
~ Statement = [
~ {
~ Principal = {
~ AWS = [
- "arn:aws:iam::xxxx:role/Teamcity-fullaccess",
"arn:aws:iam::yyyy:role/teamcity-poweruser",
"arn:aws:iam::xxxx:role/Teamcity-fullaccess",
]
}
# (3 unchanged elements hidden)
},
]
# (1 unchanged element hidden)
}
)
tags = {
"Environment" = "dev1"
"Name" = "lambdas-dev1"
"Terraform" = "True"
}
# (11 unchanged attributes hidden)
# (3 unchanged blocks hidden)
}
如果值得的話,這是我的帳戶 ID 變數
# Account IDs
account_ids = {
"account_1" = "xxxx",
"account_2" = "yyyy"
}
我在這里想念什么嗎?
uj5u.com熱心網友回復:
每當提供者通過回傳與最近基礎設施更改回傳的值不同的值來回應“重繪 ”操作時,Terraform 就會生成此“物件已在 Terraform 之外更改”訊息。
在 Terraform 的架構中,提供者的部分責任是實施規則,以區分意味著功能變化的差異——例如現在具有不同效果的策略——以及只是寫下相同內容的不同方式的差異規則,就像您的示例中的情況一樣。
遠程 API 通常允許多種方式來表達相同的意圖作為對可用性的讓步,并且 Terraform 提供者原則上應該自己實施相應的規則以避免誤報這種規范化。然而,在實踐中,這些規則在 API 檔案中通常沒有很好地描述,因此提供者開發人員不幸地只能從有關提供者觀察到的行為的反饋中了解它們。
我在上面的評論執行緒中看到您已經向 AWS 提供商團隊提出了一個問題來報告問題,這是我在這里推薦的。
同時,您可以通過重新排序源策略以匹配 S3 API 回傳的規范化形式來避免噪音,盡管這并不總是可能的,例如,如果 API 本身在其規范化方面不一致(一些 API 回傳每個請求都有不同的順序,即使基礎資料沒有改變),或者如果您正在使用 Terraform 中不決定特定順序的機制構建資料。
如果aws_iam_policy_document資料源已identifiers指定為一組字串而不是字串串列,那么您將無法僅通過在配置中重新排序來覆寫排序,因為 Terraform 集本質上是無序的。如果這是真的,那么您可能需要直接使用該jsonencode函式構建預期的 IAM 策略檔案,以便您可以準確控制您將使用的結構和順序,因此可以匹配 S3 API 正在執行的規范化,直到提供程式更新了解這個規范化規則并自動處理它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/461987.html
標籤:亚马逊网络服务 亚马逊-s3 地形 terraform-provider-aws
上一篇:EC2上的db,有多少個EBS?
