패키지 AWS Lambda용 앱

개발자는 AWS에 배포할 앱을 준비해야 함으로, 앱 번들을 생성하고 해당 앱을 AWS Lambda 함수로 실행 가능하게 만들어야 함.

앱 번들

앱 번들은 Mattermost 생태계에 앱을 제공하는 편리한 방법이다. 앱이 실행되기 위해 필요한 코드와 리소스를 구성하는 방법을 제공한다. 앱 번들은 앱의 개발자가 생성한다. Mattermost는 앱 번들을 사용하여 앱을 배포하고 설치/삭제한다.

앱 번들에는 manifest.json 파일, static/ 폴더(옵션) 및 하나 이상의 람다 함수 번들이 포함되어 있다.

  • static/ 폴더에는 앱이 필요로 하는 모든 정적 파일이 포함되어 있다. Mattermost AWS 앱의 경우, 정적 파일은 자동으로 배포되어 전용 AWS S3 버킷에 저장된다. 앱은 정적 파일 이름을 Apps 플러그인에 제공함으로써 무제한으로 액세스할 수 있다. 제3자 호스팅된 AWS 앱의 경우, 정적 파일은 다른 S3 버킷에 저장된다(제3자가 지정한). HTTP 앱의 경우, 서버를 생성할 때, 개발자는 정적 파일을 /static/$FILE_NAME 상대 URL에 저장해야 한다.

  • manifest.json 파일에는 앱의 appID, appVersion, appType(HTTP 또는 AWS 앱), 요청된 권한, 요청된 위치 및 함수에 대한 정보(Function path, name, runtime 및 handler) 등에 대한 세부 정보가 포함되어 있다.

  • 각 람다 함수 번들은 유효하고 실행 가능한 AWS Lambda 함수로, |Mattermost Apps Cloud Deployer|에 의해 AWS에 배포된다. AWS Lambda 함수 번들은 .zip 파일로, 스크립트 또는 컴파일된 프로그램 및 해당 의존성이 포함되어 있다. 번들은 50MB보다 작아야 한다. 번들의 정확한 사양은 다른 런타임에 따라 달라진다. 예를 들어, node.js 번들에 대한 자세한 내용은 |bundles here|에서 볼 수 있다.

AWS Lambda 함수로 실행 가능하게 만들기

앱을 AWS Lambda 함수로 실행하기 위해서는 AWS Lambda에서 지원하는 언어 중 하나를 사용해야 한다. |list here|에서 목록을 확인할 수 있다.

요청하는 앱이 하나의 요청에 걸쳐 존속하는 한, 앱을 _상태 없이(stateless)_ 디자인하는 것이 중요하다. 영구적인 정보를 저장하는 것 외에도 앱 프레임워크에서 제공하는 |store API endpoints|를 사용하여 저장되어서는 안 된다.

언어 라이브러리를 사용하여 앱에 HTTP를 흉내내는데 사용된다. Go의 경우, |aws-lambda-go-api-proxy|를 사용할 수 있다.

마지막으로, 앱의 매니페스트에 aws_lambda 를 추가함으로써 AWS 함수를 정의해야 한다. 이를 위해 다음 필드를 사용한다:

  • path : 호출 경로의 가장 긴 매칭 접두사가 호출될 람다 함수의 경로.

  • name : 사람이 읽을 수 있는 이름.

  • handler : 핸들러 함수의 이름.

  • runtime : 사용할 AWS Lambda 런타임.

Go 앱의 경우, 매니페스트 스니펫이 다음과 같이 보일 것이다:

{
    "aws_lambda": [
        {
            "path": "/",
            "name": "go-function",
            "handler": "$YOUR_APP_NAME",
            "runtime": "go1.x"
        }
    ]
}