AWS 람다 함수 관리 툴 – Apex (2)

프로젝트 구조

프로젝트는 AWS 람다 함수의 모음입니다.

설정

프로젝트 루트 디렉토리에 project.json 파일이 있습니다. 아래 예제는 모든 람다 함수에 대한 기본 AWS IAM롤과 메모리의 기본 값을 정의하고 있습니다.

{
"name": "node",
"description": "Node.js example project",
"role": "arn:aws:iam::293503197324:role/lambda",
"memory": 512
}

다중 환경

--env 플래그를 통해 복수의 환경을 지원합니다. 기본적으로 project.jsonfunction.json 파일이 이용되지만 --env 플래그가 설정되면 project.ENV.jsonfunction.ENV.json이 사용됩니다.

아래는 디렉토리 구조에 대한 예시입니다.

project.stage.json
project.prod.json
functions
├── bar
│   ├── function.stage.json
│   ├── function.prod.json
│   └── index.js
└── foo
    ├── function.stage.json
    ├── function.prod.json
    └── index.js

만약 devstaging 환경이 기본값으로 사용되길 원한다면 해당 내용을 project.jsonfunction.json에 설정하면 됩니다.

project.json
project.prod.json
functions
├── bar
│   ├── function.json
│   ├── function.prod.json
│   └── index.js
└── foo
    ├── function.json
    ├── function.prod.json
    └── index.js

Symlinks

Apex는 파일이나 디렉토리의 심볼릭 링크를 지원합니다. Apex는 링크 정보를 읽어서 함수에 포함된 파일이 아니어도 자동으로 포함시킬 것입니다.

이 기능은 npm link의 사용이나 공용 설정 등을 사용할 수 있게 해줍니다.

필드

name

프로젝트의 이름입니다. 이 필드는 복수의 프로젝트 사이에서 충돌을 막기 위한 nameTemplate의 기본값으로 사용됩니다.

  • 타입: string
  • 필수 항목

description

프로젝트에 대한 설명입니다.

  • 타입: string

runtime

function.json에 구동 환경이 별도로 설정되지 않았을 때에 함수의 기본 구동 환경을 정의합니다.

  • 타입: string

다음과 같은 구동 환경이 지원됩니다

  • java (java 8)
  • python2.7 (Python 2.7)
  • python3.6 (Python 3.6)
  • nodejs4.3 (Node.js 3.4)
  • nodejs4.3-edge (Node.js 3.4 Edge)
  • nodejs6.10 (Node.js 6.10)
  • golang (Any version)
  • clojure (Any version)
  • rust-musl[^rust-runtime][^rust-linux-only] (Any version)
  • urst-gnu[^rust-runtime][^rust-linux-only] (Any version)

[^rust-runtime] : Rust는 2가지 타입의 libc 의존성을 갖는데 rust-musl을 사용하는 것을 권장합니다. rust-gnu를 사용하면 당신의 람다 함수가 람다 서버와 당신의 PC 사이에서 glibc 버전의 불일치로 인해 실행이 거절될 수 있습니다.
[^rust-linux-only] : Rust 버전의 람다 함수는 현재 리눅스 머신에서만 빌드할 수 있습니다. 만약 Mac OS에서 빌드하려고 하면 링커 에러가 발생할 것입니다. 한 가지 솔루션은 Mac에서 apex를 Docker 컨테이너에서 실행하는 것입니다.

memory

함수의 function.json에서 별도로 설정하지 않았을 때의 기본 메모리 사용량입니다.

  • 타입: int

timeout

함수의 function.json에서 별도로 설정하지 않았을 때의 기본 타임 아웃 시간입니다.

  • 타입: int

role

함수의 function.json에서 별도로 설정하지 않았을 때의 롤입니다.

  • 타입: string

profile

사용할 AWS 프로파일의 이름입니다. 이 이름은 ~/.aws/credentials에 정의된 이름들입니다. AWS_PROFILE이나 --profile 설정을 사용하고 싶지 않다면 이 설정을 사용하세요

  • 타입: string

defaultEnvironment

기본 인프라 환경입니다.

  • 타입: string

nameTemplate

함수명을 구하는데 사용될 템플릿입니다. 기본값은 {{.Project.Name}}_{{.Function.Name}} 입니다. 예를 들어 api라는 프로젝트에 ./functions/users라는 함수가 정의되었다면 함수명은 api_users가 됩니다.

  • 타입: string

retainedVersion

함수의 function.json에서 별도로 설정하지 않았을 때의 람다 함수의 버전을 얼마나 유지할지에 대한 기본 숫자입니다.

Apex는 기본으로 10개의 버전을 유지하고 그 이전 버전의 내용은 삭제합니다. AWS는 AWS 계정 레벨에서 람다 함수들의 이전 버전 저장 공간에 대한 하드 리밋을 설정하고 있습니다.

  • 타입: int

vpc

함수의 function.json에서 별도로 설정하지 않았을 때의 기본 VPC 설정입니다.

  • 타입: object

vpc.securityGroup

보안 그룹 ID의 목록입니다.

  • 타입: array

vpc.subnets

서브넷 ID의 목록입니다.

  • 타입: array