테라폼: 수정이 감지된 경우에만 태그를 업데이트하는 방법
나는 아래와 같은 필드로 내 테라폼 파일에 태그를 구현했다
문제는 내가 내 tf 파일을 적용할 때마다 이 필드는 변경 사항이 없어도 항상 업데이트된다는 것이다. 변경 사항이 감지되는 경우에만 이 태그를 업데이트했으면 합니다.
내가 이걸 어떻게 이룰 수 있는지 알아?
내 코드는 다음과 같다
resource "azurerm_app_service_plan" "terra_app_plan" {
resource_group_name = azurerm_resource_group.terra_resource_group.name
location = azurerm_resource_group.terra_resource_group.location
name = local.app_serviceplan_name
sku {
size = var.app_serviceplan_size
tier = var.app_serviceplan_tiers
}
tags = local.common_tags
}
그리고 여기에도
locals {
common_tags = {
costcenter = var.cost_center
environment = terraform.workspace
lastupdate = formatdate("DD-MMM-YY hh:mm:ss ZZZ", timestamp())
}
아마도 우리는 매개 변수에 대한 조건부 항목을 추가할 수 있지만 나는 그것을 어떻게 하는지 모르겠다
모두에게 감사드립니다
태그는 리소스의 특정 버전과 함께 의미 있는 이름을 할당하는 데 사용됩니다. 태그는 리소스를 변경한 경우에도 업데이트되지 않는 특정 저장하기 위해 생성됩니다. 태그는 Azure Porta에서 리소스를 구성하는 데 사용되는 이름과 값 쌍입니다
해당 특정 리소스에 대한 Activi 로그를 더 잘 확인하여 리소스의 마지막 업데이트를 탐지할 수 없습니다.
: 나는 테라폼 클라우드와 같은 원격 환경을 실행하기 위해 사용하는 이 접근 방식에서 문제를 발견했다. 이것은 로컬에서 작동하지만, 적용을 위해 런타임 동안 대상 파일이 생성되는 상황에서 마지막으로 수정된 날짜는 해당 런타임 동안 생성되는 파일을 기반으로 한다.
가장 좋은 방법은 다른 답변에서 제안된 것처럼 태그가 의미 있는 키/값을 갖는 것입니다. 그러나 이것이 요구되는 경우에는 Terraform 데이터 리소스를 사용하여 셸 스크립트를 실행하고 날짜를 캡처하여 Terraform의 태그 값으로 사용하는 방법이 있습니다.
먼저 Terraform 모듈에서 bash 스크립트를 생성합니다:
#!/bin/bash
LASTUPDATED=$(date -r $1)
echo '{"lastupdated":"'$LASTUPDATED'"}' | jq .
그런 다음 Terraform 내에서 결과를 사용하여 태그를 적용할 수 있습니다:
# so_71645084.tf
variable "costcenter" { default = "foo" }
data "external" "file_last_updated" {
program = ["bash", "${path.module}/so_71645084.sh", "${path.module}/so_71645084.tf"]
}
locals {
common_tags = {
costcenter = var.costcenter
environment = terraform.workspace
lastupdate = data.external.file_last_updated.result.lastupdated
}
}
output "common_tags" { value = local.common_tags }
결과 출력은 다음과 같습니다:
...
+ costcenter = "foo"
+ environment = "dev"
+ lastupdate = "Mon Mar 28 13:32:15 UTC 2022"
요약하면 데이터 리소스는 변경 사항을 추적 중인 대상 파일에 대해 명령을 실행합니다. 우리는 결과를 우리의 테라폼의 데이터 리소스로 사용하여 우리의 태그에 날짜 값을 적용하고 있다.
이것에 관심이 있는 사람이 있는지 확실하지 않다 - 나도 같은 문제가 있었다
첫 번째 실행 시에만 업데이트되거나 선택적으로 포함하는 트리거가 변경될 때 시간 프로비저닝자를 사용할 수 있습니다:
https://registry.terraform.io/providers/hashicorp/time/latest/docs
그래서 너의 것은 다음과 같을 수 있다
resource "time_static" "app_service_A" {
triggers = {
# Save the time each update of app service
app_service = azurerm_app_service_plan.terra_app_plan
}
}
로컬이 아닌 리소스에 태그를 설정한 경우:
resource "azurerm_app_service_plan" "terra_app_plan" {
...
tags = {
costcenter = var.cost_center
environment = terraform.workspace
lastupdate = time_static.app_service_A.rfc3399
}
}
'개발하자' 카테고리의 다른 글
FastAPI를 사용하여 쿼리 매개 변수의 목록 필드를 사용하도록 Swagger UI를 설정하는 방법은 무엇입니까? (0) | 2023.09.01 |
---|---|
테라폼 리소스에 사용되기 전에 파일에 값을 삽입하는 것이 가능합니까? (0) | 2023.09.01 |
유형 스크립트 오류 JSX 요소 유형 '보기'가 JSX 요소에 대한 생성자 함수가 아닙니다 (0) | 2023.08.30 |
Terraform에서 GKE 노드에 대한 네트워크 태그를 생성하는 방법 (0) | 2023.08.30 |
사용자 이름과 비밀번호만 허용하지 않는 구글의 정책 업데이트 후 파이썬을 사용하여 이메일을 보내는 방법은 무엇입니까? (0) | 2023.08.29 |