Terraformを使って、Lambdalayer(Python3.6)のデプロイを行いました。
出来上がったのがこちら
ファイル構成
├── main.tf
└── requirements
└── commonlib.txt
main.tf
provider "aws" {
region = "ap-northeast-1"
}
resource "null_resource" "pip_install" {
provisioner "local-exec" {
command = "pip2 install -r requirements/commonlib.txt -t ./python"
}
}
data "archive_file" "libs" {
depends_on = ["null_resource.pip_install"]
type = "zip"
source_dir = "./python"
output_path = "./common-lib.zip"
}
resource "aws_lambda_layer_version" "lambda_layer" {
filename = "${data.archive_file.libs.output_path}"
layer_name = "common-lib"
compatible_runtimes = ["python3.6"]
}
commonlib.txt
boto3
解説
provisioner "local-exec"
を用いて、事前にローカル環境に"pip2 install -r requirements/commonlib.txt -t ./python"
をコマンドの実行を行いcommonlib.txt
に書かれた内容をインストールします。
ただしprovisioner "local-exec"
はリソース内に記載しないと動作しません。
そこでresource "null_resource"
を用いて空のリソース内でローカルコマンドの実行をします。
次にdata "archive_file"
にてLambdaLayerにアップロードするため対象ディレクトリをZIP圧縮します。
その際depends_on = ["null_resource.pip_install"]
を用いて、PIP Installコマンドの実行後にZIP圧縮が行われるように調整します。
resource "aws_lambda_layer_version"
にて対象ZIPファイルがアップロードされ、LambdaLayerが作成されます。
まとめ
Terraformを用いると、1コマンドterraform apply
にて、pip install から、LabmdaLayerの作成までが行えます。