[PYTHON] Probieren Sie AWS Lambda Destinations aus

AWS hat einige erstaunliche Funktionen angekündigt.

Introducing AWS Lambda Destinations https://aws.amazon.com/jp/blogs/compute/introducing-aws-lambda-destinations/

スクリーンショット 2019-11-27 6.51.44.png

Die nächste Aktion (AWS-Service) kann gemäß dem Ausführungsergebnis von Lambda angegeben werden. Wenn Sie den Fluss basierend auf Erfolgs- / Fehlerbedingungen steuern möchten, können Sie ihn jetzt mit nur Lambda abschließen, ohne Schrittfunktionen verwenden zu müssen.

Versuchen Sie es sofort.

Definieren Sie das aufrufende Lambda entsprechend

Schreiben Sie Python so. (Verwenden von Python 3.7)

import json
import logging

logger = logging.getLogger()
logger.setLevel(logging.INFO)


def destination_sample_handler(event, context):
    logger.info("destination sample lambda started.")
    if event['Success'] == True:
        return {
            'statusCode': 200,
            'body': event
        }
    else:
        raise Exception('Success is False', event)
    

Beim Aufruf wird die Erfolgsvariable im Ereignis definiert und die Beurteilung wird abhängig davon geändert, ob der Inhalt wahr oder falsch ist.

Festgelegtes Ziel

Im AWS-Blog ändere ich das Anrufziel für Erfolg / Misserfolg zwischen SNS und Lambda, aber ich schneide ab und mache beide Lambda.

Wenn Sie auf die Lambda-Funktion zugreifen, sollten Sie im Tag "Cofiguration" des "Designer" -Teils ein Element mit dem Namen "Ziel hinzufügen" finden.

スクリーンショット 2019-11-29 7.10.51.png

Dies ist ein Erfolgsmuster スクリーンショット 2019-11-27 7.16.10.png

Der Inhalt des Erfolgsmusters ist wie folgt. Es wird nur in Log ausgegeben.

import json
import logging

logger = logging.getLogger()
logger.setLevel(logging.INFO)

def lambda_handler(event, context):
    logger.info("Success dest lambda started.")
    logger.info(event)
    return {
        'statusCode': 200,
        'message': 'Success in dest lambda',
        'body': event
    }

Dies ist die Zieleinstellung für einen Fehler スクリーンショット 2019-11-27 7.18.20.png

Der Inhalt entspricht dem Erfolgsmuster


import json
import logging

logger = logging.getLogger()
logger.setLevel(logging.INFO)

def lambda_handler(event, context):
    logger.info("Failure dest lambda started.")
    logger.info(event)
    return {
        'statusCode': 200,
        'message': "Failure in dest lambda",
        'body': event
    }

Versuche zu rennen

Die Ausführung erfolgt über die CLI.

$ aws lambda invoke --function-name destination-sample --invocation-type Event --payload '{ "Success": false }' response.json
{
    "StatusCode": 202
}

Es scheint, dass 202 als Statuscode zurückgegeben wird, wenn die Ausführung erfolgreich ist.

Erfolg

Als ich es erfolgreich gemacht habe, gab es eine solche Ausgabe in CloudWatch Logs auf der erfolgreichen Seite. CloudWatch Logs

[INFO]	2019-11-26T22:26:49.792Z	xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx	{'version': '1.0', 'timestamp': '2019-11-26T22:26:49.425Z', 'requestContext': {'requestId': '26fab6f9-a2b7-45f2-bce2-47c612cdb8b7', 'functionArn': 'arn:aws:lambda:us-east-1:000000000000:function:destination-sample:$LATEST', 'condition': 'Success', 'approximateInvokeCount': 1}, 'requestPayload': {'Success': True}, 'responseContext': {'statusCode': 200, 'executedVersion': '$LATEST'}, 'responsePayload': {'statusCode': 200, 'body': {'Success': True}}}

Ich habe den Inhalt des aufgerufenen Ereignisses abgemeldet, aber es sieht wie folgt aus.

Als ich den Code ein wenig bearbeitet und das Message-Element in event gesetzt habe, wurde der Inhalt von responsePayload hinzugefügt.

    if event['Success'] == True:
        event['Message'] = "Successful finished."
        return {
            'statusCode': 200,
            'body': event
        }
[INFO]	2019-11-26T23:41:21.229Z	xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx	{'version': '1.0', 'timestamp': '2019-11-26T23:41:20.730Z', 'requestContext': {'requestId': 'ba73f7a2-77f4-4166-a95d-d43020e5cc32', 'functionArn': 'arn:aws:lambda:us-east-1:000000000000:function:destination-sample:$LATEST', 'condition': 'Success', 'approximateInvokeCount': 1}, 'requestPayload': {'Success': True}, 'responseContext': {'statusCode': 200, 'executedVersion': '$LATEST'}, 'responsePayload': {'statusCode': 200, 'body': {'Success': True, 'Message': 'Successful finished.'}}}

Übrigens, als ich das Ziel zum Zeitpunkt des Erfolgs um eins erhöhte, wurde die Einstellung auf der Seite "Erfolg" überschrieben. Es scheint einen Dienst zu geben, der für eine Bedingung aufgerufen werden kann.

スクリーンショット 2019-11-27 8.55.42.png

Selbst wenn Ziel hinzufügen hinzugefügt wird, wird das Anrufziel von Erfolgreich nur überschrieben.

スクリーンショット 2019-11-27 8.40.59_deco.png

Fehler

Ein ähnliches Protokoll wurde in CloudWatch-Protokollen auf der ausgefallenen Seite angezeigt.

[INFO]	2019-11-26T22:30:46.594Z	xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx	{'version': '1.0', 'timestamp': '2019-11-26T22:30:46.203Z', 'requestContext': {'requestId': '6fc2d258-fafb-40a2-8d18-886df8510fa1', 'functionArn': 'arn:aws:lambda:us-east-1:000000000000:function:destination-sample:$LATEST', 'condition': 'RetriesExhausted', 'approximateInvokeCount': 3}, 'requestPayload': {'Success': False}, 'responseContext': {'statusCode': 200, 'executedVersion': '$LATEST', 'functionError': 'Unhandled'}, 'responsePayload': {'errorMessage': "('Success is False', {'Success': False})", 'errorType': 'Exception', 'stackTrace': ['  File "/var/task/lambda_function.py", line 17, in destination_sample_handler\n    raise Exception(\'Success is False\', event)\n']}}

Der Inhalt der Ausnahme wird ebenfalls ordnungsgemäß weitergegeben.

Was ist übrigens die Anzeige auf Röntgen?

In X-Ray verzweigte sich der Prozess ordnungsgemäß von Lambda. Wie Sie sich vorstellen können, ist das erstaunlich. Sie können damit fast verfolgen.

スクリーンショット 2019-11-27 8.51.34.png

Zusammenfassung

Ich könnte den Prozess je nach Erfolg / Misserfolg leicht verzweigen. Dies reicht für eine kleine Skriptsteuerung.

Recommended Posts

Probieren Sie AWS Lambda Destinations aus
Versuchen Sie, AWS Lambda-Umgebungsvariablen anzugeben?
[AWS] Versuchen Sie, API Gateway + Lambda mit X-Ray zu verfolgen
Tweet von AWS Lambda
[Python] Scraping in AWS Lambda
Die einfachste AWS Lambda-Implementierung
Versuchen Sie es mit AWS SageMaker Studio
PyTorch mit AWS Lambda [Lambda-Import]
Web Scraping mit AWS Lambda
Lambda
Zusammenfassung bei Verwendung von AWS Lambda (Python)
Berühren Sie Unterstützung für AWS Lambda-Umgebungsvariablen
[AWS] API mit API Gateway + Lambda erstellen
Schreiben Sie die AWS Lambda-Funktion in Python
Führen Sie Python planmäßig auf AWS Lambda aus
Tweet WakaTime Zusammenfassung mit AWS Lambda
Benachrichtigen Sie HipChat mit AWS Lambda (Python)
AWS Lambda-Entwicklung Meine Best Practices
[AWS] Verwenden von INI-Dateien mit Lambda [Python]
Umgebung, in der native Bibliotheken in AWS Lambda enthalten sind
Poste regelmäßig mit AWS Lambda auf Twitter!
[AWS] Verknüpfen Sie Lambda und S3 mit boto3
[Python] Führen Sie Headless Chrome unter AWS Lambda aus
Stellen Sie mit AWS Lambda Python eine Verbindung zu s3 her
[AWS] Machen Sie SSI-ähnliche Dinge mit S3 / Lambda
Zusammenfassung des Schreibens von AWS Lambda
Versuchen Sie, Python: Lambda zuzuweisen oder zu wechseln
Ich habe gerade FizzBuzz mit AWS Lambda gemacht
Versuchen Sie, einen Cisco Spark Bot mit AWS Lambda + Amazon API Gateway (Python) zu implementieren.