AWS로의 앱 배포
Self-managed 환경에서 배포
AWS Lambda용으로 설계되고 번들로 묶인 앱은 고객 자체 AWS 환경에 배포되어, 자체 관리형 (“온프렘”) Mattermost 인스턴스에 설치될 수 있습니다. Mattermost 클라우드 인스턴스에서 사용할 수 있는 AWS 호스팅 앱은 Mattermost에서 제공하는 앱만 사용 가능합니다.
AWS용 앱을 개발하고 패키징하는 자세한 내용은 Package / AWS 를 참조하세요.
자체 관리형 Mattermost 인스턴스에 AWS 애플리케이션을 활성화하려면 세 가지 단계가 필요합니다.
1. AWS 환경 초기화
AWS S3 버킷 설정
AWS 내에 S3 버킷을 생성하거나 기존 버킷을 사용해야 합니다.
https://s3.console.aws.amazon.com을 방문하세요.
버킷을 생성합니다.
버킷 이름 : 버킷에 이름을 지정하고, 나중에
MM_APPS_S3_BUCKET
환경 변수에 사용됩니다.AWS 지역 : a. 지역을 선택하세요 b. 나중에
MM_APPS_AWS_REGION
환경 변수에 사용될 슬러그 값을 저장하세요 (예:us-east-1
) - 해당 람다는 동일한 지역에 배포될 것입니다.이 버킷에 대한 공개 액세스 설정 a. (선택 사항) 모든 공개 액세스 차단 을 확인합니다.
버킷 생성 을 선택하세요.
특권이 있는 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_KEY
는appsctl 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](../_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](../_images/deploy-mm-aws.png)