AWS 람다 함수 관리 툴 – APEX (6)

dry-run으로 미리보기

Apex는 어떤 오퍼레이션에서도 --dry-run 플래그를 통해 AWS 반영없이 미리 결과를 확인해 볼 수 있습니다.

Notation

Dry run은 아래 심볼을 사용하여 리소스의 미래 상태를 표현합니다.

  • + 리소스는 생성될 것입니다.
  • - 리소스는 삭제될 것입니다.
  • ~ 리소스는 업데이트 될 것입니다.

예제

예를 들어 여러분이 foo, bar 함수를 작성했고, 아직 한 번도 배포한 적이 없다면 아래와 같은 응답을 보게 될 것입니다. 아래 아웃풋은 AWS에 전송되는 최종 요청을 나타냅니다. 충돌을 방지하기 위해 함수의 이름에 prefix를 붙이고 current 릴리즈 앨리어스를 유지하기 위해 추가 앨리어스를 붙이는 내용을 볼 수 있습니다.

$ apex deploy --dry-run

  + function testing_bar
    handler: _apex_index.handle
    runtime: nodejs
    memory: 128
    timeout: 5

  + alias testing_bar
    alias: current
    version: 1

  + function testing_foo
    memory: 128
    timeout: 5
    handler: _apex_index.handle
    runtime: nodejs

  + alias testing_foo
    alias: current
    version: 1

apex deploy foo 명령어를 실행한 후 apex deploy --dry-run 명령어를 실행했다면 아래와 같이 bar 함수만 디플로이된다는 내용을 확인할 수 있습니다.

Apex는 함수의 hash 값이 배포된 함수와 동일하면 배포하지 않습니다.

$ apex deploy --dry-run

  + function testing_bar
    runtime: nodejs
    memory: 128
    timeout: 5
    handler: index.handle

  + alias testing_bar
    alias: current
    version: 1

유사한 방법으로 설정이 변경된 부분을 미리 확인하는데도 사용할 수 있습니다.

$ apex deploy --dry-run

  ~ alias testing_foo
    alias: current
    version: $LATEST

  ~ config testing_foo
    memory: 128 -> 512
    timeout: 5 -> 10

아래는 함수 delete에 대한 preview입니다.

$ apex delete --dry-run -f

  - function testing_bar

  - function testing_foo

환경 변수

Apex는 KMS를 통해 암호화된 새로운 네이티브 AWS Lambda 환경 변수를 지원합니다. 이러한 변수를 설정하는 방법은 여러가지가 있는데 살펴보도록 합시다

-set 플래그

-s, --set 플래그는 함수 런타임에 노출되는 환경 변수를 설정하는데 사용됩니다. 예를 들어 node.js 환경에서의 process.env.NAME이나 go 언어에서의 os.Getenv("NAME")같은 값들을 말합니다. 이 플래그는 여러 번 설정할 수 있습니다.

예를 들어 여러분이 Loggly 로그 수집기를 사용하고 수집기 사용을 위해 API 토큰을 설정해야 한다면 아래와 같이 설정할 수 있습니다.

$ apex deploy -s LOGGLY_TOKEN=token log-collector

-env-file 플래그

-E, --env-file 플래그를 사용하여 여러 환경 변수를 담고 있는 JSON 파일을 반영할 수 있습니다.

$ apex deploy --env-file /path/to/env.json
// Sample env.json
{
  "LOGGLY_TOKEN": "12314212213123"
}

설정 파일 (project.json 혹은 function.json)

project.json 혹은 function.json 파일에 환경 변수를 설정하는 것도 가능합니다.

하지만 설정값은 반드시 string 타입이어야 합니다.

{
  "environment": {
    "LOGGLY_TOKEN": "12314212213123"
  }
}

우선 순위

적용 우선 순위는 아래와 같습니다.

  1. -s, --set 플래그
  2. -E, --env-file 플래그
  3. project.json 혹은 function.json 파일에 설정된 환경 변수 값

파일 무시(omitting)하기

부가적으로 .apexignore 파일을 프로젝트 루트나 특정 함수 디렉토리에 배치할 수 있으며 gitignore 파일과 동일한 패턴을 사용하여 파일을 무시할 수 있습니다. 기본적으로 .apexignore, function.json 파일은 무시됩니다.

무시된다 == 람다 함수 패키징 과정에서 포함되지 않는다

( 나머지 내용은 딱히 중요하지 않아서 번역하진 않겠습니다 ^^)