Close

使用 Bitbucket 部署 AWS CloudWatch 警报

Warren Marusiak 头像
Warren Marusiak

高级技术传播者

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

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

为 Opsgenie 集成添加警报存储库

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

Opsgenie 添加警报屏幕截图

转到 Bitbucket,并单击“创建”,然后单击“存储库”。

存储库屏幕截图

选择相应“工作区”和“项目”。将“默认分支名称”设置为主线。单击“创建存储库”以继续。

创建存储库屏幕截图

在您的终端中转到 CloudWatchAlarms 存储库,运行以下命令,将您的 AWS CloudFormation 模板代码推送到 Bitbucket。

git add --all
git commit -m "IM-9 add CloudWatchAlarms to Bitbucket"
git remote add origin git@bitbucket.org: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 次,则会发出警报。

用于部署到 AWS 的 bitbucket-pipelines.yml

在您的终端中转到 CloudWatchAlarms 存储库,创建一个以您的 Jira 事务 ID 命名的分支。

definitions:
  steps:
    - step: &deploy-test-usw1
        name: Deploy Test us-west-1
        script:
        - pipe: atlassian/aws-cloudformation-deploy:0.10.0
          variables:
            AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
            AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
            AWS_DEFAULT_REGION: 'us-west-1'
            STACK_NAME: 'OpenDevOpsAlarms'
            CAPABILITIES: ['CAPABILITY_IAM''CAPABILITY_AUTO_EXPAND']
            WAIT: 'true'
            TEMPLATE: 'template.yml'
    - step: &deploy-staging-use2
        name: Deploy Staging us-east-2
        script:
        - pipe: atlassian/aws-cloudformation-deploy:0.10.0
          variables:
            AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
            AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
            AWS_DEFAULT_REGION: 'us-east-2'
            STACK_NAME: 'OpenDevOpsAlarms'
            CAPABILITIES: ['CAPABILITY_IAM''CAPABILITY_AUTO_EXPAND']
            WAIT: 'true'
            TEMPLATE: 'template.yml'
    - step: &deploy-production-usw2
        name: Deploy Production us-west-2
        script:
        - pipe: atlassian/aws-cloudformation-deploy:0.10.0
          variables:
            AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
            AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
            AWS_DEFAULT_REGION: 'us-west-2'
            STACK_NAME: 'OpenDevOpsAlarms'
            CAPABILITIES: ['CAPABILITY_IAM''CAPABILITY_AUTO_EXPAND']
            WAIT: 'true'
            TEMPLATE: 'template.yml'
    - step: &deploy-production-use1
        name: Deploy Proudction us-east-1
        script:
        - pipe: atlassian/aws-cloudformation-deploy:0.10.0
          variables:
            AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
            AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
            AWS_DEFAULT_REGION: 'us-east-1'
            STACK_NAME: 'OpenDevOpsAlarms'
            CAPABILITIES: ['CAPABILITY_IAM''CAPABILITY_AUTO_EXPAND']
            WAIT: 'true'
            TEMPLATE: 'template.yml'
    - step: &deploy-production-cac1
        name: Deploy Production ca-central-1
        script:
        - pipe: atlassian/aws-cloudformation-deploy:0.10.0
          variables:
            AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
            AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
            AWS_DEFAULT_REGION: 'ca-central-1'
            STACK_NAME: 'OpenDevOpsAlarms'
            CAPABILITIES: ['CAPABILITY_IAM''CAPABILITY_AUTO_EXPAND']
            WAIT: 'true'
            TEMPLATE: 'template.yml'
pipelines:
  default:
    - step:
        <<: *deploy-test-usw1
        deployment: Test us-west-1
    - step:
        <<: *deploy-staging-use2
        deployment: Staging us-east-2
  branches:
    mainline:
      - step:
          <<: *deploy-production-usw2
          deployment: Production us-west-2
      - step:
          <<: *deploy-production-use1
          deployment: Production us-east-1
      - step:
          <<: *deploy-production-cac1
          deployment: Production ca-central-1

请记住,在管道运行之前,您需要启用管道、设置部署环境并将 AWS 访问密钥添加到存储库。

推送到功能分支

从命令行运行以下命令,将您的变更推送到 CloudWatchAlarms 存储库的 IM-9 分支。在提交消息中包含 Jira 事务 ID 和分支名称,以使 Jira Bitbucket 集成能够跟踪您的项目中正在发生的情况。

git add --all
git commit -m "IM-9 add bitbucket-pipelines.yml to CloudWatchAlarms"
git push -u origin IM-9

单击“管道”,然后单击“IM-9”以查看正在运行的管道。

IM-9 运行管道屏幕截图

创建拉取请求

如需创建拉取请求,请单击“拉取请求”,然后单击“创建拉取请求”。完成拉取请求,并单击“管道”以查看生产部署。

创建拉取请求屏幕截图

测试警报

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

观看警报屏幕截图

漂亮!您做到了。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