AWS Lambda Layer의 Terraform화로 빠졌습니다.
2917 단어 람다TerraformLambda-LayersAWS
이 기사의 목적
AWS Lambda Layer를 Terraform화했습니다.
일부 수고했기 때문에, 자신과 동료용으로 메모를 남깁니다.
우선 결론
최종적으로 완성된 Terraform은 이쪽입니다.
Terraform 버전
$ terraform version
Terraform v0.12.24
레이어를 사용하는 람다 측
resource "aws_lambda_function" "main_lambda" {
filename = "../../lambda_function/test_lambda/test_lambda.zip"
function_name = "test_lambda"
role = aws_iam_role.lambda_iam_role.arn
handler = "lambda_function.lambda_handler"
timeout = 30
runtime = "python3.8"
layers = ["${aws_lambda_layer_version.lambda_layer.arn}"]
}
Layer측
resource "aws_lambda_layer_version" "lambda_layer" {
layer_name = "test_layer"
filename = "../../lambda_layer/test_layer/test_layer.zip"
compatible_runtimes = ["python3.8"] # Lambda関数と互換性のあるruntimeを設定
source_code_hash = "${filebase64sha256("../../lambda_layer/test_layer/python.zip")}"
}
빠진 곳①
Layer의 filename으로 설정하고 있는 zip 파일의 압축 단위에 요령이 갔다.
처음에는 ../../lambda_layer/test_layer/test_layer.py
의 test_layer.py
를 zip화하고 있었다.
그런데 Terrafor를 실행하여 Lambda와 Layer가 작성되더라도 Lambda에서 Layer를 읽을 수 없다.
분명히, Layer는 Lambda 내의 /opt/python
에 전개하지 않으면 안되는 것 같다.
그래서 Layer를 ../../lambda_layer/test_layer/python/test_layer.py
에 넣고 python
마다 zip화하면 해결.
빠진 곳②
Layer에는 버젼이라고 하는 것이 있어, Layer의 py파일을 갱신해 다시 업로드하면, Layer의 버젼이 오르게 되어 있다.
이전 버전의 레이어도 남아있어 사용할 수 있습니다.
아마, Lambda A에서는 버전 1의 Layer, Lambda B에서는 최신 버전의 Layer를 사용하고 싶다, 라고 하는 구분을 위해일 것이다.
처음에는 다음과 같이 source_code_hash
를 설정하지 않았습니다.
그러면 test_layer.py
를 업데이트하고 test_layer.zip
를 다시 만들면 Terraform 실행 후 Layer 버전이 올라 가지 않습니다. 계속 1의 아직도.
resource "aws_lambda_layer_version" "lambda_layer" {
layer_name = "test_layer"
filename = "../../lambda_layer/test_layer/test_layer.zip"
compatible_runtimes = ["python3.8"] # Lambda関数と互換性のあるruntimeを設定
}
source_code_hash
를 설정하면, Layer 자체의 버젼 및 Lambda에 끈다 Layer의 버젼도 최신의 것으로 올라가게 되었다.
그렇지만 이것, 지금은 좋지만 어느 쪽이든 Terraform상에서 Lambda마다 Layer의 버전 지정하고 싶어지면 어떻게 하는 것인가…aws_lambda_layer_version.lambda_layer.arn
는 버젼 첨부의 ARN이지만, aws_lambda_layer_version.lambda_layer.layer_arn
는 버젼 없음의 ARN인 것 같기 때문에, 그 옆을 잘 사용하는 것일지도 모른다.
필요한 경우 확인합니다. 보고할지는 불명.
이상
Reference
이 문제에 관하여(AWS Lambda Layer의 Terraform화로 빠졌습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/nessie/items/ea2237e76e6bc7dd15ec
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
최종적으로 완성된 Terraform은 이쪽입니다.
Terraform 버전
$ terraform version
Terraform v0.12.24
레이어를 사용하는 람다 측
resource "aws_lambda_function" "main_lambda" {
filename = "../../lambda_function/test_lambda/test_lambda.zip"
function_name = "test_lambda"
role = aws_iam_role.lambda_iam_role.arn
handler = "lambda_function.lambda_handler"
timeout = 30
runtime = "python3.8"
layers = ["${aws_lambda_layer_version.lambda_layer.arn}"]
}
Layer측
resource "aws_lambda_layer_version" "lambda_layer" {
layer_name = "test_layer"
filename = "../../lambda_layer/test_layer/test_layer.zip"
compatible_runtimes = ["python3.8"] # Lambda関数と互換性のあるruntimeを設定
source_code_hash = "${filebase64sha256("../../lambda_layer/test_layer/python.zip")}"
}
빠진 곳①
Layer의 filename으로 설정하고 있는 zip 파일의 압축 단위에 요령이 갔다.
처음에는 ../../lambda_layer/test_layer/test_layer.py
의 test_layer.py
를 zip화하고 있었다.
그런데 Terrafor를 실행하여 Lambda와 Layer가 작성되더라도 Lambda에서 Layer를 읽을 수 없다.
분명히, Layer는 Lambda 내의 /opt/python
에 전개하지 않으면 안되는 것 같다.
그래서 Layer를 ../../lambda_layer/test_layer/python/test_layer.py
에 넣고 python
마다 zip화하면 해결.
빠진 곳②
Layer에는 버젼이라고 하는 것이 있어, Layer의 py파일을 갱신해 다시 업로드하면, Layer의 버젼이 오르게 되어 있다.
이전 버전의 레이어도 남아있어 사용할 수 있습니다.
아마, Lambda A에서는 버전 1의 Layer, Lambda B에서는 최신 버전의 Layer를 사용하고 싶다, 라고 하는 구분을 위해일 것이다.
처음에는 다음과 같이 source_code_hash
를 설정하지 않았습니다.
그러면 test_layer.py
를 업데이트하고 test_layer.zip
를 다시 만들면 Terraform 실행 후 Layer 버전이 올라 가지 않습니다. 계속 1의 아직도.
resource "aws_lambda_layer_version" "lambda_layer" {
layer_name = "test_layer"
filename = "../../lambda_layer/test_layer/test_layer.zip"
compatible_runtimes = ["python3.8"] # Lambda関数と互換性のあるruntimeを設定
}
source_code_hash
를 설정하면, Layer 자체의 버젼 및 Lambda에 끈다 Layer의 버젼도 최신의 것으로 올라가게 되었다.
그렇지만 이것, 지금은 좋지만 어느 쪽이든 Terraform상에서 Lambda마다 Layer의 버전 지정하고 싶어지면 어떻게 하는 것인가…aws_lambda_layer_version.lambda_layer.arn
는 버젼 첨부의 ARN이지만, aws_lambda_layer_version.lambda_layer.layer_arn
는 버젼 없음의 ARN인 것 같기 때문에, 그 옆을 잘 사용하는 것일지도 모른다.
필요한 경우 확인합니다. 보고할지는 불명.
이상
Reference
이 문제에 관하여(AWS Lambda Layer의 Terraform화로 빠졌습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/nessie/items/ea2237e76e6bc7dd15ec
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Layer에는 버젼이라고 하는 것이 있어, Layer의 py파일을 갱신해 다시 업로드하면, Layer의 버젼이 오르게 되어 있다.
이전 버전의 레이어도 남아있어 사용할 수 있습니다.
아마, Lambda A에서는 버전 1의 Layer, Lambda B에서는 최신 버전의 Layer를 사용하고 싶다, 라고 하는 구분을 위해일 것이다.
처음에는 다음과 같이
source_code_hash
를 설정하지 않았습니다.그러면
test_layer.py
를 업데이트하고 test_layer.zip
를 다시 만들면 Terraform 실행 후 Layer 버전이 올라 가지 않습니다. 계속 1의 아직도.resource "aws_lambda_layer_version" "lambda_layer" {
layer_name = "test_layer"
filename = "../../lambda_layer/test_layer/test_layer.zip"
compatible_runtimes = ["python3.8"] # Lambda関数と互換性のあるruntimeを設定
}
source_code_hash
를 설정하면, Layer 자체의 버젼 및 Lambda에 끈다 Layer의 버젼도 최신의 것으로 올라가게 되었다.그렇지만 이것, 지금은 좋지만 어느 쪽이든 Terraform상에서 Lambda마다 Layer의 버전 지정하고 싶어지면 어떻게 하는 것인가…
aws_lambda_layer_version.lambda_layer.arn
는 버젼 첨부의 ARN이지만, aws_lambda_layer_version.lambda_layer.layer_arn
는 버젼 없음의 ARN인 것 같기 때문에, 그 옆을 잘 사용하는 것일지도 모른다.필요한 경우 확인합니다. 보고할지는 불명.
이상
Reference
이 문제에 관하여(AWS Lambda Layer의 Terraform화로 빠졌습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nessie/items/ea2237e76e6bc7dd15ec텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)