Créer un programme périodique avec Ruby x AWS Lambda x CloudWatch Events

Configuration visée dans cet article

rubyLambdaClowdWach.png Lancez Lambda déclenché par CloudWatch Events et envoyez un message à Slack.

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

↑ Il sera automatiquement exécuté régulièrement comme ceci.

Public cible

--Les personnes qui souhaitent créer des programmes d'exécution réguliers dans Ruby --Les personnes qui veulent toucher Lambda

spécification

Langue: série Ruby 2.5 Infrastructure: Lambda, événements ClowdWatch

Référence: [Création d'un bot à utiliser dans l'espace de travail](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)

Formulaire rempli

periodic-slack-bot-on-aws-lambda

Créer un programme

Créez un programme pour envoyer des messages à Slack.

Créer un annuaire

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

Définir Git

$ git init
$ touch .gitignore

:./.gitignore


.bundle
/vendor/bundle

Décrivez ce que vous ne souhaitez pas gérer avec Git.

Spécifier la version de Ruby

$ rbenv local 2.5.1 
# 2.5 séries recommandées

Installer Gem

$ bundle init

Générez un Gemfile avec la commande ↑ et éditez-le comme suit.

./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'

Ensuite, installez le Gem requis.

$ bundle install --path vendor/bundle

Créer 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: 'Soumission de test depuis AWS Lambda', as_user: true)
end

Déployer sur Lambda

Après avoir créé le programme, préparez-vous à le déployer sur Lambda.

Installez l'AWS CLI

Cette fois, nous procéderons au déploiement à l'aide d'un outil appelé «AWS CLI», donc si vous ne l'avez pas encore installé, installez-le.

$ brew install awscli

Créer un utilisateur IAM

Créez un utilisateur IAM pour le déploiement. スクリーンショット 2020-09-21 22.11.08.png Tout d'abord, allez dans "IAM" -> "Stratégie" -> "Créer une stratégie" et collez l'instruction suivante à partir de l'onglet JSON. スクリーンショット 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": [
                "*"
            ]
        }
    ]
}

Voir aussi: Stratégie IAM de déploiement minimal (https://rubyonjets.com/docs/extras/minimal-deploy-iam/)

スクリーンショット 2020-09-21 22.15.47.png Entrez le nom et la description de la politique, le cas échéant, puis cliquez sur «Créer une politique».

スクリーンショット 2020-09-21 22.17.27.png Ensuite, allez dans "IAM" -> "Utilisateur" -> "Créer un utilisateur", donnez-lui un nom approprié, cochez "Accès par programme" et passez au suivant.

スクリーンショット 2020-09-21 22.17.47.png Sélectionnez «Déploiement minimal de la stratégie IAM» créée précédemment à partir de «Joindre directement la stratégie existante» et passez à la suivante.

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

(Les balises sont facultatives) Un écran de confirmation s'affichera à la fin, donc s'il n'y a pas de problème, cliquez sur "Créer un utilisateur".

スクリーンショット 2020-09-21 22.18.13_censored.jpg Ensuite, deux «ID de clé d'accès» et «clé d'accès secrète» seront émis, alors gardez-le en lieu sûr pendant que vous téléchargez le fichier csv ou que vous en prenez note.

Paramètres de l'AWS CLI

$ aws configure --profil lambda (tout nom de profil est OK)

AWS Access Key ID #ID de clé d'accès créé précédemment
AWS Secret Access Key #La clé d'accès secrète que vous avez créée précédemment
Default region name # ap-northeast-1 
Default output format # json 

Lorsque vous tapez "aws configure" dans le terminal, il vous sera demandé différentes choses de manière interactive, alors entrez les informations nécessaires pour chacune.

Créer une fonction

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

Ouvrez «AWS Lambda» depuis l'écran de la console AWS et cliquez sur «Créer une fonction».

--Nom de la fonction (nom arbitraire) --Durée (Ruby2.5)

Pour créer une fonction. (D'autres sont OK avec les valeurs par défaut ou les blancs)

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

Depuis "Modifier les variables d'environnement"

Définissez des variables d'environnement pour chacun.

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

Changement du nom du gestionnaire de "Modifier les paramètres de base" à "app.post_to_slack (nom de fichier.nom de méthode)".

Déployer

Empaquetez le programme créé sous forme de fichier zip.

$ zip -r function.zip app.rb vendor

Déployez en utilisant 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"
}

Essai

スクリーンショット 2020-10-10 18.34.15.png Créez un test approprié à partir de "Paramètres d'événement de test". (Le hachage peut être laissé vide)

スクリーンショット 2020-10-10 18.38.29.png Cliquez sur "Test" et si le message est envoyé au canal Slack spécifié, il réussit. スクリーンショット 2020-10-10 18.40.17.png

Gestion des horaires avec CloudWatch Events

Paramètres de déclenchement

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

Cliquez sur "Ajouter un déclencheur".

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

--Nom du déclencheur: CloudWatch Events --Rule: créer une nouvelle règle --Nom de la règle: test_30minutes (facultatif)

L'explication de la façon d'écrire une expression cron est omise cette fois. Voir: Touch the cron

スクリーンショット 2020-10-10 17.25.07.png Attendez le passage du temps, et s'il est exécuté régulièrement, il réussira.

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

Si cela ne fonctionne pas, le journal doit être sorti dans le groupe de journaux CloudWatch, donc déboguez-le de manière appropriée.

Épilogue

Je vous remercie pour votre travail acharné! Si vous procédez selon l'article et qu'il y a une partie qui ne fonctionne pas bien, j'apprécierais que vous puissiez la signaler dans le commentaire orchidée.

Recommended Posts

Créer un programme périodique avec Ruby x AWS Lambda x CloudWatch Events
Créer un SlackBot avec AWS lambda et API Gateway en Java
Essayez d'exécuter SlackBot réalisé avec Ruby x Sinatra sur AWS Lambda
Notifier quotidiennement Slack des factures AWS avec Lambda pour Ruby
Créez un terrain de jeu avec Xcode 12
Créer une loterie avec Ruby
Créez AWS Lambda avec Quarkus
Créez un environnement Vue3 avec Docker!
Créer un programme Servlet dans Eclipse
Créez des exceptions avec une interface fluide
Faites un jeu de frappe avec ruby
[Ruby on Rails] Créez un graphique circulaire des totaux par colonne avec Chartkick
Comment créer un environnement de développement Ruby on Rails avec Docker (Rails 6.x)
Créez une application de résumé de nouvelles techniques de style LINEnews avec Rails x LineBot! [Partie 1]
Premiers pas avec Micronaut 2.x ~ Construction native et déploiement sur AWS Lambda ~
Comment créer un environnement de développement Ruby on Rails avec Docker (Rails 5.x)