Créez des paramètres dans terraform pour envoyer des messages depuis AWS Lambda Python3.8 vers Slack

[Note personnelle] Réglage simple pour envoyer un message de lambda à slack

Aperçu

Paramètres Terraform

├── .terraform
│   ├── plugins
│   │   └── darwin_amd64
│   │       └── terraform-provider-aws_v2.48.0_x4
├── post-slack.tf
└── source_code
    └── post-slack
        └── main.py

post-slack.tf


data "archive_file" "post-slack" {
  type        = "zip"
  source_dir  = "./source_code/post-slack"
  output_path = "./source_code/post-slack.zip"
}
resource "aws_lambda_function" "post-slack" {
  filename         = "${data.archive_file.post-slack.output_path}"
  function_name    = "post-slack"
  role             = "arn:aws:iam::※※※※※※※※※※※※:role/service-role/lambda-basic-execution"
  handler          = "main.lambda_handler"
  source_code_hash = "${data.archive_file.post-slack.output_base64sha256}"
  runtime          = "python3.8"
  memory_size      = 128
  timeout          = 300
    environment {
    variables = {
      SLACK_CHANNEL = "#hogehoge"
      SLACK_TEXT = "Test de notification Slack"
      SLACK_USER_NAME = "Anonyme"
      SLACK_ICON_EMOJI = ":fearful:"
      SLACK_COLOR = "warning"
      SLACK_WEBHOOK_URL = "https://hooks.slack.com/services/※※※※※※※※※/※※※※※※※※※/※※※※※※※※※※※※※※※※※※※※※※※※"
    }
  }
}

lambda-basic-execution


data "aws_iam_policy_document" "lambda-assume-role-policy" {
  statement {
    actions = ["sts:AssumeRole"]
    principals {
      type        = "Service"
      identifiers = ["lambda.amazonaws.com"]
    }
  }
}
resource "aws_iam_role" "role_lambda-basic-execution" {
  name               = "lambda-basic-execution"
  assume_role_policy = data.aws_iam_policy_document.lambda-assume-role-policy.json
  path               = "/service-role/"
}
resource "aws_iam_role_policy_attachment" "AWSLambdaBasicExecutionRole" {
  role       = aws_iam_role.role_lambda-basic-execution.name
  policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
}

source_code/post-slack/main.py


import os
import json
from urllib.request import Request, urlopen

slackChannel = os.environ['SLACK_CHANNEL']
slackUserName = os.environ['SLACK_USER_NAME']
slackText = os.environ['SLACK_TEXT']
slackWebhookURL = os.environ['SLACK_WEBHOOK_URL']
slackIconEmoji = os.environ['SLACK_ICON_EMOJI']
slackColor = os.environ['SLACK_COLOR']

def lambda_handler(event, context):
    post_slack()

def post_slack():
    message = {
        'channel': slackChannel,
        'username': slackUserName,
        'text': slackText,
        'icon_emoji': slackIconEmoji,
        'attachments': [
            {
                "color": slackColor,
                "text": "quelle journée··"
            }
        ]
    }
    data = json.dumps(message).encode('utf-8')
    request = Request(slackWebhookURL, data)
    urlopen(request).read()

terraform plan

** Si vous obtenez l'erreur suivante lorsque vous exécutez le plan terraform pour la première fois, **

$ terraform plan

Error: Could not satisfy plugin requirements

Plugin reinitialization required. Please run "terraform init".

Plugins are external binaries that Terraform uses to access and manipulate resources. The configuration provided requires plugins which can't be located, don't satisfy the version constraints, or are otherwise incompatible.

Terraform automatically discovers provider requirements from your configuration, including providers used in child modules. To see the requirements and constraints from each module, run "terraform providers".

Error: provider.archive: no suitable version installed version requirements: "(any version)" versions installed: none

** Exécutez terraform init **

$ terraform init
Initializing the backend...

Initializing provider plugins...
- Checking for available provider plugins...
- Downloading plugin for provider "archive" (hashicorp/archive) 2.0.0...

The following providers do not have any version constraints in configuration,
so the latest version was installed.

To prevent automatic upgrades to new major versions that may contain breaking
changes, it is recommended to add version = "..." constraints to the
corresponding provider blocks in configuration, with the constraint strings
suggested below.

* provider.archive: version = "~> 2.0"

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.

** terraform-provider-aws_v2.48.0_x4 a été téléchargé dans le répertoire des plugins **

├── .terraform
│   ├── plugins
│   │   └── darwin_amd64
│   │       ├── terraform-provider-archive_v2.0.0_x5
│   │       └── terraform-provider-aws_v2.48.0_x4

terraform apply

$ terraform apply

** Post-slack.zip sera créé dans le répertoire source_code après exécution **

└── source_code
    ├── post-slack
    │   └── main.py
    └── post-slack.zip

Archiver dans AWS Management Console

** Paramètres de la fonction Lambda "post-slack" **

image.png

** Essai **

Recommended Posts

Créez des paramètres dans terraform pour envoyer des messages depuis AWS Lambda Python3.8 vers Slack
Envoyer un message de Slack à un serveur Python
Publier un message d'IBM Cloud Functions sur Slack en Python
Je souhaite envoyer un message de Python à LINE Bot
Envoyer une demande d'AWS Lambda à Amazon Elasticsearch Service
Comment obtenir la valeur du magasin de paramètres dans lambda (en utilisant python)
Modifier Excel à partir de Python pour créer un tableau croisé dynamique
Envoyer un message à LINE avec Python (LINE Notify)
Exemple de notification Slack avec python lambda
[Python] Lancer un message sur le canal Slack
Terraform configuré pour lancer AWS Lambda à partir d'Amazon SQS
Créer un plugin pour exécuter Python Doctest sur Vim (2)
Créez un plug-in pour exécuter Python Doctest avec Vim (1)
Créer une couche pour AWS Lambda Python dans Docker
Script Python qui crée un fichier JSON à partir d'un fichier CSV
Publier de Python vers Slack
Créer une fonction en Python
Créer un dictionnaire en Python
[Python] Scraping dans AWS Lambda
Publier sur Slack en Python
Comment installer NPI + envoyer un message à la ligne avec python
J'ai essayé de créer une API list.csv avec Python à partir de swagger.yaml
Comment découper un bloc de plusieurs tableaux à partir d'un multiple en Python
Comment lancer AWS Batch à partir de l'application cliente Python
Couches AWS Lambda Une explication rapide de la création à la liaison
Comment créer une instance d'une classe particulière à partir de dict en utilisant __new__ () en python
J'ai écrit un script pour créer rapidement un environnement de développement pour Twitter Bot avec AWS Lambda + Python 2.7
Utilisons AWS Lambda pour créer un mécanisme pour notifier Slack lorsque la valeur surveillée par CloudWatch est dépassée sur Python
Créer un conteneur DI avec Python
[Lambda] [Python] Publier sur Twitter depuis Lambda!
Ecrire une fonction AWS Lambda en Python
Créer un fichier binaire en Python
5 façons de créer un chatbot Python
Créer une chaîne aléatoire en Python
[Python] Créer une API pour envoyer Gmail
Une histoire à laquelle j'étais accro à appeler Lambda depuis AWS Lambda.
Créer une instance d'une classe prédéfinie à partir d'une chaîne en Python
Comment obtenir une chaîne à partir d'un argument de ligne de commande en python
[Couches Python / AWS Lambda] Je souhaite réutiliser uniquement le module dans AWS Lambda Layers
De l'installation d'Ansible à la création d'un environnement Python dans l'environnement virtuel de Vagrant
Différentes façons de créer un tableau de nombres de 1 à 10 en Python.
[Pour Python] Créez rapidement un fichier de téléchargement vers AWS Lambda Layer
Comment créer une API de machine learning sans serveur avec AWS Lambda
Comment générer un nouveau groupe de journaux dans CloudWatch à l'aide de python dans Lambda
Comment créer un clone depuis Github
Utiliser l'impression dans l'expression lambda Python2
[AWS] Créez un environnement Python Lambda avec CodeStar et faites Hello World
Comment envoyer une image visualisée des données créées en Python à Typetalk
Créer une application GUI simple en Python
Envoyer des e-mails à plusieurs destinataires avec Python (Python3)
Créez un outil qui secoue automatiquement furigana avec html en utilisant Mecab de Python3