[Note personnelle] Réglage simple pour envoyer un message de lambda à slack
Concernant l'envoi de messages à l'API Slack
N'utilisez pas la bibliothèque slackweb (c'est ennuyeux d'installer la bibliothèque dans votre environnement local).
Utilisez la bibliothèque standard Python urllib.
Définissez les informations transmises à l'API Slack dans la variable d'environnement Lambda.
Concernant la création Lambda avec Terraform
La version du fournisseur aws est 2.48.0
Le code de la fonction Lambda (code source python) est compressé à l'aide de la source de données ** archive_file ** du ** fournisseur d'archives terraform **, puis déployé.
Envoyer l'image
├── .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
** Paramètres de la fonction Lambda "post-slack" **
** Essai **
Créer un événement de test
Essai
groupe de journaux cloudwatch logs
notification de mou