2017년 8월 8일 화요일

[AWS] Apex 시작하기

Apex 시작하기

Apex 란?

Apex는 AWS Lambda Function을 로컬PC에서 빌드하고, 배포하고, 관리하는 Tool입니다.
공식 Github Repository
https://github.com/apex/apex
본 글에서는 Apex을 설치하고 이를 이용하여 AWS Lambda에 Function을 배포하는 절차를 정리해보려 합니다.

1. Apex 설치

저는 Windows 환경에서 진행합니다. 그래서 설치가 명령어 한줄 입력하는 게 아니라,
https://github.com/apex/apex/releases 에서 운영체제에 맞는 설치파일을 다운받아야합니다.
저는 apex_windows_amd64.exe를 받았습니다.
근데, exe를 받았는데 이걸로 설치하는 형식이 아닙니다.
단순히 cmd 또는 powershell로 열어서 저 파일명 전체를 명령어로 사용하는 것입니다. 아래 처럼요.
PS C:\{파일경로}> .\apex_windows_amd64.exe version
Apex version 0.15.0
참으로 불편하지요...
다행히 Powershell에서는 명령어 Alias 설정이 가능합니다.
아래와 같이 하면 apex 만 입력해도 apex 명령어 사용이 가능합니다.
절대경로로 입력해야 어떤 디렉토리 위치에서도 apex 명령어를 사용할 수 있습니다.
Set-Alias apex {apex이 설치된 절대경로}\apex_windows_amd64.exe

2. Apex에 AWS credentials 설정

AWS CLI에 AWS credentials 정보만 잘 기입하면 됩니다.
Apex은 단지 AWS CLI를 이용할 뿐인거 같습니다. 그러니 AWS CLI에 credentials 정보를 잘 설정해줘야합니다.

3. 사용자 계정에 필수 권한 부여

AWS CLI에 입력한 사용자 계정은 아래 권한이 필수적으로 있어야 Apex 사용이 가능합니다.
Apex을 사용하기 위한 최소한의 권한입니다.
IAM에서 새로운 Policy를 생성하여 아래 JSON 문서를 넣어주고 해당 Policy를 AWS CLI에 등록한 사용자 계정에게 부여하면 좋습니다.
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "iam:CreateRole",
        "iam:CreatePolicy",
        "iam:AttachRolePolicy",
        "iam:PassRole",
        "lambda:GetFunction",
        "lambda:ListFunctions",
        "lambda:CreateFunction",
        "lambda:DeleteFunction",
        "lambda:InvokeFunction",
        "lambda:GetFunctionConfiguration",
        "lambda:UpdateFunctionConfiguration",
        "lambda:UpdateFunctionCode",
        "lambda:CreateAlias",
        "lambda:UpdateAlias",
        "lambda:GetAlias",
        "lambda:ListAliases",
        "lambda:ListVersionsByFunction",
        "logs:FilterLogEvents",
        "cloudwatch:GetMetricStatistics"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}

4. Apex 프로젝트 생성

Apex을 이용한 프로젝트는 아래 명령어로 시작합니다.
apex init
init 명령을 입력하면 아래와 같은 화면이 출력됩니다.
Project name과 Project description을 입력하면 apex이 자동으로 필요한 role과 policy를 aws에 생성하고, 기본 파일구조를 생성합니다.
이때 생성되는 role과 policy는 CloudWatch에 Log를 남길 수 있는 권한입니다.
PS C:\> apex init


             _    ____  _______  __
            / \  |  _ \| ____\ \/ /
           / _ \ | |_) |  _|  \  /
          / ___ \|  __/| |___ /  \
         /_/   \_\_|   |_____/_/\_\



  Enter the name of your project. It should be machine-friendly, as this
  is used to prefix your functions in Lambda.

    Project name: pcm-tutorial

  Enter an optional description of your project.

    Project description: This is test project.

  [+] creating IAM pcm-tutorial_lambda_function role
  [+] creating IAM pcm-tutorial_lambda_logs policy
  [+] attaching policy to lambda_function role.
  [+] creating ./project.json
  [+] creating ./functions

  Setup complete, deploy those functions!

    $ apex deploy

프로젝트를 생성하면 기본 예제가 함께 생성되는데,
위 출력문의 제일 마지막에 있는 apex deploy를 실행하면, 이 기본 예제가 AWS Lambda에 배포됩니다.
PS C:\> apex deploy
   • creating function         env= function=hello
   • created alias current     env= function=hello version=1
   • function created          env= function=hello name=pcm-tutorial_hello version=1
Apex을 이용하면 AWS Lambda를 호출하는 것도가능합니다. 방금 배포한 예제를 호출해 볼 수 있습니다.
apex invoke hello
아래 결과를 응답 받습니다.
{"hello":"world"}

5. Apex 프로젝트 기본 파일 구조

Apex 프로젝트의 기본 구조는 다음과 같습니다.
project.json
functions
├── bar
│   ├── function.json
│   └── index.js
└── foo
    ├── function.json
    └── index.js
project.json파일에는 프로젝트의 이름과 설명, 그리고 프로젝트 레벨의 설정들이 있습니다.
functions폴더 하위에 여러 Lambda 함수들이 위치합니다.
위 예제 구조에서는 bar 함수와 foo 함수가 있습니다.
각 Lambda 함수에는 함수를 수행하는 index.js파일과 함수의 설정 파일인 function.json이 있습니다.

마무리

Apex에서 기본 예제를 제공해주고, Apex 공식 홈페이지(http://apex.run)을 보면 Apex 설정부터 사용까지 자세하게 잘 나와 있어서 잘 알아두면 Lambda를 편리하게 사용할 수 있을 것 같습니다.

참고 링크

댓글 없음:

댓글 쓰기