Starten Sie Lambda, ausgelöst durch CloudWatch-Ereignisse, und senden Sie eine Nachricht an Slack.
↑ Es wird automatisch regelmäßig so ausgeführt.
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)
periodic-slack-bot-on-aws-lambda
Erstellen Sie ein Programm zum Senden von Nachrichten an Slack.
$ mkdir periodic-slack-bot-on-aws-lambda
$ cd periodic-slack-bot-on-aws-lambda
$ git init
$ touch .gitignore
:./.gitignore
.bundle
/vendor/bundle
Beschreiben Sie, was Sie mit Git nicht verwalten möchten.
$ rbenv local 2.5.1
# 2.5er Serie empfohlen
$ 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
$ 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
Bereiten Sie nach dem Erstellen des Programms die Bereitstellung für Lambda vor.
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
Erstellen Sie einen IAM-Benutzer für die Bereitstellung. Gehen Sie zunächst zu "IAM" -> "Richtlinie" -> "Richtlinie erstellen" und fügen Sie die folgende Anweisung auf der Registerkarte "JSON" ein.
{
"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/)
Geben Sie den Namen und die Beschreibung der Richtlinie ein und klicken Sie auf "Richtlinie erstellen".
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.
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.
(Tags sind optional) Am Ende wird ein Bestätigungsbildschirm angezeigt. Wenn also keine Probleme auftreten, klicken Sie auf "Benutzer erstellen".
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 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.
Ö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)
Aus "Umgebungsvariablen bearbeiten"
Legen Sie jeweils Umgebungsvariablen fest.
Der Handlername wurde von "Grundeinstellungen bearbeiten" in "app.post_to_slack (Dateiname.methodenname)" geändert.
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"
}
Erstellen Sie einen geeigneten Test unter "Testereigniseinstellungen". (Hash kann leer gelassen werden)
Klicken Sie auf "Test" und wenn die Nachricht an den angegebenen Slack-Kanal gesendet wird, ist sie erfolgreich.
Klicken Sie auf "Trigger hinzufügen".
--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
Warten Sie, bis die Zeit abgelaufen ist. Wenn es regelmäßig ausgeführt wird, ist es erfolgreich.
Wenn dies nicht funktioniert, sollte das Protokoll in der CloudWatch-Protokollgruppe ausgegeben werden. Debuggen Sie es daher entsprechend.
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