記事
チュートリアル
インタラクティブ ガイド
Gitlab で AWS CloudWatch アラームをデプロイする
Warren Marusiak
シニア テクニカル エバンジェリスト
当社のチームは Jira Software とさまざまな接続ツールを使用してアプリケーションを開発、デプロイ、管理する方法を説明するために、機械学習を使用してイメージにラベルを添付する AWS 上に構築されたシンプルなデモ アプリケーションである ImageLabeller を作成しました。
このページでは、Opsgenie で ImageLabeller を監視する方法について説明します。はじめに、ImageLabeller アーキテクチャ ページと ImageLabeller を Gitlab でデプロイするページをお読みの上、背景を確認することをお勧めします。
Opsgenie 統合用のアラーム リポジトリを追加する
Jira に移動して、AWS CloudWatch アラーム リポジトリを Gitlab に追加するための新しい Jira 課題を作成します。この例では、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 アクセス キーを追加、保護されたブランチを設定、デプロイ環境をセットアップする必要があります。
Alarms 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]、[Pipelines] の順にクリックして、パイプラインの実行を確認します。
マージ リクエストを作成する
Gitlab がテスト環境にデプロイした後、本番環境にデプロイするためのマージ リクエストを作成します。
マージ リクエスト パイプラインの完了後、変更をメインラインにマージします。[CI/CD]、[Pipelines] の順にクリックして、実行中の本番パイプラインを確認します。
アラームのテスト
先ほど設定した AWS CloudWatch アラームをトリガーするか、[アラートを作成] をクリックしてアラートを生成します。
Slack をチェックして、通知が表示されたことを確認します。
おめでとうございます、これで完了です。ImageLabeller が稼動しています。
この記事を共有する
次のトピック
おすすめコンテンツ
次のリソースをブックマークして、DevOps チームのタイプに関する詳細や、アトラシアンの DevOps についての継続的な更新をご覧ください。