액션 호출하기

액션 호출하기 (Invoke an action)

액션(action)은 프로바이더에 내장된 사전 정의 작업으로, Terraform이 2일차 운영(day-two operations)을 수행할 수 있게 해줘요. 액션을 호출하면 Ansible 플레이북이나 Lambda 작업처럼 Terraform 외부의 자동화를 트리거할 수 있어요. 액션은 리소스 상태에는 영향을 주지 않아요.

출처: 문서

본문

개요 (Overview)

Terraform 구성에 action 블록을 선언하고 구성을 적용하거나 Terraform CLI를 사용해 액션을 호출해요. 리소스와 직접 연결되지 않은 액션도 구성할 수 있어요. 이 액션들은 Terraform이 관리하는 리소스의 상태를 바꾸지 않아요.

요구사항 (Requirements)

액션을 사용하려면 프로바이더 개발자가 액션을 구현해야 해요. 프로바이더에서 사용할 수 있는 액션에 대한 정보는 프로바이더 문서를 참고하세요.

-invoke 플래그로 특정 액션을 대상으로 지정할 수 있는 것은 구성이 워크스페이스에 있을 때뿐이에요. 스택(Stack)은 오직 HCP Terraform에서만 실행을 수행하며 로컬 CLI 호출을 지원하지 않아요. 스택에서 액션을 호출하려면 대신 리소스 수명주기 구성에 action_trigger 블록을 구성하세요.

HCP Terraform

HCP Terraform에서 액션을 모니터링하려면 Terraform 구성에 HCP Terraform 연결을 구성해야 해요. 지침은 HCP Terraform에 연결하기 문서를 참고하세요.

액션 구성하기 (Configure an action)

Terraform 구성에 action 블록을 추가하고 타입과 라벨을 인라인 인자로 지정해요. 액션의 타입은 프로바이더에 따라 달라져요. 사용 가능한 액션에 대한 자세한 내용은 프로바이더 문서를 참고하세요.

다음 예시는 example이라는 라벨을 가진 aws_lambda_invoke 액션을 선언해요.

action "aws_lambda_invoke" "example" {
  # ...
}

프로바이더 인자 구성하기 (Configure provider arguments)

config 블록을 사용해 프로바이더 인자를 구성해요. config 블록에는 인자나 다른 블록이 들어갈 수 있어요. 자세한 내용은 프로바이더 문서를 참고하세요. 액션이 리소스 action_trigger에서 호출되면, caller 심볼을 사용해 호출하는 리소스 객체를 평가할 수 있어요.

다음 예시는 구성 안의 다른 곳에서 정의된 "my_function"을 참조하고 함수에 JSON 페이로드를 전달하는 aws_lambda_invoke 액션을 추가해요.

action "aws_lambda_invoke" "example" {
  config {
    function_name = "my_function"
    payload = jsonencode({
      key1 = "value1"
      key2 = "value2"
    })
  }
}

구성이 호출하는 리소스의 데이터를 필요로 할 때는 특수한 caller 심볼로 리소스 속성에 접근할 수 있어요. caller를 사용하면 각 리소스 인스턴스에 대한 참조를 직접 만들지 않고도 여러 리소스 인스턴스에서 하나의 action 블록을 트리거할 수 있어요.

action "aws_lambda_invoke" "example" {
  config {
    function_name = "my_function"
    payload = caller.output
  }
}

AWS Lambda 함수를 프로비저닝하는 방법은 AWS 프로바이더 문서를 참고하세요.

Terraform 메타 인자 구성하기 (Configure Terraform meta-arguments)

action 블록에서 일부 Terraform 메타 인자를 사용할 수 있어요. 메타 인자는 Terraform에 내장된 것으로 Terraform이 리소스를 생성하는 방식을 제어해요. 자세한 내용은 메타 인자 문서를 참고하세요.

다음 예시에서 count 메타 인자가 3으로 설정되어 있으므로 Terraform은 액션 인스턴스를 세 개 생성해요. 또한 provider 메타 인자에 따라 aws.alias 프로바이더 구성 참조를 사용해요. action 블록에서 지원하는 모든 메타 인자는 action 블록 레퍼런스를 참고하세요.

action "aws_lambda_invoke" "example" {
  count = 3
  provider = aws.alias
  config {
    function_name = "my_function"
    payload = jsonencode({
      key1 = "value1"
      key2 = "value2"
    })
  }
}

액션 호출하기 (Invoke the action)

Terraform CLI로 액션을 실행하거나, resource 블록을 구성해 apply 작업 중에 액션이 트리거되도록 할 수 있어요.

CLI에서 액션 호출하기 (Invoke an action from the CLI)

스택(Stacks) 환경에서는 액션을 직접 호출할 수 없어요. 자세한 내용은 요구사항을 참고하세요.

CLI로 액션을 호출하면 Terraform은 해당 액션만 실행하고 다른 모든 구성은 제외해요.

terraform plan 또는 terraform apply 명령을 실행할 때 -invoke 플래그를 추가하고 액션의 주소를 지정해요.

다음 예시는 aws_lambda_invoke.example 액션을 호출하기 위한 플랜을 생성해요.

$ terraform plan -invoke=action.aws_lambda_invoke.example

플랜 생성에 대한 자세한 내용은 terraform plan 명령 문서를 참고하세요.

다음 예시는 aws_lambda_invoke.example 액션을 실행해요.

$ terraform apply -invoke=action.aws_lambda_invoke.example

구성 적용에 대한 자세한 내용은 terraform apply 명령 문서를 참고하세요.

구성 적용 시 액션 트리거하기 (Trigger an action when applying a configuration)

리소스 생성 같은 리소스 수명주기 이벤트에서 액션을 트리거하려면 action_trigger 블록을 구성하고, 실행할 액션과 액션을 트리거할 이벤트를 지정해요. action_trigger 블록은 resource 블록 안에 중첩된 lifecycle 블록의 멤버예요. 블록 구성 방법에 대한 자세한 내용은 action_trigger 문서를 참고하세요.

다음 예시에서 Terraform은 aws_lambda_function.example 리소스를 생성한 후 action.aws_lambda_invoke.example 액션을 호출해요. 또한 resource 블록 구성이 변경되면 terraform apply 작업 중에도 액션을 호출해요.

resource "aws_lambda_function" "example" {
  # resource config

  lifecycle {
    action_trigger {
      events     = [after_create, after_update]
      actions    = [action.aws_lambda_invoke.example]
      on_failure = halt
    }
  }
}

Terraform은 terraform apply를 실행해 리소스를 처음 생성할 때 액션을 호출해요. 이는 event 트리거 중 하나가 after_create이기 때문이에요.

event 인자에 after_update가 포함되어 있어서, 구성에 변경이 없더라도 Terraform이 리소스의 드리프트(drift)를 감지하면 terraform apply에서 리소스를 갱신해요.

on_failure 인자로 액션이 실패했을 때 Terraform이 무엇을 할지 제어할 수 있어요. 사용할 수 있는 값은 다음과 같아요.

  • halt: apply 작업을 중단하고 오류를 보고해요. 리소스는 tainted로 표시되지 않아요. 이것이 기본값이에요.
  • continue: 오류를 경고로 기록하고 apply 작업을 계속 진행해요.
  • taint: apply 작업을 중단하고 오류를 보고하며, 리소스를 tainted로 표시해서 다음 apply에서 Terraform이 리소스를 교체하도록 해요.

HCP Terraform에서 액션 보기 (View actions in HCP Terraform)

워크스페이스와 스택에서 액션 실행(할 run)을 볼 수 있어요.

워크스페이스 (Workspaces)

워크스페이스가 HCP Terraform 조직에 연결되어 있다면, run 상세 페이지에서 액션 실행을 모니터링할 수 있어요. HCP Terraform은 액션을 호출하는 run을 식별하고 해당 run이 호출한 액션 수를 표시해요. 자세한 내용은 HCP Terraform 문서의 액션 실행을 참고하세요.

스택 (Stacks)

HCP Terraform은 배포 run의 plan 및 apply 출력 내에 액션 출력을 표시해요. 자세한 내용은 HCP Terraform 문서의 배포 run 검토를 참고하세요.

더 알아보기 (Learn more)