AWS hat einige erstaunliche Funktionen angekündigt.
Introducing AWS Lambda Destinations https://aws.amazon.com/jp/blogs/compute/introducing-aws-lambda-destinations/
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.
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.
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.
Dies ist ein Erfolgsmuster
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
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
}
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.
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.
Selbst wenn Ziel hinzufügen hinzugefügt wird, wird das Anrufziel von Erfolgreich nur überschrieben.
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.
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.
Ich könnte den Prozess je nach Erfolg / Misserfolg leicht verzweigen. Dies reicht für eine kleine Skriptsteuerung.
Recommended Posts