AWS Service Configuration

In diesem Beispiel wird aufgezeigt, wie aus der SPS mithilfe einer GET-Anfrage auf Services des Cloud-Anbieters Amazon Web Services (AWS) zugegriffen werden kann (Erforderliche TwinCAT-Version: 3.1.4024.12). Die REST API liefert alle Funktionen, die ein Benutzer auch in der Management-Konsole von AWS hat. Es können beispielsweise über den AWS EC2-Service virtuelle Maschinen instanziiert oder auch konfiguriert werden.

Das Kapitel AWS Signature Version 4 reißt kurz den Hintergrund der AWS-eigenen Signierungsfunktion an. Alles andere entnehmen Sie bitte der AWS-Dokumentation.

Wie bereits im Kapitel URL-Redirects beschrieben, wertet der IoT-Treiber keine URL-Um- und Weiterleitungen aus. Deshalb muss beim Zugriff auf den lokalen Endpoint eines AWS-Rechenzentrums immer die exakte Adresse angegeben werden. Wieder auf das Beispiel der EC2-Services bezogen bedeutet dies, dass sich ein Benutzer aus TwinCAT nicht mit ec2.amazonaws.com verbinden kann, sondern direkt die Region im Link mitgeben muss: ec2.eu-central-1.amazonaws.com.

Ein mögliches Vorgehen hier wäre: Alle verfügbaren Regionen über eine ortsunabhängige AWS-REST API-Funktion abholen und daraus den Region Endpoint für die gewünschte Region extrahieren. Dies hätte gegen eine statische Programmierung des Endpoints den Vorteil, dass Änderungen in der Endpoint-URL einer Region keine Änderungen im Programmcode nach sich ziehen würden.

PROGRAM MAIN
VAR
    // trigger command execution for AWS Sig V4 samples
    bGetAWSSigV4                    : BOOL;

    fbHttpClientAWSSigV4            : FB_IotHttpClient :=(sHostName:='ec2.us-east-1.amazonaws.com',
                                    bKeepAlive:=FALSE, tConnectionTimeout:=T#10S);

    fbHttpGetAWSSigV4               : FB_TestHTTP_Get_AwsSigV4;
END_VAR
//init client parameters at startup
IF NOT fbHttpClientAWSSigV4.bConfigured THEN
    fbHttpClientAWSSigV4.nHostPort:=443;
    fbHttpClientAWSSigV4.stTLS.bNoServerCertCheck:=TRUE;
END_IF

IF fbHttpClientAWSSigV4.bConfigured THEN
    fbHttpGetAWSSigV4(bSend:= bGetAWSSigV4, fbClient:= fbHttpClientAWSSigV4);
END_IF

fbHttpClientAWSSigV4.Execute();