AWS로의 앱 배포

Self-managed 환경에서 배포

AWS Lambda용으로 설계되고 번들로 묶인 앱은 고객 자체 AWS 환경에 배포되어, 자체 관리형 (“온프렘”) Mattermost 인스턴스에 설치될 수 있습니다. Mattermost 클라우드 인스턴스에서 사용할 수 있는 AWS 호스팅 앱은 Mattermost에서 제공하는 앱만 사용 가능합니다.

AWS용 앱을 개발하고 패키징하는 자세한 내용은 Package / AWS 를 참조하세요.

자체 관리형 Mattermost 인스턴스에 AWS 애플리케이션을 활성화하려면 세 가지 단계가 필요합니다.

1. AWS 환경 초기화

AWS S3 버킷 설정

AWS 내에 S3 버킷을 생성하거나 기존 버킷을 사용해야 합니다.

  1. https://s3.console.aws.amazon.com을 방문하세요.

  2. 버킷을 생성합니다.

  3. 버킷 이름 : 버킷에 이름을 지정하고, 나중에 MM_APPS_S3_BUCKET 환경 변수에 사용됩니다.

  4. AWS 지역 : a. 지역을 선택하세요 b. 나중에 MM_APPS_AWS_REGION 환경 변수에 사용될 슬러그 값을 저장하세요 (예: us-east-1 ) - 해당 람다는 동일한 지역에 배포될 것입니다.

  5. 이 버킷에 대한 공개 액세스 설정 a. (선택 사항) 모든 공개 액세스 차단 을 확인합니다.

  6. 버킷 생성 을 선택하세요.

특권이 있는 IAM 사용자 액세스 키 및 비밀키 생성

앱을 배포할 때 appsctl 이 사용할 액세스 키와 비밀키가 필요합니다. 이 자격 증명은 IAM 사용자를 생성하거나 특권을 갖는 IAM 사용자를 사용하거나 심지어 AWS 계정 소유자의 개인 액세스 키를 사용하여 얻을 수 있습니다. 이 단계를 완료하려면 AWS에서 제공하는 지침을 따르세요 .

AWS_DEPLOY 환경 변수 설정

Apps 플러그인을 설치한 위치에서 터미널을 열고 다음 변수를 방금 생성하고 저장한 AWS 자격 증명으로 설정하세요:

  • MM_APPS_DEPLOY_AWS_ACCESS_KEY

  • MM_APPS_DEPLOY_AWS_SECRET_KEY

다음 환경 변수를 Step 1에서 버킷 이름과 지역에 기반하여 설정하세요:

  • MM_APPS_S3_BUCKET

  • MM_APPS_AWS_REGION

AWS 리소스 초기화

다음 명령어는 Mattermost 호출 자격 증명과 정책을 AWS에서 사용할 수 있도록 생성합니다.

go run ./cmd/appsctl aws init [flags...]

다음을 생성하거나 업데이트합니다:

  • 서버가 앱을 호출하는 데 사용할 IAM 사용자 ( mattermost-apps-invoke )를 생성합니다.

  • 서버가 앱을 호출하는 데 사용될 IAM 그룹 ( mattermost-apps-invoke-group )을 생성합니다.

  • Lambda와 S3 자원에 대한 액세스를 제어하는 데 사용되는 IAM 정책을 생성합니다. 이는 호출 그룹 ( mattermost-apps-invoke-policy )에서 사용됩니다.

  • 앱의 기능을 실행하는 데 사용되는 IAM 역할 ( mattermost-apps-execute-lambda-role )을 생성하고 AWSLambdaBasicExecutionRole 을 첨부합니다.

    appsctl 명령어용 선택적 플래그:

  • --create-access-key 새로운 액세스 키를 생성하고 출력합니다.

  • --create 아직 존재하지 않는 리소스(사용자, 그룹, 역할, 액세스 정책)를 생성합니다.

  • --group 함수(들)을 호출할 그룹의 이름입니다. 기본값은 mattermost-apps-invoke-group 입니다.

  • --policy 함수(들)을 호출하는 데 사용할 정책의 이름입니다. 기본값은 mattermost-apps-invoke-policy 입니다.

  • --user 람다 함수(들)를 호출할 사용자의 이름입니다. 기본값은 mattermost-apps-invoke 입니다.

명령의 출력에는 두 개의 “Invoke” 환경 변수가 포함되어 있습니다.

2. Mattermost Apps용 AWS Upstream 활성화

AWS 앱 설치 및 사용을 위해 Mattermost 서버를 다음과 같은 환경 변수와 함께 (다시) 시작해야 합니다:

  • MM_APPS_AWS_ACCESS_KEY mattermost-apps-invoke 사용자의 AWS 액세스 키 ID입니다. appsctl aws init --create-access-key 를 사용한 경우 명령어 출력에서 한 번만 찾을 수 있습니다.

  • MM_APPS_AWS_SECRET_KEY 상기 액세스 키의 비밀 키입니다.

  • MM_APPS_AWS_REGION 사용할 AWS 지역입니다.

  • MM_APPS_S3_BUCKET 정적 자산 및 매니페스트용 AWS 버킷의 이름입니다.

Mattermost 서버를 다시 시작하여 Mattermost 및 AWS 설정을 완료하세요. 이제 AWS로 앱을 배포할 수 있습니다.

3. AWS로 앱 배포

앱을 AWS로 배포하기

번들에서 AWS 앱을 배포하려면 appsctl aws deploy {aws-bundle.zip} 명령어를 사용하세요. 이는 AWS에 필요한 모든 리소스를 배포하고 필요에 따라 호출 정책을 업데이트하며, 앱을 Mattermost 서버에 “리스트업” (앱의 매니페스트를 업로드)합니다. --install 은 앱이 배포된 후 자동으로 설치하는 데 사용할 수 있습니다.

플래그:

  • --execute-role 람다 함수를 실행하는 데 사용할 역할의 이름입니다. 기본값은 mattermost-apps-execute-lambda-role 입니다.

  • --install 앱을 배포한 후 자동으로 Mattermost 서버에 설치합니다.

  • --policy 람다 함수를 호출하는 데 사용할 정책의 이름입니다. 기본값은 mattermost-apps-invoke-policy 입니다.

  • --update 이미 존재하는 람다 함수를 업데이트합니다.

명령을 실행하려면 다음 환경 변수가 설정되어 있어야 합니다:

  • MM_SERVICESETTINGS_SITEURL 은 Mattermost 서버 API에 액세스할 수 있는 위치여야 합니다.

  • MM_ADMIN_TOKEN 은 Mattermost REST API에 액세스하려면 설정해야 합니다.

  • MM_APPS_AWS_REGION 은 리소스가 배포되고 액세스되는 AWS 지역으로 설정되어 있어야 합니다.

  • MM_APPS_S3_BUCKET 은 매니페스트 및 정적 자산을 저장하는 데 사용되는 S3 버킷의 이름이어야 합니다.

  • MM_APPS_DEPLOY_AWS_ACCESS_KEY , MM_APPS_DEPLOY_AWS_SECRET_KEY 는 AWS에 함수와 파일을 배포하는 데 사용되는 특권을 갖는 자격 증명입니다.

  • MM_APPS_AWS_ACCESS_KEY , MM_APPS_AWS_SECRET_KEYappsctl aws test 명령어에서만 사용되는 함수를 호출하는 데 사용되는 “특권이 없는” 자격 증명입니다.

배포된 후, 앱은 Mattermost에서 상호 작용적으로 /apps install listed 명령어를 사용하여 설치할 수 있습니다. 이 명령은 Mattermost에 설치할 수 있는 모든 배포된 앱을 보여줍니다.

배포된 앱 세부 정보

AWS Lambda 함수 명명

AWS Lambda 함수는 의미 있는 이름을 가지고 있으며, manifest.json 파일에 설명된 함수는 충돌을 피하기 위해 AWS에서 $appID_$appVersion_$functionName 으로 번역됩니다. appsctl 은 AWS Lambda 함수의 이름 지정을 처리합니다. 예를 들어, servicenow 앱의 람다 함수의 이름은 com-mattermost-servicenow_0-1-0_go-function 일 수 있습니다. 전용 S3 버킷 이름은 환경 변수에 저장됩니다: MM_APPS_S3_BUCKET .

Storage of app assets and manifests

위에 언급된 AWS S3 버킷은 모든 앱 정적 에셋과 매니페스트 파일을 저장하는 데 사용됩니다.

번들의 정적 폴더의 모든 파일은 앱의 정적 에셋으로 간주되며 위에서 언급한 버킷에 저장됩니다. 저장된 에셋은 의미 있는 키를 가지며 다음과 같은 규칙을 사용하여 생성됩니다: static/$appID_$appVersion/filename . 예를 들어, servicenow 앱의 정적 파일 키는 "static/com.mattermost.servicenow_0.1.0_app/photo.png" 에서 확인할 수 있습니다.

매니페스트 파일의 저장

앱의 manifest.json 파일은 동일한 S3 버킷에 다음과 같은 키로 저장됩니다: manifests/$appID_$appVersion.json .

AWS에 사용자 정의 앱 배포

../_images/deploy-third-party-aws.png

Mattermost 클라우드 배포

Mattermost 클라우드에 배포하려면 앱 번들을 특정 S3 버킷에 업로드해야 합니다. 새로운 앱 릴리스에서는 GitLab CI에 의해 번들이 생성되고 S3에 업로드됩니다. 1시간마다 k8s cron job으로 실행되는 |Mattermost 앱 클라우드 디플로이어|는 S3 업로드를 감지하고 appsclt 가 제3자 계정을 위해 하는 것과 동일한 방식으로 적절한 람다 함수, 에셋 및 매니페스트를 생성합니다.

디플로이어는 앱을 배포하기 위해 람다 함수 이름, 에셋 키 및 매니페스트 키가 필요합니다. 앱 툴에서 aws.GetProvisionDataFromFile(/PATH/TO/THE/APP/BUNDLE) 을 호출하여 배포 데이터를 가져옵니다. 동일한 데이터는 다음 명령을 사용하여 생성할 수 있습니다:

appsctl generate-terraform-data /PATH/TO/YOUR/APP/BUNDLE

AWS에 사용자 정의 앱 배포

../_images/deploy-mm-aws.png