Articoli
Tutorial
Guide interattive
Distribuzione degli allarmi AWS CloudWatch con GitHub
Warren Marusiak
Senior Technical Evangelist
Per fornire una dimostrazione di come sviluppare, distribuire e gestire applicazioni utilizzando Jira Software e vari strumenti connessi, il nostro team ha creato ImageLabeller, una semplice applicazione demo basata su AWS che utilizza l'apprendimento automatico per applicare etichette alle immagini.
In questa pagina viene spiegato come configurare un modello predefinito AWS SageMaker, un prerequisito per la corretta elaborazione delle immagini in ImageLabeller. Prima di iniziare, ti consigliamo di leggere le pagine sull'architettura di ImageLabeller e sulla distribuzione di ImageLabeller con GitHub per contestualizzare i contenuti.
Aggiunta di un repository di allarmi per l'integrazione di Opsgenie
Vai su Jira e crea un nuovo ticket Jira per aggiungere un repository di allarmi AWS CloudWatch a GitHub. In questo esempio, l'ID del ticket Jira è IM-10.
Vai su GitHub e clicca su New (Nuovo). In Owner (Responsabile) scegli l'organizzazione appropriata. Clicca su Create repository (Crea repository) per procedere.
Clicca su Settings (Impostazioni), quindi su Secrets (Segreti). Aggiungi l'ID della chiave di accesso AWS come AWS_ACCESS_KEY_ID e la chiave di accesso segreta AWS come AWS_SECRET_ACCESS_KEY.
Nel terminale utilizzato, vai al repository CloudWatchAlarms ed esegui lo script seguente per effettuare il push del codice AWS CloudFormation a GitHub.
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
template.yml per gli allarmi
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
Imposta l'endpoint di sottoscrizione dell'argomento SNS sull'URL dell'endpoint che hai copiato da Opsgenie. SubmitImageLambdaAlarm monitora una singola metrica emessa dall'AWS Lambda SubmitImage. Se sono presenti più di 10 chiamate al minuto, l'allarme si attiva.
Azioni GitHub per la distribuzione in AWS
Vai al repository CloudWatchAlarms nel terminale utilizzato, crea un branch che abbia lo stesso nome dell'ID del ticket Jira e crea una directory .github/workflows.
git checkout -b IM-10
mkdir -p .github/workflows && cd .github/workflows
Crea deploy-test-staging.yml con il seguente yaml. In questo modo si definisce un flusso di lavoro di distribuzione per gli ambienti di test e staging che viene eseguito durante i push verso branch diversi dalla mainline.
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"
Quindi, crea deploy-prod.yml con il seguente yaml. In questo modo si definisce un flusso di lavoro di distribuzione per i tuoi ambienti di produzione che viene eseguito quando una pull request effettua il merge delle modifiche nella mainline.
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"
Push di un branch di funzioni
Dalla riga di comando esegui lo script riportato di seguito per effettuare il push del codice al branch IM-10 del repository CloudWatchAlarms.
git add --all
git commit -m "IM-10 add github actions to CloudWatchAlarms"
git push -u origin IM-10
Clicca su Actions (Azioni) per vedere i flussi di lavoro in esecuzione.
Creare una pull request
Clicca su Create pull request (Crea pull request) per effettuare il merge nella mainline.
Clicca su Actions (Azioni) per monitorare la distribuzione della produzione.
Test dell'allarme
Genera un avviso attivando l'allarme AWS CloudWatch che hai appena configurato o cliccando su Create alert (Crea avviso).
Verifica che la notifica sia stata visualizzata in Slack.
Bene! Ce l'hai fatta: ImageLabeller è attivo e funzionante.
Condividi l'articolo
Argomento successivo
Letture consigliate
Aggiungi ai preferiti queste risorse per ricevere informazioni sui tipi di team DevOps e aggiornamenti continui su DevOps in Atlassian.