Artykuły
Samouczki
Interaktywne przewodniki
Wdrażanie alarmów AWS CloudWatch za pomocą GitHub
Warren Marusiak
Starszy propagator techniczny
Aby zademonstrować sposób opracowywania i wdrażania aplikacji oraz zarządzania nimi przy użyciu Jira Software oraz różnych połączonych narzędzi, nasz zespół utworzył ImageLabeller, prostą aplikację demonstracyjną opartą na usłudze AWS, która wykorzystuje uczenie maszynowe do oznaczania etykietami obrazów.
Na tej stronie opisano, jak skonfigurować wstępnie zdefiniowany model AWS SageMaker wymagany, aby aplikacja ImageLabeller mogła skutecznie przetwarzać obrazy. Przed rozpoczęciem najlepiej zapoznać się ze stronami na temat architektury aplikacji ImageLabeller oraz wdrażania aplikacji ImageLabeller za pomocą GitHub, aby uzyskać kontekst.
Dodawanie repozytorium alarmów na potrzeby integracji z Opsgenie
Przejdź do systemu Jira i utwórz nowe zgłoszenie Jira dotyczące dodania repozytorium alarmów AWS CloudWatch do GitHub. W tym przykładzie identyfikator zgłoszenia Jira to IM-10.
Przejdź do GitHub i kliknij opcję New (Nowy). Wybierz odpowiednią organizację w pozycji Owner (Właściciel). Kliknij przycisk Create repository (Utwórz repozytorium), aby kontynuować.
Kliknij kolejno opcje Settings (Ustawienia) i Secrets (Klucze tajne). Dodaj swój identyfikator klucza dostępu AWS jako AWS_ACCESS_KEY_ID oraz swój tajny klucz dostępu AWS jako AWS_SECRET_ACCESS_KEY.
W terminalu przejdź do repozytorium CloudWatchAlarms i uruchom poniższe polecenie, aby wypchnąć kod AWS CloudFormation do 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
Plik template.yml alarmów
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
Ustaw punkt końcowy subskrypcji tematu SNS na adres URL punktu końcowego skopiowany z Opsgenie. SubmitImageLambdaAlarm monitoruje jeden wskaźnik emitowany przez funkcję AWS Lambda submitImage. Jeśli liczba wywołań w ciągu minuty przekroczy 10, zostanie wygenerowany alarm.
Czynności GitHub wdrażania w AWS
Przejdź do repozytorium CloudWatchAlarms w terminalu, utwórz gałąź o nazwie odpowiadającej identyfikatorowi zgłoszenia Jira i utwórz katalog .github/workflows.
git checkout -b IM-10
mkdir -p .github/workflows && cd .github/workflows
Utwórz plik deploy-test-staging.yml zawierający poniższy kod yaml. Spowoduje to zdefiniowanie wdrożeniowego przepływu pracy dla środowisk testowych i przejściowych, który będzie uruchamiany podczas wypychania kodu do gałęzi innych niż 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"
Następnie utwórz plik deploy-prod.yml zawierający poniższy kod yaml. Spowoduje to zdefiniowanie wdrożeniowego przepływu pracy dla środowisk produkcyjnych, który będzie uruchamiany podczas scalania zmian z pull requestu z gałęzią 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"
Wypychanie do gałęzi funkcji
Z poziomu wiersza polecenia uruchom poniższe polecenie, aby wypchnąć kod do gałęzi IM-10 repozytorium CloudWatchAlarms.
git add --all
git commit -m "IM-10 add github actions to CloudWatchAlarms"
git push -u origin IM-10
Kliknij Actions (Czynności), aby zobaczyć uruchomione przepływy pracy.
Tworzenie pull requestu
Kliknij przycisk Create pull request (Utwórz pull request), aby scalić z gałęzią mainline.
Kliknij Actions (Czynności), aby monitorować wdrożenie produkcyjne.
Testowanie alarmu
Wygeneruj alert, wyzwalając skonfigurowany przed chwilą alarm AWS CloudWatch lub klikając przycisk Create alert (Utwórz alert).
Sprawdź, czy powiadomienie pojawiło się w aplikacji Slack.
Brawo! Udało się. Aplikacja ImageLabeller już działa.
Udostępnij ten artykuł
Następny temat
Zalecane lektury
Dodaj te zasoby do zakładek, aby dowiedzieć się więcej na temat rodzajów zespołów DevOps lub otrzymywać aktualności na temat metodyki DevOps w Atlassian.