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

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

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

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

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

GitHub リポジトリを追加する Jira 課題のスクリーンショット

GitHub に移動して [新規] をクリックします。[所有者] に適切な組織を選択します。[リポジトリを作成] をクリックして続行します。

GitHub でアラーム リポジトリを作成するスクリーンショット

[Settings]、[Secrets] の順にクリックします。AWS アクセス キー ID を AWS_ACCESS_KEY_ID として、AWS シークレット アクセス キーを AWS_SECRET_ACCESS_KEY として追加します。

GitHub で AWS アクセス キーを追加したスクリーンショット

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

1 2 3 4 5 git add --all git commit -m "IM-10 add CloudWatchAlarms to github" git remote add origin git@github.com:PmmQuickStartGuides01/CloudWatchAlarms.git git branch -m mainline git push -u origin mainline

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 にデプロイするための GitHub アクション

ターミナルの CloudWatchAlarms リポジトリに移動して、Jira 課題 ID にちなんだ名前のブランチ、.github/workflows ディレクトリの順に作成します。

1 2 git checkout -b IM-10 mkdir -p .github/workflows && cd .github/workflows

次の yaml で deploy-test-staging.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 name: deploy-cloudwatchalarms-test-staging on: push: branches: - '*' - '!mainline' jobs: deploy-us-west-1: runs-on: ubuntu-latest outputs: env-name: ${{ steps.env-name.outputs.environment }} steps: - name: Checkout code uses: actions/checkout@v2 - name: Configure AWS credentials id: creds uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: "us-west-1" - name: Deploy to AWS CloudFormation uses: aws-actions/aws-cloudformation-github-deploy@v1 with: name: OpenDevOpsAlarms template: template.yml no-fail-on-empty-changeset: "1" deploy-us-east-2: runs-on: ubuntu-latest needs: deploy-us-west-1 steps: - name: Checkout code uses: actions/checkout@v2 - name: Configure AWS credentials id: creds uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: "us-east-2" - name: Deploy to AWS CloudFormation uses: aws-actions/aws-cloudformation-github-deploy@v1 with: name: OpenDevOpsAlarms template: template.yml no-fail-on-empty-changeset: "1"

次に、次の yaml で deploy-prod.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 name: deploy-cloudwatchalarms-prod on: pull_request: branches: - mainline jobs: deploy-us-west-2: runs-on: ubuntu-latest outputs: env-name: ${{ steps.env-name.outputs.environment }} steps: - name: Checkout code uses: actions/checkout@v2 - name: Configure AWS credentials id: creds uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: "us-west-2" - name: Deploy to AWS CloudFormation uses: aws-actions/aws-cloudformation-github-deploy@v1 with: name: OpenDevOpsAlarms template: template.yml no-fail-on-empty-changeset: "1" deploy-ca-central-1: runs-on: ubuntu-latest needs: deploy-us-west-2 steps: - name: Checkout code uses: actions/checkout@v2 - name: Configure AWS credentials id: creds uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: "ca-central-1" - name: Deploy to AWS CloudFormation uses: aws-actions/aws-cloudformation-github-deploy@v1 with: name: OpenDevOpsAlarms template: template.yml no-fail-on-empty-changeset: "1" deploy-us-east-1: runs-on: ubuntu-latest needs: deploy-ca-central-1 steps: - name: Checkout code uses: actions/checkout@v2 - name: Configure AWS credentials id: creds uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: "us-east-1" - name: Deploy to AWS CloudFormation uses: aws-actions/aws-cloudformation-github-deploy@v1 with: name: OpenDevOpsAlarms template: template.yml no-fail-on-empty-changeset: "1"

フィーチャー ブランチにプッシュ

コマンド ラインから次のコマンドを実行して、コードを CloudWatchAlarms リポジトリの IM-10 ブランチにプッシュします。

1 2 3 git add --all git commit -m "IM-10 add github actions to CloudWatchAlarms" git push -u origin IM-10

[アクション] をクリックして、実行中のワークフローを表示します。

GitHub で実行中のワークフローのスクリーンショット

プル リクエストを作成する

[Create pull request] をクリックして、メインラインにマージします。

GitHub のプル リクエストを作成するスクリーンショット

[アクション] をクリックして、本番環境のデプロイを監視します。

GitHub の本番デプロイのスクリーンショット

アラームのテスト

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

Opsgenie でアラートを作成したスクリーンショット

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

Opsgenie における Slack 通知のスクリーンショット

 

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

 

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

その他のヘルプ