以下の内容はhttps://kiririmode.hatenablog.jp/entry/20250126/1737870677より取得しました。


Terraform管理のAPI Gatewayとlambroll管理のLambda関数をdata.aws_resourcegroupstaggingapi_resourcesで繋げる

Terraform管理とLambrollの併用

AWSリソースはTerraformで管理しています。Terraformは非常に便利で、無駄に抽象化されていない「素のまま」な使い心地が気に入っています。また、リソースの破棄や再構築も簡単で扱いやすい。

一方で、Lambda関数をTerraformで管理するのは少々面倒に感じます。その理由は、インフラ管理ツールとしてのTerraformと、アプリケーション開発としてのLambda関数では、管理すべきライフサイクルが異なるからです。

Lambda関数は、インフラというよりはアプリケーションの一部です。そのため、インフラの管理フローに組み込むより、アプリケーション開発のフローに適した方法で管理したいと考えました。 以前はServerless Frameworkなどを使っていましたが、最近はさらに軽量なlambrollを使っています。

Lambrollとは?

Lambrollは、AWS Lambda関数を簡単かつ効率的に管理できるコマンドラインツールです。YAMLファイルを使用して、関数の設定や環境変数、IAMロールを一元管理できます。また、コードのデプロイや更新、ロールバックも非常にスムーズに行えます。

API Gatewayとの連携課題

LambrollでLambda関数を管理していると、API GatewayのようにLambda関数と密接に関連するリソースとの連携が課題になります。例えば、APIセットを変更する際には、それに応じてLambda関数の増減が発生します。

Lambda関数はlambrollで管理していますが、API GatewayはTerraformで管理しています。そのため、lambrollで作成したLambda関数のARNをAPI Gateway側で利用する必要があります。この課題をどう解決するかを考えました。

data.aws_resourcegroupstaggingapi_resources

lambrollで管理しているLambda関数をTerraformに持ってくるにはデータソースを使うしかない。しかし、aws_lambda_functionを利用すると、lambroll側で管理する「関数名」との密結合が避けられない。それはしたくないんだ。

この課題を解決する鍵は、resourcegroupstaggingapi_resourcesデータソースを活用することです。これは、AWSリソースに設定されたタグ情報を取得できるTerraformのデータソースで、指定した条件に一致するリソースのARNを取得することができます。

例えば、特定のタグService=yourtagが付与されたLambda関数の名前とARNの一覧を取得するには、以下のようなHCLを記述します。

data "aws_resourcegroupstaggingapi_resources" "lambdas" {
  resource_type_filters = ["lambda:function"]
  tag_filter {
    key    = "Service"
    values = ["yourtag"]
  }
}

このデータソースを使用して、Lambda関数名とARNのマッピングを次のように作成できます。

function_arn_map = {
  for resource in data.aws_resourcegroupstaggingapi_resources.lambdas.resource_tag_mapping_list : resource.tags["Name"] => resource.resource_arn
}

この方法を利用することで、Terraformとlambrollを組み合わせた管理がスムーズになり、API Gatewayとの連携も効率的に行えるようになりました。

なお

こんなことになったのはAPI Gateway構築用のopenapi.yamlをインフラ側で管理しているためでしたが、そもそもopenapi.yamlはアプリの持ち物として管理すべきだったのでは…。




以上の内容はhttps://kiririmode.hatenablog.jp/entry/20250126/1737870677より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14