[DOCKER] Lernen Sie AWS kostenlos mit LocalStack

Einführung

Dieser Artikel ist Teil einer Reihe von Artikeln in Roadmap für ehemalige Mitarbeiter des Rathauses zum Wechsel von Jobs zu WEB-Programmierern.

Dieser Artikel wurde mit dem Ziel verfasst, einen Einstieg in ** AWS ** zu ermöglichen, das für Cloud-Computing-Dienste repräsentativ ist.

In Übersee gibt es die Geschichte, dass, obwohl es Cloud-basiert geworden ist, "De-Clouding" voranschreitet und zu den lokalen Standorten zurückkehrt, indem gesagt wird: "Schließlich sind lokale Standorte sicherer." Ich denke jedoch, dass Cloud-Computing-Dienste, die problemlos Computerressourcen beschaffen und vorgefertigte Dienste verwenden können, attraktive Technologien für Serverinfrastrukturingenieure sind.

Daher wird erwartet, dass die Welle der Cloudisierung noch eine Weile andauert und es nützlich sein wird, die AWS-Technologie zu erlernen.

AWS

LocalStack

AWS bietet eine kostenlose Testversion an. Wenn Sie jedoch zum ersten Mal mit AWS in Kontakt treten, gibt es viele Funktionen, die Sie nicht verstehen, und Sie sind sich möglicherweise nicht sicher, welche kostenlos verfügbar sind.

Wenn Sie eine lokale Pseudo-AWS-Umgebung mit LocalStack erstellen und verwenden, werden Ihnen in dieser Hinsicht keine Gebühren berechnet, unabhängig davon, was Sie tun. Wenn Sie einen Fehler machen und die gesamte virtuelle Umgebung zerstören, geschieht von Anfang an nichts. Sie können von vorne beginnen.

Stattdessen können Sie die WEB-Benutzeroberfläche (AWS-Konsole) nicht verwenden. Wenn Sie jedoch die Serverkonstruktion usw. automatisieren möchten, sind ohnehin Befehlszeilenoperationen erforderlich. In diesem Sinne sollten Sie sich in diesem Sinne an AWS-Befehlszeilenoperationen mit LocalStack gewöhnen. Ich denke nicht, dass es schlecht ist zu gehen. (Das Bedienungsgefühl der AWS-Konsole kann sich geringfügig ändern ...)

Environment

Setup

# -- Python3.Erstellen einer Umgebung mit X.--

#Aktualisieren Sie pip auf die neueste Version
$ pip3 install --upgrade pip setuptools

#AWS CLI-Installation
$ pip3 install --upgrade aws

#Richten Sie ein Profil für localstack in der AWS CLI ein
## AccessKeyID,SecretAccessKey kann eine beliebige Zeichenfolge sein
$ aws configure --profile=localstack
AWS Access Key ID [None]: dummy
AWS Secret Access Key [None]: dummy
Default region name [None]: ap-northeast-1
Default output format [None]: json

#Installation von localstack
$ pip3 install --upgrade localstack

#Versionsbestätigung
$ localstack -v
0.12.1

Execution Starten Sie die LocalStack-Mock-Umgebung.

#Dockerfile selbst, docker-compose.Schreibe yml und localstack/Sie können das localstack-Image als Container starten.
#Sie können die Scheinumgebung einfach mit dem Befehl localstack start starten
## START_WEB-Umgebungsvariablen:Gibt an, ob die Webbenutzeroberfläche verwendet werden soll (Standard).: 1)
##Die Webbenutzeroberfläche ist veraltet und sollte nicht verwendet werden
## EDGE_PORT-Umgebungsvariable:Geben Sie den API-Endpunktport für jeden AWS-Service an (Standard).: 4566)
## DEFAULT_Umgebungsvariable REGION:Geben Sie die Standardregion für AWS-Services an (Standard).: us-east-1)
## ...Für andere Umgebungsvariablen https://github.com/localstack/Siehe localstack
$ START_WEB=0 EDGE_PORT=5066 DEFAULT_REGION=ap-northeast-1 localstack start

# => API: tcp://localhost:5066
# => Region: ap-northeast-1

# =>Strg zum Beenden+C-Taste

Funktionsprüfung

Dieses Mal werde ich das folgende WEB-System erstellen.

test.drawio.png

Verwenden Sie den AWS CLI-Befehl für LocalStack

Bei Verwendung der AWS-CLI für LocalStack wird häufig der Befehl "aws --endpoint-url = http: // localhost: --profile = <für LocaStack festgelegter Profil>" verwendet. Es wird sein.

Aufgrund seiner langen Länge ist es nützlich, diesen Befehl mit einem Alias zu registrieren.

#AWS CLI-Befehl für LocalStack`laws`Registrieren Sie sich mit dem Alias
$ alias laws='aws --endpoint-url=http://localhost:5066 --profile=localstack'

Erstellen eines S3-Buckets

--AWS S3 ist ein Cloud-Speicherdienst, der Dateidaten in der Cloud speichern kann.

#Testen Sie AWS S3 in einer Localstack-Umgebung mithilfe der AWS-CLI-Eimer Erstellen Sie einen Eimer
# $ aws s3 mb s3://<Eimername> 
$ laws s3 mb s3://test-bucket
make_bucket: test-bucket

#Bestätigung
$ laws s3 ls
2020-11-03 18:08:26 test-bucket

Erstellen einer Lambda-Funktion

--AWS Lambda ist ein Dienst, der serverlose Programme (Funktionen) in der Cloud registriert.

Lambda.py erstellen

Dieses Mal implementieren wir die Lambda-Funktion mit Python3.

lambda.py


# boto3: AWS SDK for Python
import boto3
from boto3.session import Session
from datetime import datetime
import os

#Erstellen Sie eine Sitzung für den Zugriff auf AWS-Services
##AccessKeyID für Localstack-Mock-Umgebung,SecretAccessKey kann Dummy sein
session = Session(
    aws_access_key_id='dummy',
    aws_secret_access_key='dummy',
    region_name='ap-northeast-1'
)

#Stellen Sie eine Verbindung zu AWS S3 her
s3 = session.resource(
    service_name='s3',
    '''
    endpoint_url:
Dieses Skript wird also im Docker-Container ausgeführt
Localhost des Docker-Ausführungshostcomputers:${EDGE_PORT}Ich muss nachschlagen
    LOCALSTACK_Umgebungsvariable HOSTNAME:
Enthält localhost IPv4 des Hostcomputers, auf dem der LocalStack Docker-Container ausgeführt wird
    => http://${LOCALSTACK_HOSTNAME}:${EDGE_PORT}Durch Angabe
        LocalStack(Docker)Die Kommunikation zwischen Diensten in der Umgebung ist möglich
    '''
    endpoint_url = 'http://' + os.environ['LOCALSTACK_HOSTNAME'] + ':' + os.environ['EDGE_PORT']
)

#Eingabefunktion
##In den folgenden Fällen wird Lambda als Handler bei der Registrierung bei Lambda verwendet._Geben Sie einen Handler an
def lambda_handler(event, context):
    now = datetime.now().strftime('%Y-%m-%d-%H-%M-%S') #Aktuelles Datum und Uhrzeit
    filename = now + '.txt' #Dateiname: {Aktuelles Datum und Uhrzeit}.txt
    contents = f'This file generated at {now}.' #Dateiinhalt
    bucket = 'test-bucket' #Speichern Sie den Namen des Ziel-S3-Buckets

    # s3://test-bucket/{Aktuelles Datum und Uhrzeit}.Datei in txt speichern
    s3.Bucket(bucket).put_object(Key=filename, Body=contents)
    
    #Rückgabewert nach Ausführung der Lambda-Funktion
    return f'Saved: s3://{bucket}/{filename}'

Als Lambda-Funktion registriert

#Komprimieren Sie das erstellte Programm zum Zip
$ zip lambda.zip lambda.py

#Testen Sie AWS Lambda mit AWS CLI-function.Test Reißverschluss-Funktion Als Funktion registriert
# $ aws lambda create-function
##    --function-name=<Funktionsname>
##    --runtime=<Programmiersprache zu verwenden>
##    --role=<IAM-Rolle, die Funktionen ausführen kann>* Bei LocalStack können Sie eine geeignete IAM-Rolle festlegen.
##    --handler=<Modulname>.<Eingabefunktion>
##    --zip-file=fileb://<Komprimierte Programmdatei komprimieren>
$ laws lambda create-function \
    --function-name='test-function' \
    --runtime='python3.7' \
    --role='arn:aws:iam::123456789012:role/service-role/test-exec-role' \
    --handler='lambda.lambda_handler' \
    --zip-file='fileb://./lambda.zip'

{
    "FunctionName": "test-function",
    "FunctionArn": "arn:aws:lambda:ap-northeast-1:000000000000:function:test-function",
    "Runtime": "python3.7",
    "Role": "arn:aws:iam::123456789012:role/service-role/test-exec-role",
    "Handler": "lambda.lambda_handler",
    "CodeSize": 934,
    "Description": "",
    "Timeout": 3,
    "LastModified": "2020-11-03T11:26:52.329+0000",
    "CodeSha256": "MIcbKaalHpg1Ln2pWtxnooV+8uJif7yZNaZI1dM7lw0=",
    "Version": "$LATEST",
    "VpcConfig": {},
    "TracingConfig": {
        "Mode": "PassThrough"
    },
    "RevisionId": "bad5c0cd-da0d-47f5-8b55-9e7b4b38a112",
    "State": "Active",
}

#Wenn Sie die registrierte Lambda-Funktion löschen möchten
# $ aws lambda create-function --function-name=<Funktionsname>

Ausführung der Lambda-Funktion

Versuchen Sie, die in der Cloud registrierte Testfunktion (in diesem Fall in der virtuellen LocalStack-Umgebung registriert) wie oben beschrieben zu aktivieren.

#Führen Sie Lambda-Funktionen mit AWS CLI aus
# $ aws lambda invoke --function-name=<Funktionsname> <Name der Protokolldatei>
$ laws lambda invoke --function-name='test-function' result.log
{
    "StatusCode": 200,
    "LogResult": "",
    "ExecutedVersion": "$LATEST"
}

#Wenn keine Fehler vorliegen, sollte die Protokolldatei den Rückgabewert der Lambda-Eingabefunktion enthalten.
$ cat result.log
"Saved: s3://test-bucket/2020-11-03-12-40-58.txt"

# S3 (test-bucket)Überprüfen Sie, ob die Datei in gespeichert ist
$ laws s3 ls s3://test-bucket/
2020-11-03 21:40:58         43 2020-11-03-12-40-58.txt

#Überprüfen Sie den Inhalt der obigen Datei
$ laws s3 cp s3://test-bucket/2020-11-03-12-40-58.txt -
This file generated at 2020-11-03-12-40-58.

Im Folgenden wird beschrieben, wie Sie mit LocalStack eine AWS-Mock-Umgebung erstellen und ein einfaches WEB-System erstellen.

Das ist alles für diesen Artikel.

Recommended Posts

Lernen Sie AWS kostenlos mit LocalStack
Lernen Sie aus "Na und", den Grundlagen von Java [für Anfänger]
Holen Sie sich die S3-Objektgröße mit AWS SDK for Ruby
Benachrichtigen Sie Slack of AWS-Rechnungen täglich mit Lambda für Ruby
Vorbereitung für die Entwicklung mit Rails
Erstellen Sie AWS Lambda mit Quarkus