
2025年12月に正式リリースとなった「Terraform Actions」に入門できるチュートリアル「Invoke actions with Terraform」を試してみた👌 AWS と Azure で試せるようになっていて,今回は AWS にした.
Terraform Actions
Terraform Actions はリソースの "デプロイ後" などのタイミングで何かしらの自動化処理をトリガーする仕組みで,インフラ管理の Day.0 を「Build(ビルド)」・Day.1 を「Deploy(デプロイ)」と位置付けて,Terraform Actions は Day.2「Manage(管理)」に位置付けられる仕組みと言える.詳しくは HashiCorp ブログ Terraform actions now generally available, simplifying Day 2 infrastructure management で紹介されている📝
ブログ記事では以下の例が載っていた💡
- AWS Lambda 関数の実行
- Amazon CloudFront のキャッシュ無効化
- Amazon SNS 経由のアラート通知
In AWS environments managed by Terraform, a number of Day 2 tasks emerge that often require teams to switch to the AWS console. Some examples include manually invoking Lambda functions, creating invalidation requests for CloudFront’s cache, or sending alerts and notifications via SNS. With actions, Terraform users are able to accomplish all of these tasks and more, without leaving Terraform workflows.
ちなみに最新の Terraform AWS Provider だと以下の Terraform Actions もサポートされている.
- AWS Step Functions ワークフローの実行
- AWS CodeBuild ビルドの実行
Invoke actions with Terraform
チュートリアルでは以下のようなアーキテクチャをデプロイする.Amazon API Gateway + AWS Lambda 関数 + Amazon SQS キューというよくある形ではあるけど,Terraform で AWS Lambda 関数を作成 (after_create) もしくは更新 (after_update) したときに Terraform Actions で同じ AWS Lambda 関数を実行 (invoke) する.
あくまで個人的には今回のアーキテクチャだと「なぜ Terraform Actions で AWS Lambda 関数を実行する必要があるの?」という理由が弱くて,便利だな〜と感じられるサンプルではないように感じた.言い換えると「とりあえず Terraform Actions に入門する Hello World 的な内容」という感じ😅

まずは main.tf の実装を確認して,terraform plan コマンドと terraform apply コマンドを実行してデプロイする.動作確認として Amazon API Gateway の /job エンドポイントに POST リクエストを投げれば OK👌 Amazon SQS キューに Invoke lambda from curl というメッセージが登録されていた.
$ curl --request POST \ --header "Content-Type: application/json" \ --data '{"message": "Invoke lambda from curl", "type": "CLI"}' \ "$(terraform output -raw http_api_url)"
次に Terraform Actions を実装する.よく使うのは resource や data だけど,Terraform Actions では action で実装する.今回は aws_lambda_invoke アクションを使う.
action "aws_lambda_invoke" "api_handler" { config { function_name = aws_lambda_function.api_handler.function_name payload = jsonencode({ message = "Invoke lambda from action", type = "test" }) } }
なお Terraform Actions は terraform apply コマンドの -invoke オプションで個別に実行することもできる.実行すると Amazon SQS キューに Invoke lambda from action というメッセージが登録されていた.
$ terraform apply -invoke=action.aws_lambda_invoke.api_handler (中略) Apply complete! Resources: 0 added, 0 changed, 0 destroyed. Actions: 1 invoked.
今度は aws_lambda_function リソースに lifecycle.action_trigger として Terraform Actions を設定する.ポイントは action はあくまで実行する対象を設定していて,トリガーに関してはリソース側に設定する必要があるということ.
今回の例で言うと,前述した通り Terraform で AWS Lambda 関数を作成 (after_create) もしくは更新 (after_update) したときにトリガーする.
resource "aws_lambda_function" "api_handler" { function_name = "${var.project_name}-handler" runtime = "python3.14" handler = "index.handler" role = aws_iam_role.lambda_role.arn s3_bucket = aws_s3_bucket.lambda_bucket.id s3_key = aws_s3_object.lambda_object.key source_code_hash = data.archive_file.lambda_archive.output_base64sha256 environment { variables = { QUEUE_URL = aws_sqs_queue.job_queue.url } } lifecycle { action_trigger { events = [after_create, after_update] actions = [action.aws_lambda_invoke.api_handler] } } }
最後に AWS Lambda 関数のコードを修正してデプロイすると,Terraform Actions 経由でトリガーされて Amazon SQS キューに Invoke lambda from action というメッセージがもう一つ登録されていた👌
まとめ
Terraform Actions に入門できるチュートリアル「Invoke actions with Terraform」を試してみた.今回のアーキテクチャだと「なぜ Terraform Actions で AWS Lambda 関数を実行する必要があるの?」という理由が弱いように感じたけど,とりあえず Terraform Actions を体験したいならサクッと試せて良いと思う.
他にも Terraform AWS Provider でサポートされている Terraform Actions があるので,現場で使えそうなインフラ管理の Day.2 シナリオを考えてみたいと思う💪
















