아티클
튜토리얼
대화형 가이드
GitLab으로 AWS CloudWatch 알람 배포
Warren Marusiak
선임 기술 에반젤리스트
Jira Software 및 다양한 연결된 도구를 사용하여 애플리케이션을 개발, 배포 및 관리하는 방법을 보여주기 위해 저희 팀에서는 머신러닝을 사용하여 이미지에 레이블을 적용하는 간단한 AWS 기반 데모 애플리케이션인 ImageLabeller를 만들었습니다.
이 페이지에서는 Opsgenie로 ImageLabeller를 모니터링하는 방법을 다룹니다. 시작하기 전에 컨텍스트를 알아보도록 ImageLabeller 아키텍처 및 GitLab으로 ImageLabeller 배포 페이지를 읽어보는 것이 좋습니다.
Opsgenie 통합을 위한 알람 리포지토리 추가
Jira로 이동하여 GitLab에 AWS CloudWatch 알람 리포지토리를 추가하기 위한 Jira 이슈를 만듭니다. 이 예에서 Jira 이슈 ID는 IM-6입니다.
GitLab으로 이동하여 새 프로젝트를 만듭니다. Jira에 연결한 그룹을 사용하도록 프로젝트 URL을 업데이트합니다. 프로젝트 만들기를 클릭합니다.
터미널에서 CloudWatchAlarms 리포지토리로 이동하고 다음을 실행하여 AWS CloudFormation template.yml 파일을 GitLab으로 푸시합니다.
git add --all
git commit -m "IM-6 add CloudWatchAlarms repository to gitlab"
git remote add origin git@gitlab.com:pmmquickstartguides/cloudwatchalarms.git
git branch -m mainline
git push -u origin mainline
이전 리포지토리와 마찬가지로 AWS 액세스 키를 추가하고 보호되는 브랜치를 구성하고 배포 환경을 설정해야 합니다.
알람 template.yml
Description: 'A description'
Resources:
OpsGenieSNS:
Type: AWS::SNS::Topic
Properties:
DisplayName: 'Opsgenie'
Subscription:
- Endpoint: 'https://api.opsgenie.com/v1/json/cloudwatch?apiKey=a4449509-6998-4d55-841d-2e6b363520c7'
Protocol: 'HTTPS'
TopicName: 'Opsgenie'
SubmitImageLambdaAlarm:
Type: AWS::CloudWatch::Alarm
Properties:
AlarmActions:
- !Ref 'OpsGenieSNS'
AlarmDescription: 'SubmitImage Too Many Invocations'
ComparisonOperator: 'GreaterThanThreshold'
Dimensions:
- Name: FunctionName
Value: !ImportValue 'SubmitImageFunctionName'
EvaluationPeriods: 1
MetricName: 'Invocations'
Namespace: 'AWS/Lambda'
Period: 60
Statistic: 'Sum'
Threshold: 10
SNS 토픽 구독 엔드포인트를 Opsgenie에서 복사한 엔드포인트 URL로 설정합니다. SubmitImageLambdaAlarm은 SubmitImage AWS Lambda에서 방출되는 단일 메트릭을 모니터링합니다. 호출이 10회 이상이면 1분 동안 알람이 울립니다.
AWS에 배포하기 위한 .gitlab-ci.yml
터미널에 있는 CloudWatchAlarms 리포지토리로 이동하여 Jira 이슈 ID의 이름을 딴 브랜치를 만듭니다.
git checkout -b IM-6
다음 yaml로 .gitlab-ci.yml 파일을 만듭니다. 이것은 테스트, 스테이징, 프로덕션 환경을 위한 배포 워크플로를 정의합니다.
stages:
- merge-request
- test-us-west-1
- test-us-east-2
- production-us-west-2
- production-us-east-1
- production-ca-central-1
merge-request-pipeline-job:
stage: merge-request
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
script:
- echo "This pipeline always succeeds and enables merge."
- echo true
deploy-test-us-west-1:
stage: test-us-west-1
environment: test-us-west-1
rules:
- if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- aws cloudformation deploy --region us-west-1 --template-file template.yml --stack-name OpenDevOpsAlarms
deploy-test-us-east-2:
stage: test-us-east-2
environment: test-us-east-2
rules:
- if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- aws cloudformation deploy --region us-east-2 --template-file template.yml --stack-name OpenDevOpsAlarms
deploy-production-us-west-2:
stage: production-us-west-2
environment: production-us-west-2
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- aws cloudformation deploy --region us-west-2 --template-file template.yml --stack-name OpenDevOpsAlarms
deploy-production-us-east-1:
stage: production-us-east-1
environment: production-us-east-1
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- aws cloudformation deploy --region us-east-1 --template-file template.yml --stack-name OpenDevOpsAlarms
deploy-production-ca-central-1:
stage: production-ca-central-1
environment: production-ca-central-1
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- aws cloudformation deploy --region us-east-2 --template-file template.yml --stack-name OpenDevOpsAlarms
기능 브랜치로 푸시
명령줄에서 다음을 실행하여 CloudWatchAlarms 리포지토리의 IM-6 브랜치로 변경 사항을 푸시합니다. 커밋 메시지에 Jira 이슈 ID 및 브랜치 이름을 포함하면 Jira GitLab 통합이 프로젝트 진행 상황을 추적하도록 할 수 있습니다.
git add --all
git commit -m "IM-6 .gitlab-ci.yml to CloudWatchAlarms repo"
git push -u origin IM-6
CI/CD를 클릭한 다음 파이프라인을 클릭하여 파이프라인이 실행되는 것을 확인합니다.
병합 요청 만들기
GitLab이 테스트 환경에 배포한 후에 프로덕션 환경에 배포할 병합 요청을 만듭니다.
병합 요청 파이프라인이 완료된 후에 변경 사항을 메인 라인에 병합합니다. CI/CD를 클릭한 다음 Pipelines를 클릭하여 프로덕션 파이프라인이 실행되는 것을 확인합니다.
알람 테스트
방금 설정한 AWS CloudWatch 알람을 트리거하거나 알림 만들기를 클릭하여 알림을 생성합니다.
알림이 나타났는지 Slack을 확인해 보세요.
축하합니다! 잘 해내셨습니다. ImageLabeller가 이제 실행되고 있습니다.
이 문서 공유
다음 토픽
여러분께 도움을 드릴 자료를 추천합니다.
이러한 리소스에 책갈피를 지정하여 DevOps 팀의 유형에 대해 알아보거나 Atlassian에서 DevOps에 대한 지속적인 업데이트를 확인하세요.