Werfen wir einen zeilenweisen Blick auf Python (um Token mit Python zu erhalten, Parameterspeicher zu registrieren / zu aktualisieren, Testfehler nach erfolgreichem Einsatz)

Hallo. Wie geht es dir?

Wenn alte Videos im Internet verbreitet werden, Sie werden es mit Nostalgie sehen. Nostalgie ist nur Unterhaltung.

Zuvor über Serverless Framework, Python usw. Beim Lernen durch Sehen und Hören von Experten Ich erinnerte mich, als ich verschiedene neue Dinge erlebte Diese Erkenntnisse? Impressionen? Ich würde es gerne hier lassen.

Schauen wir uns zunächst Zeile für Zeile handler.py an.

Es gab eine solche Beschreibung, was für ein Inhalt ist das? Wenn Sie Python hören, erinnert es Sie an einen muskulösen Black Boxer. Diese Person heißt in der Übersee-Version Barlog, nicht wahr?

handler.py


from util import logging_decorator, build_response_decorator, get_logger

import app

logger = get_logger('INFO')

@logging_decorator
def xxxx_handler(event, context):
    return app._token(event)

from util import logging_decorator, build_response_decorator, get_logger

import app

logger = get_logger('INFO')

@logging_decorator --@ist einDekorateur (die Person, die für die Dekoration der Verkaufsfläche, des Vitrinen und des Schaufensters verantwortlich ist)und [eine Funktion zum Hinzufügen oder Ändern der Verarbeitung zu einer vorhandenen Funktion]( https://www.sejuku.net/blog/25130#:~:text=%E3%83%87%E3%82%B3%E3%83%AC%E3%83%BC%E3%82%BF% E3% 81% A8% E3% 81% AF% E3% 80% 81% E3% 81% 99% E3% 81% A7% E3% 81% AB% E3% 81% 82% E3% 82% 8B,% E5 % 87% BA% E6% 9D% A5% E3% 82% 8B% E3% 82% 88% E3% 81% 86% E3% 81% AB% E3% 81% AA% E3% 82% 8A% E3% 81 % BE% E3% 81% 99% E3% 80% 82)

def xxxx_handler(event, context): --def ist eine Abkürzung für define in English. Das ist richtig (es wurde mit Default verwechselt). --xxxx_handler und die Argumente event und context werden in der definierten Funktion aufgerufen

return app._token(event)


Schauen wir uns als nächstes Zeile für Zeile app.py an.

Es gab eine solche Beschreibung. Python für Serverless Framework. Ich habe es auch ziemlich versteckt gemacht (xxx), also tut es mir leid, wenn der Variablenfluss falsch ist. Verwenden Sie für den Verarbeitungsinhalt die angegebene ID und das angegebene Kennwort, rufen Sie die Token-Informationen (JSON-Format) vom angegebenen Speicherort ab und Es extrahiert nur die Token-Informationen und registriert sie im Parameterspeicher.

app.py


import json
import boto3
import requests
import os

def _token(event):
    
    try:
        # ===================================================================
        #Token-Erfassungsprozess
        # ===================================================================
        
        #Verwenden Sie boto3 und verwenden Sie den Parameterspeicher
        client = boto3.client('ssm')

        #Holen Sie sich einen geheimen Schlüssel
        # get_Holen Sie sich den Wert des Parameters mit Parameter
        response_get = client.get_parameter(
            Name = '/xxx/xxxx/xxxx',
            WithDecryption = True
        )
        client_secret_get = response_get['Parameter']['Value']

        #Liste der Schlüssel, die erforderlich sind, um Token zu erhalten
        CLIENT_SECRET = xxxxx_xxxx_get
        CLIENT_ID = os.environ['XXXX']
        XXXX_URL = "https://xxxxx/xxxx"

        #In diesem Sommer haben wir den Schlüssel bekommen
        xxxx_xxxx_key = {
            'xxxx_secret': XXXX_SECRET,
            'xxxx_id': XXXX_ID,
        }

        #Greifen Sie auf Token-Informationen zu und geben Sie die erforderlichen Informationen ein
        response_xxxx = requests.post(XXXX_URL, data=xxxx_xxxx_key)

        #Token-Informationen ausgeben
        #Das Ergebnis ist im JSON-Format, dekodieren Sie es also
        xxxx_data = json.loads(response_xxxx.text)

        #Extrahieren Sie nur den Wert des Zugriffstokens aus den Tokeninformationen
        xxxx_xxxx_data = xxxx_data.get('access_token')

        # ===================================================================
        #Die oben erhaltenen Token-Informationen- AWS Systems Manager -An Parameterspeicher senden
        # ===================================================================

        # put_Aktualisieren Sie den Parameterwert mit dem Parameter
        response_put = client.put_parameter(
            Name = '/xxxx/xxxx',
            Value = xxxx_xxxx_xxxx,
            Type = 'SecureString',
            Overwrite = True
        )

import json

import boto3

import requests --Requests ist Pythons HTTP-Kommunikationsbibliothek, mit der Informationen auf Websites leicht abgerufen und Bilder gesammelt werden können Richtig. --Auch Python hat standardmäßig eine Bibliothek namens urllib, aber Requests ist einfacher als das, und Sie können Programme auf eine Weise schreiben, die für die Leute leicht zu sehen und zu verstehen ist / 19195) Das stimmt. Hmm! Es ist eine gute Sache

import os

def _token(event): ――Ich erinnere mich an def früher

#Fehlerbehandlung
    except Exception as error:
        data = {'request': event}
        logger.exception(error, extra=dict(data))

        return_params = {
            'message': 'Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut.{}'.format(str(error))
        }
        return {
            'statusCode': 500,
            'body': return_params
        }

――Zunächst ging ich im Voraus zum Parameter-Speicherbildschirm und registrierte den Schlüssel, den ich im Voraus erhalten hatte.

image.png

――Wir erstellen es auf einem solchen Bildschirm (der Name ist leicht zu verstehen, die Erklärung ist leicht zu verstehen und der Schlüssel wird mit einer standardmäßigen und sicheren Zeichenfolge in das Wertefeld geschrieben).

image.png

-Warum die Liste mit ['Parameter'] ['Wert'] teilen? ――Es gibt nicht viele Informationen (welche Art von Wort suchen Sie?), Aber [['Spam', 'Schinken'] + ['Ei'] # Liste kombinieren](https://pycamp.pycon.jp/textbook / 4_collections.html # use-list)

-}: Wave Bracket (Namikakko), [Derzeit ist "Wave Bracket" dem Namen "Middle Bracket" vorzuziehen](https://business-textbooks.com/type-of -Parenthesis / # toc-7)

     response_xxxx = requests.post(XXXX_URL, data=xxxx_xxxx_key)

――Sie können das Token hier tatsächlich erhalten, aber es war im sogenannten JSON-Format.

――Die diesmal den Inhalt, den Sie oben erhalten haben, einfügen (einfügen, einfügen). ――Der Mechanismus ist der gleiche wie get_parameter.

         Name = '/xxxx/xxxx',

image.png

         Overwrite = True

――Warum ist das nicht eine Wellenklammer?


Am Ende `Diesmal war es auch lang! ``

Ich zitierte und verwies auf den Link auf dieser Seite, Wir möchten uns bei den Autoren der offiziellen Dokumente und Artikel bedanken. Vielen Dank.

Nun, zu diesem Zeitpunkt passierte so etwas als nächstes. Nach der Bereitstellung, egal wie oft ich es versucht habe, ist der Test auf dem Lambda-Bildschirm fehlgeschlagen!

Warum ist der Test auf dem Lambda-Bildschirm fehlgeschlagen?

Die Python-Version, die ich in Lambda (dh serverless.yml) festgelegt hatte, war 3.8, Als ich lokal bearbeitete, war die Python-Umgebung 3.7. Ich dachte, es würde auf den neuesten Stand wechseln, wenn es bereitgestellt wird (außerhalb des lokalen Bereichs), aber das war nicht der Fall. Ich habe die Python-Version der lokalen Umgebung, an der ich arbeite, auf 3.8 festgelegt und bereitgestellt, und es hat einwandfrei funktioniert. Bitte seien Sie auch vorsichtig.

Recommended Posts

Werfen wir einen zeilenweisen Blick auf Python (um Token mit Python zu erhalten, Parameterspeicher zu registrieren / zu aktualisieren, Testfehler nach erfolgreichem Einsatz)
Senden Sie eine Nachricht mit Python an LINE (LINE Notify)
Lesen Sie mit Python Zeile für Zeile aus der Datei