Close

GitHub로 AWS CloudWatch 알람 배포

Warren Marusiak 얼굴 사진
Warren Marusiak

선임 기술 에반젤리스트

Jira Software 및 다양한 연결된 도구를 사용하여 애플리케이션을 개발, 배포 및 관리하는 방법을 보여주기 위해 저희 팀에서는 머신러닝을 사용하여 이미지에 레이블을 적용하는 간단한 AWS 기반 데모 애플리케이션인 ImageLabeller를 만들었습니다.

이 페이지에서는 ImageLabeller가 이미지를 처리하기 위한 전제 조건인 AWS SageMaker 사전 정의 모델을 설정하는 방법을 다룹니다. 시작하기 전에 컨텍스트를 알아보도록 ImageLabeller 아키텍처GitHub로 ImageLabeller 배포 페이지를 읽어보는 것이 좋습니다.


Opsgenie 통합을 위한 알람 리포지토리 추가

Jira로 이동하여 GitHub에 AWS CloudWatch 알람 리포지토리를 추가하기 위한 Jira 이슈를 만듭니다. 이 예에서 Jira 이슈 ID는 IM-10입니다.

GitHub 리포지토리를 추가하기 위한 Jira 이슈의 스크린샷

GitHub로 이동하여 새로 만들기를 클릭합니다. 소유자에 대해 적합한 조직을 선택합니다. 리포지토리 만들기를 클릭하여 계속 진행합니다.

GitHub에서 알람 리포지토리를 만드는 스크린샷

설정을 클릭한 다음 암호를 클릭합니다. AWS 액세스 키 ID를 AWS_ACCESS_KEY_ID로 추가하고 AWS 암호 액세스 키를 AWS_SECRET_ACCESS_KEY로 추가합니다.

GitHub에 AWS 액세스 키를 추가하는 스크린샷

터미널에서 CloudWatchAlarms 리포지토리로 이동하고 다음을 실행하여 AWS CloudFormation 코드를 GitHub로 푸시합니다.

git add --all
git commit -m "IM-10 add CloudWatchAlarms to github"
git remote add origin git@github.com:PmmQuickStartGuides01/CloudWatchAlarms.git
git branch -m mainline
git push -u origin mainline

알람 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에 배포하기 위한 GitHub 작업

터미널에 있는 CloudWatchAlarms 리포지토리로 이동하여 Jira 이슈 ID의 이름을 딴 브랜치를 만들고 .github/workflows 디렉터리를 만듭니다.

git checkout -b IM-10
mkdir -p .github/workflows && cd .github/workflows

다음 yaml로 deploy-test-staging.yml을 만듭니다. 메인 라인이 아닌 다른 브랜치로 푸시하는 동안 실행되는 테스트 및 스테이징 환경을 위한 배포 워크플로를 정의합니다.

name: deploy-cloudwatchalarms-test-staging
on:
  push:
    branches:
      - '*'
      - '!mainline'

jobs:
  deploy-us-west-1:
    runs-on: ubuntu-latest
    outputs:
      env-name: ${{ steps.env-name.outputs.environment }}
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Configure AWS credentials
        id: creds
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: "us-west-1"
      - name: Deploy to AWS CloudFormation
        uses: aws-actions/aws-cloudformation-github-deploy@v1
        with:
          name: OpenDevOpsAlarms
          template: template.yml
          no-fail-on-empty-changeset: "1"

  deploy-us-east-2:
    runs-on: ubuntu-latest
    needs: deploy-us-west-1
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Configure AWS credentials
        id: creds
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: "us-east-2"
      - name: Deploy to AWS CloudFormation
        uses: aws-actions/aws-cloudformation-github-deploy@v1
        with:
          name: OpenDevOpsAlarms
          template: template.yml
          no-fail-on-empty-changeset: "1"

다음 yaml로 deploy-prod.yml을 만듭니다. 풀리퀘스트가 변경 사항을 메인 라인에 병합할 때 실행되는 프로덕션 환경을 위한 배포 워크플로를 정의합니다.

name: deploy-cloudwatchalarms-prod
on:
  pull_request:
    branches:
      - mainline

jobs:
  deploy-us-west-2:
    runs-on: ubuntu-latest
    outputs:
      env-name: ${{ steps.env-name.outputs.environment }}
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Configure AWS credentials
        id: creds
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: "us-west-2"
      - name: Deploy to AWS CloudFormation
        uses: aws-actions/aws-cloudformation-github-deploy@v1
        with:
          name: OpenDevOpsAlarms
          template: template.yml
          no-fail-on-empty-changeset: "1"

  deploy-ca-central-1:
    runs-on: ubuntu-latest
    needs: deploy-us-west-2
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Configure AWS credentials
        id: creds
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: "ca-central-1"
      - name: Deploy to AWS CloudFormation
        uses: aws-actions/aws-cloudformation-github-deploy@v1
        with:
          name: OpenDevOpsAlarms
          template: template.yml
          no-fail-on-empty-changeset: "1"

  deploy-us-east-1:
    runs-on: ubuntu-latest
    needs: deploy-ca-central-1
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Configure AWS credentials
        id: creds
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: "us-east-1"
      - name: Deploy to AWS CloudFormation
        uses: aws-actions/aws-cloudformation-github-deploy@v1
        with:
          name: OpenDevOpsAlarms
          template: template.yml
          no-fail-on-empty-changeset: "1"

기능 브랜치로 푸시

명령줄에서 다음을 실행하여 코드를 CloudWatchAlarms 리포지토리의 IM-10 브랜치로 푸시합니다.

git add --all
git commit -m "IM-10 add github actions to CloudWatchAlarms"
git push -u origin IM-10

실행 중인 워크플로를 보려면 작업을 클릭합니다.

GitHub에서 워크플로를 실행하는 스크린샷

풀리퀘스트 만들기

메인 라인에 병합하려면 리퀘스트 만들기를 클릭합니다.

GitHub에서 풀리퀘스트를 만드는 스크린샷

프로덕션 배포를 모니터링하려면 작업을 클릭합니다.

GitHub에서 프로덕션 배포의 스크린샷

알람 테스트

방금 설정한 AWS CloudWatch 알람을 트리거하거나 알림 만들기를 클릭하여 알림을 생성합니다.

Opsgenie에서 알림을 만드는 스크린샷

알림이 나타났는지 Slack을 확인해 보세요.

Opsgenie의 Slack 알림 스크린샷

축하합니다! 잘 해내셨습니다. ImageLabeller가 이제 실행되고 있습니다.

Warren Marusiak
Warren Marusiak

Warren is a Canadian developer from Vancouver, BC with over 10 years of experience. He came to Atlassian from AWS in January of 2021.


이 문서 공유
다음 토픽

여러분께 도움을 드릴 자료를 추천합니다.

이러한 리소스에 책갈피를 지정하여 DevOps 팀의 유형에 대해 알아보거나 Atlassian에서 DevOps에 대한 지속적인 업데이트를 확인하세요.

DevOps 일러스트레이션

DevOps 커뮤니티

DevOps 일러스트레이션

DevOps 학습 경로

맵 일러스트레이션

무료로 사용해보기

DevOps 뉴스레터 신청

Thank you for signing up