Erstellen Sie ein periodisches Programm mit Ruby x AWS Lambda x CloudWatch-Ereignissen

Konfiguration in diesem Artikel

rubyLambdaClowdWach.png Starten Sie Lambda, ausgelöst durch CloudWatch-Ereignisse, und senden Sie eine Nachricht an Slack.

スクリーンショット 2020-10-10 17.25.07.png

↑ Es wird automatisch regelmäßig so ausgeführt.

Zielgruppe

Spezifikation

Sprache: Ruby 2.5 Serie Infrastruktur: Lambda, ClowdWatch Events

Referenz: [Erstellen eines Bots zur Verwendung im Arbeitsbereich](https://slack.com/intl/ja-jp/help/articles/115005265703-%E3%83%AF%E3%83%BC%E3%82% AF% E3% 82% B9% E3% 83% 9A% E3% 83% BC% E3% 82% B9% E3% 81% A7% E5% 88% A9% E7% 94% A8% E3% 81% 99% E3% 82% 8B% E3% 83% 9C% E3% 83% 83% E3% 83% 88% E3% 81% AE% E4% BD% 9C% E6% 88% 90)

Vollständiges Formular

periodic-slack-bot-on-aws-lambda

Erstellen Sie ein Programm

Erstellen Sie ein Programm zum Senden von Nachrichten an Slack.

Erstellen Sie ein Verzeichnis

$ mkdir periodic-slack-bot-on-aws-lambda
$ cd periodic-slack-bot-on-aws-lambda

Setze Git

$ git init
$ touch .gitignore

:./.gitignore


.bundle
/vendor/bundle

Beschreiben Sie, was Sie mit Git nicht verwalten möchten.

Geben Sie die Ruby-Version an

$ rbenv local 2.5.1 
# 2.5er Serie empfohlen

Installieren Sie Gem

$ bundle init

Generieren Sie eine Gemfile mit dem Befehl ↑ und bearbeiten Sie sie wie folgt.

./Gemfile


# frozen_string_literal: true

source "https://rubygems.org"

git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }

ruby '2.5.1'

gem 'async-websocket'
gem 'slack-ruby-bot'

Installieren Sie dann den gewünschten Edelstein.

$ bundle install --path vendor/bundle

Erstellen Sie app.rb.

$ touch app.rb

ruby:./app.rb


require 'slack-ruby-client'

Slack.configure do |conf|
  conf.token = ENV['SLACK_BOT_TOKEN']
end

def post_to_slack(event:, context:)
  client = Slack::Web::Client.new
  client.chat_postMessage(channel: ENV['SLACK_CHANNEL_NAME'], text: 'Testeinreichung von AWS Lambda', as_user: true)
end

Bereitstellung bei Lambda

Bereiten Sie nach dem Erstellen des Programms die Bereitstellung für Lambda vor.

Installieren Sie AWS CLI

Dieses Mal werden wir mit einem Tool namens "AWS CLI" bereitstellen. Wenn Sie es also noch nicht installiert haben, installieren Sie es.

$ brew install awscli

IAM-Benutzer erstellen

Erstellen Sie einen IAM-Benutzer für die Bereitstellung. スクリーンショット 2020-09-21 22.11.08.png Gehen Sie zunächst zu "IAM" -> "Richtlinie" -> "Richtlinie erstellen" und fügen Sie die folgende Anweisung auf der Registerkarte "JSON" ein. スクリーンショット 2020-09-21 22.13.26.png

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "apigateway:*",
                "cloudformation:*",
                "dynamodb:*",
                "events:*",
                "iam:*",
                "lambda:*",
                "logs:*",
                "route53:*",
                "s3:*"
             ],
            "Resource": [
                "*"
            ]
        }
    ]
}

Siehe auch: Minimal Deploy IAM-Richtlinie (https://rubyonjets.com/docs/extras/minimal-deploy-iam/)

スクリーンショット 2020-09-21 22.15.47.png Geben Sie den Namen und die Beschreibung der Richtlinie ein und klicken Sie auf "Richtlinie erstellen".

スクリーンショット 2020-09-21 22.17.27.png Gehen Sie anschließend zu "IAM" -> "Benutzer" -> "Benutzer erstellen", geben Sie ihm einen geeigneten Namen, aktivieren Sie "Zugriff nach Programm" und fahren Sie mit dem nächsten fort.

スクリーンショット 2020-09-21 22.17.47.png Wählen Sie die zuvor erstellte "Minimal Deploy IAM-Richtlinie" unter "Vorhandene Richtlinie direkt anhängen" aus und fahren Sie mit der nächsten fort.

スクリーンショット 2020-09-21 22.17.59.png

(Tags sind optional) Am Ende wird ein Bestätigungsbildschirm angezeigt. Wenn also keine Probleme auftreten, klicken Sie auf "Benutzer erstellen".

スクリーンショット 2020-09-21 22.18.13_censored.jpg Anschließend werden zwei "Zugriffsschlüssel-ID" und "geheimer Zugriffsschlüssel" ausgegeben. Bewahren Sie sie daher an einem sicheren Ort auf, wenn Sie die CSV-Datei herunterladen oder notieren.

AWS CLI-Einstellungen

$ aws configure --Profil Lambda (jeder Profilname ist OK)

AWS Access Key ID #Zuvor erstellte Zugriffsschlüssel-ID
AWS Secret Access Key #Der geheime Zugriffsschlüssel, den Sie zuvor erstellt haben
Default region name # ap-northeast-1 
Default output format # json 

Wenn Sie im Terminal "aws configure" eingeben, werden Sie interaktiv nach verschiedenen Dingen gefragt. Geben Sie daher jeweils die erforderlichen Informationen ein.

Funktion erstellen

スクリーンショット 2020-10-10 18.12.38.png

Öffnen Sie "AWS Lambda" auf dem AWS-Konsolenbildschirm und klicken Sie auf "Funktion erstellen".

Eine Funktion erstellen. (Andere sind mit Standardwerten oder Leerzeichen in Ordnung)

スクリーンショット 2020-10-10 18.17.53.png

Aus "Umgebungsvariablen bearbeiten"

Legen Sie jeweils Umgebungsvariablen fest.

スクリーンショット 2020-10-10 18.23.04.png

Der Handlername wurde von "Grundeinstellungen bearbeiten" in "app.post_to_slack (Dateiname.methodenname)" geändert.

Bereitstellen

Packen Sie das erstellte Programm als Zip-Datei.

$ zip -r function.zip app.rb vendor

Bereitstellung mit aws cli.

$ aws lambda update-function-code --function-name PeriodicSlackBotOnAwsLambda --zip-file fileb://function.zip --profile lambda

{
    "FunctionName": "PeriodicSlackBotOnAwsLambda",
    "FunctionArn": "arn:aws:lambda:ap-northeast-1:**************:function:PeriodicSlackBotOnAwsLambda",
    "Runtime": "ruby2.5",
    "Role": "arn:aws:iam::**************:role/service-role/PeriodicSlackBotOnAwsLambda-role-**************",
    "Handler": "app.post_to_slack",
    "CodeSize": 12941753,
    "Description": "",
    "Timeout": 3,
    "MemorySize": 128,
    "LastModified": "2020-10-09T21:08:11.888+0000",
    "CodeSha256": "**************/**************=",
    "Version": "$LATEST",
    "Environment": {
        "Variables": {
            "SLACK_CHANNEL_NAME": "#**************",
            "SLACK_BOT_TOKEN": "xoxb-**************-**************-**************"
        }
    },
    "TracingConfig": {
        "Mode": "PassThrough"
    },
    "RevisionId": "********-****-****-****-********",
    "State": "Active",
    "LastUpdateStatus": "Successful"
}

Testlauf

スクリーンショット 2020-10-10 18.34.15.png Erstellen Sie einen geeigneten Test unter "Testereigniseinstellungen". (Hash kann leer gelassen werden)

スクリーンショット 2020-10-10 18.38.29.png Klicken Sie auf "Test" und wenn die Nachricht an den angegebenen Slack-Kanal gesendet wird, ist sie erfolgreich. スクリーンショット 2020-10-10 18.40.17.png

Planen Sie die Verwaltung mit CloudWatch-Ereignissen

Triggereinstellungen

スクリーンショット 2020-10-10 18.43.36.png

Klicken Sie auf "Trigger hinzufügen".

スクリーンショット 2020-10-10 18.47.40.png

--Triggername: CloudWatch-Ereignisse --Regel: Erstellen Sie eine neue Regel

Die Erklärung, wie ein Cron-Ausdruck geschrieben wird, entfällt diesmal. Siehe: Berühren Sie den Cron

スクリーンショット 2020-10-10 17.25.07.png Warten Sie, bis die Zeit abgelaufen ist. Wenn es regelmäßig ausgeführt wird, ist es erfolgreich.

スクリーンショット 2020-10-10 18.54.50.png

Wenn dies nicht funktioniert, sollte das Protokoll in der CloudWatch-Protokollgruppe ausgegeben werden. Debuggen Sie es daher entsprechend.

Nachwort

Danke für deine harte Arbeit! Wenn Sie gemäß dem Artikel fortfahren und es einen Teil gibt, der nicht gut funktioniert, würde ich es begrüßen, wenn Sie in der Kommentar-Orchidee darauf hinweisen könnten.

Recommended Posts

Erstellen Sie ein periodisches Programm mit Ruby x AWS Lambda x CloudWatch-Ereignissen
Erstellen Sie einen SlackBot mit AWS Lambda & API Gateway in Java
Versuchen Sie, SlackBot mit Ruby x Sinatra auf AWS Lambda auszuführen
Benachrichtigen Sie Slack of AWS-Rechnungen täglich mit Lambda für Ruby
Erstellen Sie einen Spielplatz mit Xcode 12
Erstellen Sie eine Lotterie mit Ruby
Erstellen Sie AWS Lambda mit Quarkus
Erstellen Sie mit Docker eine Vue3-Umgebung!
Erstellen Sie ein Servlet-Programm in Eclipse
Erstellen Sie Ausnahmen mit einer Fluid-Schnittstelle
Erstellen Sie ein Maven-Projekt mit Befehlen
Machen Sie ein Tippspiel mit Ruby
[Ruby on Rails] Erstellen Sie mit Chartick ein kreisförmiges Diagramm der Summen nach Spalten
So erstellen Sie eine Ruby on Rails-Entwicklungsumgebung mit Docker (Rails 6.x)
Erstellen Sie mit Rails x LineBot eine App für die Zusammenfassung von technischen Nachrichten im LINEnews-Stil! [Teil 1]
Erste Schritte mit Micronaut 2.x ~ Native Build und Bereitstellung für AWS Lambda ~
So erstellen Sie eine Ruby on Rails-Entwicklungsumgebung mit Docker (Rails 5.x)