Erstellen Sie Einstellungen in Terraform, um Nachrichten von AWS Lambda Python3.8 an Slack zu senden

[Persönliches Memorandum] Einfache Einstellung zum Senden einer Nachricht von Lambda an Slack

Überblick

Terraform-Einstellungen

├── .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 = "Slack-Benachrichtigungstest"
      SLACK_USER_NAME = "Anonym"
      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": "was für ein Tag··"
            }
        ]
    }
    data = json.dumps(message).encode('utf-8')
    request = Request(slackWebhookURL, data)
    urlopen(request).read()

terraform plan

** Wenn beim ersten Ausführen des Terraform-Plans die folgende Fehlermeldung angezeigt wird, **

$ 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

** Führen Sie terraform init aus **

$ 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 wurde in das Plugins-Verzeichnis heruntergeladen **

├── .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 wird nach der Ausführung im Verzeichnis source_code erstellt **

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

Checken Sie in der AWS Management Console ein

** Lambda-Funktion "Post-Slack" -Einstellungen **

image.png

** Testlauf **

Recommended Posts

Erstellen Sie Einstellungen in Terraform, um Nachrichten von AWS Lambda Python3.8 an Slack zu senden
Senden Sie eine Nachricht von Slack an einen Python-Server
Senden Sie eine Nachricht von IBM Cloud Functions an Slack in Python
Ich möchte eine Nachricht von Python an LINE Bot senden
Senden Sie eine Anfrage von AWS Lambda an Amazon Elasticsearch Service
So erhalten Sie den Wert aus dem Parameterspeicher in Lambda (mit Python)
Bearbeiten Sie Excel in Python, um eine Pivot-Tabelle zu erstellen
Senden Sie eine Nachricht mit Python an LINE (LINE Notify)
Beispiel für eine Slack-Benachrichtigung mit Python Lambda
[Python] Wirf eine Nachricht an den Slack-Kanal
Terraform konfiguriert, um AWS Lambda von Amazon SQS aus zu starten
Erstellen Sie ein Plug-In, das Python Doctest auf Vim ausführt (2)
Erstellen Sie ein Plug-In, um Python Doctest mit Vim (1) auszuführen.
Erstellen Sie in Docker eine Ebene für AWS Lambda Python
Python-Skript, das eine JSON-Datei aus einer CSV-Datei erstellt
Post von Python nach Slack
Erstellen Sie eine Funktion in Python
Erstellen Sie ein Wörterbuch in Python
[Python] Scraping in AWS Lambda
Post an Slack in Python
So installieren Sie NPI + Senden Sie eine Nachricht an Python
Ich habe versucht, API list.csv mit Python aus swagger.yaml zu erstellen
So schneiden Sie ein Block-Multiple-Array aus einem Multiple-Array in Python
So starten Sie AWS Batch über die Python-Client-App
AWS Lambda Layers Eine kurze Erklärung von der Erstellung bis zur Verknüpfung
So erstellen Sie eine Instanz einer bestimmten Klasse aus dict mit __new__ () in Python
Ich habe ein Skript geschrieben, um mit AWS Lambda + Python 2.7 schnell eine Entwicklungsumgebung für Twitter Bot zu erstellen
Verwenden Sie AWS Lambda, um einen Mechanismus zu erstellen, der Slack benachrichtigt, wenn der von CloudWatch überwachte Wert in Python überschritten wird
Erstellen Sie einen DI-Container mit Python
[Lambda] [Python] Von Lambda auf Twitter posten!
Schreiben Sie die AWS Lambda-Funktion in Python
Erstellen Sie eine Binärdatei in Python
5 Möglichkeiten zum Erstellen eines Python-Chatbots
Erstellen Sie eine zufällige Zeichenfolge in Python
[Python] API zum Senden von Google Mail erstellen
Eine Geschichte, die ich süchtig danach war, Lambda von AWS Lambda anzurufen.
Erstellen Sie eine Instanz einer vordefinierten Klasse aus einer Zeichenfolge in Python
So erhalten Sie eine Zeichenfolge aus einem Befehlszeilenargument in Python
[Python / AWS Lambda-Ebenen] Ich möchte nur Module in AWS Lambda-Ebenen wiederverwenden
Von der Installation von Ansible bis zum Erstellen einer Python-Umgebung in der virtuellen Umgebung von Vagrant
Verschiedene Möglichkeiten, um in Python ein Array von Zahlen von 1 bis 10 zu erstellen.
[Für Python] Erstellen Sie schnell eine Upload-Datei in AWS Lambda Layer
So erstellen Sie mit AWS Lambda eine serverlose API für maschinelles Lernen
So generieren Sie eine neue Protokollgruppe in CloudWatch mit Python in Lambda
So erstellen Sie einen Klon aus Github
Verwenden Sie print in Python2 lambda expression
[AWS] Erstellen Sie mit CodeStar eine Python Lambda-Umgebung und führen Sie Hello World aus
So senden Sie ein visualisiertes Bild der in Python erstellten Daten an Typetalk
Erstellen Sie eine einfache GUI-App in Python
Senden Sie mit Python (Python3) E-Mails an mehrere Empfänger.
Erstellen Sie mit Mecab aus Python3 ein Tool, das Furigana automatisch mit HTML schüttelt