Canvas 1 Layer 1

AWS 람다 레이어 공유하기
AWS 람다 함수의 공통 부분을 다른 계정이나 조직과 공유하는 방법

AWS 람다 레이어(Lambda Layers)는 라이브러리, 커스텀 런타임(Custom Runtime)등 여러 람다코드에서 공유되는 부분이 있을 때 유용합니다. 설치가 까다로운 경우 직접 람다 레이어를 만들기 보다 다른 사람이 공유한 것을 사용하는 것이 좋습니다. 내가 만든 람다 레이어를 다른 사람들이 쉽게 사용할 수 있게 공유하는 방법을 알아보겠습니다.

람다 레이어를 만들면 기본적으로 내 계정에서만 사용할 수 있는 상태고, 이를 다른 계정에 공유하려면 AWS CLI 혹은 API 를 이용해야 합니다. 2018년 12월 31일 기준 AWS 웹 콘솔에서는 설정 할 수 없습니다. 여기서는 AWS CLI를 사용해보겠습니다.

모든 사람이 사용할 수 있도록 공유하는 방법은 다음과 같습니다.

$ aws lambda add-layer-version-permission \
    --layer-name my_layer \
    --version-number 1 \
    --statement-id share_all \
    --principal '*' \
    --action lambda:GetLayerVersion
{
  "RevisionId": "xxx-xxx-xxxx-xxx-xxxxxxx",
  "Statement": "{\"Sid\":\"share_all\",\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":\"lambda:GetLayerVersion\",\"Resource\":\"arn:aws:lambda:ap-northeast-2:xxxxxx:layer:my_layer:1\"}"
}

--organization-id 옵션을 이용해 특정 조직에만 공유하거나, principal에 AWS 계정 아이디를 지정해서 특정 AWS 계정에만 공유하는 것도 가능합니다.

람다 레이어는 버전 별로 권한을 관리하므로 같은 레이어라도 버전 별로 접근 권한이 다릅니다. 이런 이유로 버전을 만들 때마다 공유 권한도 새로 설정해야합니다.

또한 람다 레이어는 같은 리전에서만 사용가능하므로 다른 리전에서 사용하려면 해당 리전에 람다 레이어를 만들어야 합니다. 이는 본인의 계정에서만 사용할 때도 마찬가지입니다.

권한이 없는 람다 레이어를 사용하거나 다른 리전의 레이어를 사용하려고 하면 lambda:GetLayerVersion 권한이 없다는 에러 메시지가 표시됩니다.

접근 권한이 없는 레이어를 사용하려고 시도하는 경우 에러가 발생한다
접근 권한이 없는 레이어를 사용하려고 시도하는 경우 에러가 발생한다

람다 레이어 버전에 적용된 권한을 확인하는 방법은 다음과 같습니다.

$ aws lambda get-layer-version-policy \
    --layer-name my_layer \
    --version-number 1
{
    "Statement": "{\"Sid\":\"share_all\",\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":\"lambda:GetLayerVersion\",\"Resource\":\"arn:aws:lambda:us-west-2:xxxxxx:layer:my_layer:1\"}",
    "RevisionId": "b0cd9796-d4eb-4564-939f-de7fe0b42236"
}

권한을 제거하는 방법은 다음과 같습니다.

$ aws lambda remove-layer-version-permission \
    --layer-name my_layer \
    --version-number 1 \
    --statement-id share_all

람다 레이어 공유 기능을 이용해 유용한 레이어들이 많이 공유되기를 기대합니다.