使用 GitLab 部署 AWS CloudWatch 警报
Warren Marusiak
高级技术传播者
为了演示如何使用 Jira Software 和各种互联工具开发、部署和管理应用,我们的团队创建了 ImageLabeller,这是一款基于 AWS 构建的简单演示应用,它使用机器学习将标签应用于图像。
本页面介绍如何使用 Opsgenie 监控 ImageLabeller。在您开始之前,我们建议阅读 ImageLabeller 架构和 使用 GitLab 部署 ImageLabeller 页面,以了解背景信息。
为 Opsgenie 集成添加警报存储库
转到 Jira 并创建一个新 Jira 事务,将 AWS CloudWatch 警报存储库添加到 GitLab。在本例中,Jira 事务 ID 为 IM-6。
转到 GitLab,并创建新项目。更新项目 URL 以使用您链接到 Jira 的组。单击“创建项目”。
在您的终端中,转到您的 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 可看到通知已出现。
漂亮!您做到了。ImageLabeller 现已启动并运行。
分享这篇文章
下一主题
推荐阅读
将这些资源加入书签,以了解 DevOps 团队的类型,或获取 Atlassian 关于 DevOps 的持续更新。