Gitlab で AWS CloudWatch アラームをデプロイする

当社のチームは Jira Software とさまざまな接続ツールを使用してアプリケーションを開発、デプロイ、管理する方法を説明するために、機械学習を使用してイメージにラベルを添付する AWS 上に構築されたシンプルなデモ アプリケーションである ImageLabeller を作成しました。

このページでは、Opsgenie で ImageLabeller を監視する方法について説明します。はじめに、背景を知るために ImageLabeller アーキテクチャ ページと ImageLabeller を Gitlab でデプロイするページを読むことをお勧めします。

Opsgenie 統合用のアラーム リポジトリを追加する

Jira に移動して、AWS CloudWatch アラーム リポジトリを Gitlab に追加するための新しい Jira 課題を作成します。この例では、Jira 課題 ID は IM-6 です。

Gitlab にリポジトリ「AWS クラウドウォッチ アラーム」を追加する Jira 課題のスクリーンショット

Gitlab に移動して、新しいプロジェクトを作成します。プロジェクト URL をアップデートして、Jira にリンクされているグループを使用します。[プロジェクトを作成] をクリックします。

Gitlab でプロジェクトの「cloudwatchalarms」を作成するスクリーンショット

ターミナルで CloudWatchAlarms リポジトリに移動して、次のコマンドを実行して AWS CloudFormation template.yml ファイルを Gitlab にプッシュします。

1 2 3 4 5 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

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 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 にちなんだ名前のブランチを作成します。

1 git checkout -b IM-6

次の yaml で .gitlab-ci.yml ファイルを作成します。これによって、テスト、ステージング、本番環境のデプロイ ワークフローが定義されます。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 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 統合で追跡できるようにします。

1 2 3 git add --all git commit -m "IM-6 .gitlab-ci.yml to CloudWatchAlarms repo" git push -u origin IM-6

[CI/CD]、[Pipelines] の順にクリックして、パイプラインの実行を確認します。

マージ リクエストを作成する

Gitlab がテスト環境にデプロイした後、本番環境にデプロイするためのマージ リクエストを作成します。

Gitlab のマージ リクエストのスクリーンショット

マージ リクエスト パイプラインの完了後、変更をメインラインにマージします。[CI/CD]、[Pipelines] の順にクリックして、実行中の本番パイプラインを確認します。

Gitlab で本番パイプラインを実行するスクリーンショット

アラームのテスト

先ほど設定した AWS CloudWatch アラームをトリガーするか、[アラートを作成] をクリックしてアラートを生成します。

ospgenie でアラートを作成するスクリーンショット

Slack をチェックして、通知が表示されたことを確認します。

Slack 通知のスクリーンショット

おめでとうございます、これで完了です。ImageLabeller が稼動しています。

 

最終更新日 2021年09月24日)
次でキャッシュ 1:36 AM on Oct 19, 2021 |

その他のヘルプ