action 블록 레퍼런스
action 블록 레퍼런스 (action block reference)
action 블록은 Terraform CLI를 사용하거나 apply 작업 중에 호출할 수 있는, 프로바이더가 정의한 작업(action)을 지정해요. 액션은 프로바이더에 내장된 사전 정의 작업으로, Ansible 플레이북이나 Lambda 작업처럼 Terraform 외부의 자동화를 트리거하는 데 사용돼요. 자세한 내용은 액션 호출하기 문서를 참고하세요.
출처: 문서
본문
구성 모델 (Configuration model)
action 블록은 다음 구성을 지원해요.
| 구성 요소 | 설명 |
|---|---|
action "<TYPE>" "<LABEL>" |
블록 |
config |
인자 맵 또는 중첩 블록 |
count |
숫자 · for_each와 상호 배타적 |
for_each |
문자열 맵 또는 집합 · count와 상호 배타적 |
provider |
참조 (reference) |
완전한 구성 (Complete configuration)
다음 action 블록에는 지원되는 모든 내장 인자가 포함돼 있어요.
action "<TYPE>" "<LABEL>" {
config {
<PROVIDER ARGUMENTS>
}
for_each = { # `for_each` and `count` are mutually exclusive
<KEY> = <VALUE>
}
for_each = [ # `for_each` accepts a map or a set of strings
"<VALUE>",
"<VALUE>"
]
count = <NUMBER> # `for_each` and `count` are mutually exclusive
provider = <REFERENCE.TO.ALIAS>
}
사양 (Specification)
action 블록은 다음 구성을 지원해요.
action "<TYPE>" "<LABEL>"
모든 action 블록에 대해 다음 인자를 설정해야 해요.
TYPE: 호출할 액션의 타입을 지정해요. 선언할 수 있는 액션 타입에 대한 정보는 프로바이더 문서를 참고하세요.LABEL:action블록의 라벨을 지정해요. Terraform은 블록에 의해 구성된 액션의 고유 이름의 일부로 이 라벨을 사용해요. 라벨은 사용자가 액션을 호출할 때 Terraform이 수행하는 작업에는 영향을 주지 않아요. 표현식 문법과 라벨 권장 사항은 명명된 값 참조와 리소스 이름 짓기를 참고하세요.
구성의 다른 곳에서 액션을 참조할 때는 action.<TYPE>.<LABEL> 구문을 사용해요.
config
config 블록은 프로바이더가 정의한 인자 또는 중첩 블록의 값을 설정해요.
action "<TYPE>" "<LABEL>" {
config {
<provider-specific arguments>
}
# . . .
}
config 블록은 인자, 중첩 블록, 또는 둘의 조합을 포함할 수 있어요. 호출하려는 액션 타입에 대해 config 블록에서 구성할 수 있는 인자는 프로바이더 문서를 참고하세요. config 블록 안에는 caller라는 특수한 심볼이 있는데, 이는 action_trigger에서 액션을 호출하는 리소스 인스턴스의 값을 나타내요.
요약 (Summary)
- 데이터 타입: 인자 또는 중첩 블록의 맵 (Map of arguments or nested blocks)
- 예시: 액션 정의하기
count
count 메타 인자는 같은 구성을 사용해 액션을 여러 번 호출하도록 Terraform에 지시해요.
action "<TYPE>" "<LABEL>" {
count = <number>
}
count는 **메타 인자(meta-argument)**예요. 메타 인자는 Terraform 언어에 내장된 것으로, Terraform이 리소스를 생성하는 방식을 제어해요. 자세한 내용은 count 레퍼런스를 참고하세요.
for_each
for_each 메타 인자는 목록의 각 멤버 또는 맵의 각 키-값 쌍에 대해 액션을 한 번씩 호출하도록 Terraform에 지시해요.
action "<TYPE>" "<LABEL>" {
for_each = [ "<VALUE>" ]
# . . .
}
action "<TYPE>" "<LABEL>" {
for_each = {
"<KEY>" = "<VALUE>"
}
}
for_each는 메타 인자예요. 자세한 내용은 for_each 레퍼런스를 참고하세요.
provider
provider 인자는 액션을 호출할 때 대체 프로바이더 구성을 사용하도록 Terraform에 지시해요.
action "<TYPE>" "<LABEL>" {
provider = <provider>.<alias>
}
provider는 메타 인자예요. 자세한 내용은 provider 레퍼런스를 참고하세요.
예시 (Examples)
다음 예시는 일반적인 사용 사례에 대한 구성을 보여줘요.
액션 정의하기 (Define an action)
다음 예시는 aws_lambda_invoke 액션을 추가해요. CLI를 사용해 액션을 호출하거나, 리소스 수명주기 상태 동안 Terraform이 액션을 호출하도록 구성할 수 있어요. 호출 방법에 대한 지침은 액션 호출하기 문서를 참고하세요.
action "aws_lambda_invoke" "example" {
config {
function_name = "123456789012:function:my-function:1"
payload = jsonencode({
key1 = "value1"
key2 = "value2"
})
}
}
function_name 인자는 이름 또는 ARN으로 기존 AWS Lambda 함수를 참조해야 해요. 자세한 내용은 aws_lambda_invoke 문서를 참고하세요.
대체 프로바이더 구성 선택하기 (Select an alternate provider configuration)
다음 예시는 액션을 호출할 때 aws.alias 프로바이더 구성을 적용하도록 Terraform을 구성해요.
action "aws_lambda_invoke" "example" {
provider = aws.alias
config {
function_name = "my_function"
payload = jsonencode({
key1 = "value1"
key2 = "value2"
})
}
}
액션을 여러 번 호출하기 (Invoke an action multiple times)
count 또는 for_each 메타 인자를 추가하면 액션을 여러 번 호출할 수 있어요.
다음 예시에서 Terraform은 액션을 세 번 호출해요.
action "aws_lambda_invoke" "example" {
count = 3
config {
function_name = "my_function"
payload = jsonencode({
key1 = "value1"
key2 = "value2"
})
}
}
다음 예시에서 Terraform은 맵의 각 멤버에 대해 액션을 한 번씩 호출하므로, 두 번 호출해요.
action "aws_lambda_invoke" "example" {
for_each = tomap({
a_group = "eastus"
another_group = "westus2"
})
config {
function_name = "my_function"
payload = jsonencode({
key1 = "value1"
key2 = "value2"
})
}
}