0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TerraformからLambdaをデプロイ null_resourceでハマったこと

Last updated at Posted at 2024-12-17

概要

Lambdaをterraformからdeployする際にnull_resourceでbuildして結果をapplyするようにしていたが、buildが動いてないことに後から気がついた(厳密にいうと初回だけ動いていてそれ以降動いていなかった)

Lambdaのdeployについては以下を参考にした(この記事にもtriggerの注意点があります)
https://dev.classmethod.jp/articles/deploy-typescript-lambda-function-with-terraform/

今回やりたいこと

Goをビルドして、Lambda関数としてdeployする

ディレクトリ構成

terragrunt
  |--modules
       |--lambda
            |--testlambda
                 |--test.go
                 |--go.mod
                 |--go.sum
                 |--main.go

ハマったところ

以下のnull_resoureにbuildコマンドを書くのだが、triggersをちゃんとセットしておかないと、初回はapplyされるのに、次からはapplyされないというのでハマりやすい。localには、ずっと初回のbuildファイルが残っているので気が付かないとそのbuildファイルがdeployされ続ける。。

resource "aws_lambda_function" "testlambda" {
~ 省略
}

resource "null_resource" "build_lambda" {

  # ここがないとハマることに・・・!
  triggers = {
    # null_resourceは基本的にapply後は実行されない。
    # 必要な時にbuildが実行されるようにmodules配下の全ファイルのハッシュをトリガーに設定
    dir_sha1 = sha1(join("", [for f in fileset("${path.module}/testlambda", "**") : filesha1("${path.module}/testlambda/${f}")]))
  }

  provisioner "local-exec" {
    command = <<EOT
      # Set the target OS and architecture
      cd ${path.module}/testlambda
      GOOS=linux GOARCH=amd64 go build -o bootstrap main.go test.go

      # Check if the build was successful
      if [ $? -ne 0 ]; then
        echo "Go build failed!"
        exit 1
      fi
    EOT
  }
}

data "archive_file" "lambda" {
  type        = "zip"
  source_dir  = "${path.module}/testlambda"
  output_path = "${path.module}/lambda_function.zip"
  depends_on  = [null_resource.build_lambda]
}

teragruntの場合は、実行するhclファイルがある箇所に teragrunt-cacheがあるのでterragrunt applyをしながら、今回でいうと terragrunt-cache/testlambda/ にbuildされたファイルがあることを確認しながらやると良い。必要に応じてterragrunt-cacheのディレクトリごと削除して確認すると良い。

以上です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?