Close

使用 GitLab 部署 AWS CloudWatch 警报

Warren Marusiak 头像
Warren Marusiak

高级技术传播者

为了演示如何使用 Jira Software 和各种互联工具开发、部署和管理应用,我们的团队创建了 ImageLabeller,这是一款基于 AWS 构建的简单演示应用,它使用机器学习将标签应用于图像。

本页面介绍如何使用 Opsgenie 监控 ImageLabeller。在您开始之前,我们建议阅读 ImageLabeller 架构使用 GitLab 部署 ImageLabeller 页面,以了解背景信息。

为 Opsgenie 集成添加警报存储库

转到 Jira 并创建一个新 Jira 事务,将 AWS CloudWatch 警报存储库添加到 GitLab。在本例中,Jira 事务 ID 为 IM-6。

IM 看板屏幕截图

转到 GitLab,并创建新项目。更新项目 URL 以使用您链接到 Jira 的组。单击“创建项目”。

在 gitlab 屏幕截图中创建项目

在您的终端中,转到您的 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 次,则会发出警报。

用于部署到 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”,然后单击“管道”,以查看正在运行的生产管道。

合并管道屏幕截图

测试警报

通过触发您刚才设置的 AWS CloudWatch 提醒或单击“创建提醒”来生成提醒。

警报测试屏幕截图

查看 Slack 可看到通知已出现。

slack 通知屏幕截图

漂亮!您做到了。ImageLabeller 现已启动并运行。

Warren Marusiak
Warren Marusiak

Warren 是一位由开发人员转型的技术布道师,于 2021 年加入 Atlassian。他的职业履历涵盖从大型机运行的 COBOL 电信软件,到 AWS 现代云基础架构等各种工作。他不仅对技术充满热忱,还具备机器学习领域的研究背景。作为技术布道师,Warren 通过演示、文章和视频,提升市场对 Atlassian 产品及其合作伙伴集成能力的认知。他还负责策划《开发人员前沿》系列视频。闲暇之余,他常沉浸在巴西柔术的训练中。


分享这篇文章
下一主题

推荐阅读

将这些资源加入书签,以了解 DevOps 团队的类型,或获取 Atlassian 关于 DevOps 的持续更新。

Devops 示意图

DevOps 社区

Devops 示意图

DevOps 学习路径

地图插图

免费试用

注册以获取我们的 DevOps 新闻资讯

Thank you for signing up