[DOCKER] Découvrez AWS gratuitement avec LocalStack

introduction

Cet article fait partie d'une série d'articles dans Feuille de route pour les anciens employés de la mairie pour changer d'emploi en programmeurs WEB.

Cet article est écrit dans le but de fournir une base pour démarrer avec ** AWS **, qui est un représentant des services de cloud computing.

À l'étranger, il y a une histoire selon laquelle, bien qu'il soit devenu basé sur le cloud, le «démonuage» progresse, revenant sur site en disant: «Après tout, le sur site est plus sûr». Cependant, je pense que les services de cloud computing, qui permettent de se procurer facilement des ressources informatiques et d'utiliser des services prêts à l'emploi, sont des technologies attrayantes pour les ingénieurs d'infrastructure de serveurs.

Par conséquent, on s'attend à ce que la vague de cloudisation se poursuive pendant un certain temps et il sera utile d'apprendre la technologie AWS.

AWS

LocalStack

AWS propose une version d'essai gratuite, mais lorsque vous entrez en contact avec AWS pour la première fois, il existe de nombreuses fonctionnalités que vous ne comprenez pas et vous ne savez peut-être pas lesquelles sont disponibles gratuitement.

À cet égard, si vous créez un pseudo environnement AWS localement avec LocalStack et que vous l'utilisez, vous ne serez pas facturé quoi que vous fassiez, et si vous faites une erreur et détruisez tout l'environnement virtuel, rien ne se passera depuis le début. Vous pouvez recommencer.

Au lieu de cela, vous ne pouvez pas utiliser l'interface utilisateur WEB (console AWS), mais si vous souhaitez automatiser la construction du serveur, etc., des opérations de ligne de commande sont nécessaires de toute façon, donc dans ce sens, familiarisez-vous avec les opérations de ligne de commande AWS avec LocalStack. Je ne pense pas que ce soit mal de partir. (La sensation de fonctionnement de la console AWS peut changer un peu ...)

Environment

Setup

# -- Python3.Créer un environnement avec X--

#Mettez à jour pip vers la dernière version
$ pip3 install --upgrade pip setuptools

#Installation de l'AWS CLI
$ pip3 install --upgrade aws

#Configurer un profil pour localstack dans l'AWS CLI
## AccessKeyID,SecretAccessKey peut être n'importe quelle chaîne
$ 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 de la pile locale
$ pip3 install --upgrade localstack

#Confirmation de version
$ localstack -v
0.12.1

Execution Démarrez l'environnement de simulation LocalStack.

#Dockerfile par vous-même, docker-compose.Ecrire yml et localstack/Vous pouvez lancer l'image localstack en tant que conteneur,
#Vous pouvez facilement démarrer l'environnement fictif à l'aide de la commande de démarrage localstack
## START_Variables d'environnement WEB:Utiliser ou non l'interface utilisateur Web (par défaut): 1)
##L'interface utilisateur Web est obsolète et ne doit pas être utilisée
## EDGE_Variable d'environnement PORT:Spécifiez le port de point de terminaison d'API pour chaque service AWS (par défaut): 4566)
## DEFAULT_Variable d'environnement REGION:Spécifier la région par défaut pour les services AWS (par défaut): us-east-1)
## ...Pour les autres variables d'environnement, https://github.com/localstack/Voir localstack
$ START_WEB=0 EDGE_PORT=5066 DEFAULT_REGION=ap-northeast-1 localstack start

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

# =>Ctrl pour quitter+Touche C

Contrôle de fonctionnement

Cette fois, je vais créer le système WEB suivant.

--Fonctions sur le cloud: test-function --Lorsqu'il est exécuté, un fichier appelé {date et heure d'exécution} .txt est généré. --Le contenu du fichier est Ce fichier généré à {date et heure d'exécution} . --Enregistrer le fichier ci-dessus dans le stockage sur le cloud (test-bucket)

test.drawio.png

Aliase la commande AWS CLI pour LocalStack

Lors de l'utilisation de l'AWS CLI pour LocalStack ʻaws --endpoint-url = http: // localhost: <port spécifié par EDGE_PORT> --profile = <profil défini pour LocaStack> ʻest utilisé en commun. Ce sera.

En raison de sa longue longueur, il est utile d'enregistrer cette commande avec un alias.

#Commande AWS CLI pour LocalStack`laws`Inscrivez-vous avec l'alias
$ alias laws='aws --endpoint-url=http://localhost:5066 --profile=localstack'

Créer un compartiment S3

--AWS S3 est un service de stockage dans le cloud qui peut stocker des données de fichiers sur le cloud.

#Test sur AWS S3 dans un environnement localstack à l'aide de l'AWS CLI-bucket Créer un bucket
# $ aws s3 mb s3://<Nom du godet> 
$ laws s3 mb s3://test-bucket
make_bucket: test-bucket

#Confirmation
$ laws s3 ls
2020-11-03 18:08:26 test-bucket

Créer une fonction Lambda

--AWS Lambda est un service qui enregistre les programmes (fonctions) sans serveur sur le cloud.

Création de lambda.py

Cette fois, implémentons la fonction Lambda en utilisant Python3.

lambda.py


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

#Créer une session pour accéder aux services AWS
##AccessKeyID pour l'environnement fictif de la pile locale,SecretAccessKey peut être factice
session = Session(
    aws_access_key_id='dummy',
    aws_secret_access_key='dummy',
    region_name='ap-northeast-1'
)

#Connectez-vous à AWS S3
s3 = session.resource(
    service_name='s3',
    '''
    endpoint_url:
Ce script s'exécute à l'intérieur du conteneur Docker, donc
Hôte local de la machine hôte d'exécution Docker:${EDGE_PORT}Besoin de chercher
    LOCALSTACK_Variable d'environnement HOSTNAME:
Contient localhost IPv4 de la machine hôte exécutant le conteneur Docker LocalStack
    => http://${LOCALSTACK_HOSTNAME}:${EDGE_PORT}En spécifiant
        LocalStack(Docker)La communication entre les services dans l'environnement est possible
    '''
    endpoint_url = 'http://' + os.environ['LOCALSTACK_HOSTNAME'] + ':' + os.environ['EDGE_PORT']
)

#Fonction d'entrée
##Dans les cas suivants, lambda est utilisé comme gestionnaire lors de l'enregistrement avec Lambda._Spécifiez un gestionnaire
def lambda_handler(event, context):
    now = datetime.now().strftime('%Y-%m-%d-%H-%M-%S') #Date et heure actuelles
    filename = now + '.txt' #nom de fichier: {Date et heure actuelles}.txt
    contents = f'This file generated at {now}.' #Contenu du fichier
    bucket = 'test-bucket' #Enregistrer le nom du compartiment S3 de destination

    # s3://test-bucket/{Date et heure actuelles}.Enregistrer le fichier au format txt
    s3.Bucket(bucket).put_object(Key=filename, Body=contents)
    
    #Valeur renvoyée après l'exécution de la fonction Lambda
    return f'Saved: s3://{bucket}/{filename}'

Enregistré en tant que fonction Lambda

#Compressez le programme créé en zip
$ zip lambda.zip lambda.py

#Test sur AWS Lambda à l'aide de l'AWS CLI-function.zip de test-fonction Enregistrée en tant que fonction
# $ aws lambda create-function
##    --function-name=<Nom de la fonction>
##    --runtime=<Langue du programme à utiliser>
##    --role=<Rôle IAM pouvant exécuter des fonctions>* Dans le cas de LocalStack, vous pouvez définir un rôle IAM approprié.
##    --handler=<Nom du module>.<Fonction d'entrée>
##    --zip-file=fileb://<Fichier programme compressé Zip>
$ 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",
}

#Si vous souhaitez supprimer la fonction Lambda enregistrée
# $ aws lambda create-function --function-name=<Nom de la fonction>

Exécution de la fonction Lambda

Essayez d'appuyer sur la fonction test-function enregistrée sur le cloud (dans ce cas, enregistrée dans l'environnement virtuel LocalStack) par la procédure ci-dessus.

#Exécuter des fonctions Lambda à l'aide de l'AWS CLI
# $ aws lambda invoke --function-name=<Nom de la fonction> <Nom du fichier journal>
$ laws lambda invoke --function-name='test-function' result.log
{
    "StatusCode": 200,
    "LogResult": "",
    "ExecutedVersion": "$LATEST"
}

#S'il n'y a pas d'erreur, le fichier journal doit contenir la valeur de retour de la fonction d'entrée Lambda.
$ cat result.log
"Saved: s3://test-bucket/2020-11-03-12-40-58.txt"

# S3 (test-bucket)Vérifiez si le fichier est enregistré dans
$ laws s3 ls s3://test-bucket/
2020-11-03 21:40:58         43 2020-11-03-12-40-58.txt

#Vérifiez le contenu du fichier ci-dessus
$ laws s3 cp s3://test-bucket/2020-11-03-12-40-58.txt -
This file generated at 2020-11-03-12-40-58.

Ce qui précède explique comment créer un environnement simulé AWS à l'aide de LocalStack et comment créer un système WEB simple.

C'est tout pour cet article.

Recommended Posts

Découvrez AWS gratuitement avec LocalStack
Apprenez de «Et alors», les bases de Java [pour les débutants]
Obtenir la taille de l'objet S3 avec AWS SDK pour Ruby
Notifier quotidiennement Slack des factures AWS avec Lambda pour Ruby
Préparation au développement avec Rails
Créez AWS Lambda avec Quarkus