[PYTHON] À propos de «Lamvery», un outil de déploiement et de gestion pour AWS Lambda

C'est je le ferai aussi cette année! AWS Lambda Tied Advent Calendar 2015 est un article sur le 16, mais il est mis à jour de temps à autre (dernière mise à jour: 15/07/2016)

introduction

Toutes les informations fournies sont à jour au 2015-07-15. Le développement est en cours et est sujet à changement.

Qu'est-ce que Lamvery?

Parce que c'est une bonne source

Ce sera ici https://github.com/marcy-terui/lamvery

Aperçu

C'est un outil qui prend en charge le déploiement de la fonction Lambda et le réglage et la gestion des fonctions périphériques, y compris la fonction elle-même. Il est fait de Python et je l'utilise principalement en Python, mais Node.js est également pris en charge pour le moment, et j'ai confirmé l'opération minimale.

Sur la base du concept d '«outil de déploiement et de gestion convivial pour la fonction AWS Lambda», nous développons en mettant l'accent sur la façon de gérer une fonction facilement et commodément et la probabilité d'un flux de déploiement pratique. Il se positionne comme un outil.

De plus, je pense qu'il est utile d'ajouter des fonctions supplémentaires qui ne peuvent pas être réalisées sans se connecter au déploiement de Function, et c'est une fonctionnalité que de tels outils sont activement ajoutés.

Comment lire

L'auteur lit "Ranberi".

Origine

À l'origine [Comment déployer du code Python écrit dans la documentation AWS](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-python-how-to-create-deployment-package .html) est trop gênant et je pensais pouvoir faire quelque chose à ce sujet, alors j'ai créé "** Lam ** bda + ** v ** irtual ** e ** nv + p ** y ** thon" J'ai l'impression que je l'ai pris et connecté à [^ 1], mais maintenant je ne peux pas m'empêcher de penser que le nom court et cool était bon.

Pourquoi comparer avec d'autres outils similaires

lambda-uploader, Kappa, etc.

Apex Veuillez vérifier ici. En particulier, vous devez faire attention aux spécifications de restauration, car vous pouvez voir d'un coup d'œil que "Oh, c'est un méchant". http://qiita.com/marcy-terui/items/db8dae512af3c553fe72

Pourquoi avez-vous créé Lamvery sans utiliser ce qui précède?

Je voulais un outil qui tienne dans ma main et puisse être utilisé pratiquement, et comme je l'ai utilisé, je semblais vouloir diverses choses, alors j'ai pensé que je devais le fabriquer moi-même.

Liste approximative des fonctionnalités et des choses que vous pouvez faire

Comment utiliser

Installation

virtualenv -p <path-to-python2.7> .venv
. .venv/bin/activate
pip install lamvery
echo "deb https://dl.bintray.com/willyworks/deb trusty main" | sudo tee -a /etc/apt/sources.list
sudo apt-get update
sudo apt-get install lamvery
export PATH=/opt/lamvery/bin:$PATH
echo "
[bintraybintray-willyworks-rpm]
name=bintray-willyworks-rpm
baseurl=https://dl.bintray.com/willyworks/rpm/centos/\$releaserver/\$basearch/
gpgcheck=0
enabled=1
" | sudo tee -a /etc/yum.repos.d/bintray-willyworks-rpm.repo
sudo yum install lamvery
export PATH=/opt/lamvery/bin:$PATH

Méthode de réglage

Commencez par créer un modèle du fichier de paramètres avec la commande suivante.

lamvery init

Maintenant que vous disposez d'un modèle pour certains fichiers de configuration, modifiez-le. Comme mentionné ci-dessus, jinja2 est interprété comme un modèle, donc si vous le placez dans {{}}, il développera la variable, et si vous le placez dans {%%}, il se développera. Vous pouvez intégrer du code. De plus, j'ai mis les variables d'environnement qui, je pense, sont souvent utilisées dans une variable appelée ʻenv` afin que je puisse les écrire brièvement.

Voici un exemple de réglage.

configuration de base

yaml:.lamvery.yml


profile: private
region: us-east-1
versioning: true
default_alias: test
clean_build: false
configuration:
  name: lamvery-test
  runtime: python2.7
  role: {{ env['AWS_LAMBDA_ROLE'] }}
  handler: lambda_function.lambda_handler
  description: This is sample lambda function.
  timeout: 10
  memory_size: 128
  vpc_config:
    subnets:
    - subnet-cadf2993
    security_groups:
    - sg-4d095028

Paramètres des événements (Cloud Watch Events)

yaml:.lamvery.event.yml


rules:
- name: foo
  description: bar
  schedule: 'rate(5 minutes)'
  targets:
  - id: test-target-id
    input:
      this:
      - is: a
      - sample: input

Paramètres des informations confidentielles (KMS)

yaml:.lamvery.secret.yml


key_id: xxxx-yyyy-zzzz
cipher_texts: {}
secret_files: {}

Liste d'exclusion

yaml:.lamvery.exclude.yml


- ^\.lamvery\.yml$
- ^\.lamvery\.event\.yml$
- ^\.lamvery\.secret\.yml$
- ^\.lamvery\.exclude\.yml$

Crochet d'action

yaml:.lamvery.hook.yml


build:
  pre:
  - pip install -r requirements.txt -t ./
  post: []

API Gateway

yaml:.lamvery.api.yml


api_id: myipugal74
stage: dev
cors:
  origin: '*'
  methods:
  - GET
  - OPTION
  headers:
  - Content-Type
  - X-Amz-Date
  - Authorization
  - X-Api-Key
configuration:
  swagger: '2.0'
  info:
    title: Sample API
  schemes:
  - https
  paths:
    /:
      get:
        produces:
        - application/json
        parameters:
        - name: sample
          in: query
          required: false
          type: string
        responses:
          '200':
            description: 200 response
            schema:
              $ref: '#/definitions/Sample'
  definitions:
    Sample:
      type: object

Éléments de réglage

configuration de base

Paramètres des événements (Cloud Watch Events)

Paramètres liés aux informations confidentielles

Liste d'exclusion

Énumérez simplement les chemins des fichiers que vous souhaitez exclure avec des expressions régulières

Crochet d'action

Actuellement, seul build est pris en charge. build est le processus de création d'un package de déploiement. Listez les commandes que vous souhaitez exécuter avant «pre» et après «post».

API Gateway

commander

En ce qui concerne les arguments de ligne de commande, seuls les arguments fréquemment utilisés sont répertoriés. Si vous voulez tout savoir, veuillez consulter README.

init

$ lamvery init -h
usage: lamvery init [-h] [-c CONF_FILE]

optional arguments:
  -h, --help            show this help message and exit
  -c CONF_FILE, --conf-file CONF_FILE
                        Configuration YAML file (default: .lamvery.yml)

Créer des modèles pour divers fichiers de paramètres Il s'agit de la première commande à être exécutée après l'installation.

generate

$ lamvery generate -h
usage: lamvery generate [-h] [-c CONF_FILE] -k KIND

optional arguments:
  -h, --help            show this help message and exit
  -c CONF_FILE, --conf-file CONF_FILE
                        Configuration YAML file (default: .lamvery.yml)
  -k KIND, --kind KIND  The kind of the file # accepts "function"

Il s'agit d'une commande permettant de générer des modèles pour divers programmes. Le type de fichier à générer est spécifié par -k, mais pour le moment, seul le modèle Function peut être généré par function.

build

$ lamvery build -h
usage: lamvery build [-h] [-c CONF_FILE] [-s] [-l] [-e ENV]

optional arguments:
  -h, --help            show this help message and exit
  -c CONF_FILE, --conf-file CONF_FILE
                        Configuration YAML file (default: .lamvery.yml)
  -s, --single-file     Only use the main lambda function file
  -l, --no-libs         Archiving without all libraries
  -e ENV, --env ENV     Environment variables that pass to the function

Créez un fichier d'archive (ZIP) du code source et de la bibliothèque. Pour confirmation ou lors de la création d'un écoulement irrégulier. Le nom du fichier sera «Nom de la fonction.zip». S'il n'y a pas de fichier de paramétrage, c'est ʻexecution directory name.zip`.

deploy

$ lamvery deploy -h
usage: lamvery deploy [-h] [-a ALIAS] [-c CONF_FILE] [-d] [-s] [-l] [-p]
                      [-e ENV]

optional arguments:
  -h, --help            show this help message and exit
  -a ALIAS, --alias ALIAS
                        Alias for a version of the function
  -c CONF_FILE, --conf-file CONF_FILE
                        Configuration YAML file (default: .lamvery.yml)
  -d, --dry-run         Dry run
  -s, --single-file     Only use the main lambda function file
  -l, --no-libs         Archiving without all libraries
  -p, --publish         Publish the version as an atomic operation
  -e ENV, --env ENV     Environment variables that pass to the function

Effectuez toutes les opérations suivantes ensemble.

--Créer une archive du code source et des bibliothèques --Intégrer le code d'informations confidentielles dans l'archive --Insérez la variable d'environnement facultative dans l'archive

De plus, j'ai ajouté l'option Dry run (afficher uniquement la différence sans mise à jour), qui est utile dans codenize.tools auquel je suis redevable. C'est «-d» ou «--dry-run».

Vous pouvez spécifier des variables d'environnement avec -e ou --env.

rollback

$ lamvery rollback -h
usage: lamvery rollback [-h] [-a ALIAS] [-c CONF_FILE] [-v VERSION]

optional arguments:
  -h, --help            show this help message and exit
  -a ALIAS, --alias ALIAS
                        Alias for a version of the function
  -c CONF_FILE, --conf-file CONF_FILE
                        Configuration YAML file (default: .lamvery.yml)
  -v VERSION, --version VERSION
                        Version of the function

Rembobine deploy. Il prend également en charge la marche à sec. Les spécifications de Rollback sont décrites dans ici.

configure

$ lamvery configure -h
usage: lamvery configure [-h] [-c CONF_FILE] [-d]

optional arguments:
  -h, --help            show this help message and exit
  -c CONF_FILE, --conf-file CONF_FILE
                        Configuration YAML file (default: .lamvery.yml)
  -d, --dry-run         Dry run

Le code source n'est pas mis à jour, seuls les paramètres de la fonction sont mis à jour. Bien sûr, il prend en charge la marche à sec. Cependant, veuillez noter que si vous effectuez un contrôle de version, les paramètres ne seront pas reflétés tant que vous n'aurez pas publié une nouvelle version. Il s'agit d'une commande qui ne peut être utilisée que lorsqu'il n'y a pratiquement pas de contrôle de version car les paramètres sont synchronisés même lors du déploiement.

set-alias

$ lamvery set-alias -h
usage: lamvery set-alias [-h] [-a ALIAS] [-c CONF_FILE] [-d] [-v VERSION]
                         [-t TARGET]

optional arguments:
  -h, --help            show this help message and exit
  -a ALIAS, --alias ALIAS
                        Alias for a version of the function
  -c CONF_FILE, --conf-file CONF_FILE
                        Configuration YAML file (default: .lamvery.yml)
  -d, --dry-run         Dry run
  -v VERSION, --version VERSION
                        Version of the function
  -t TARGET, --target TARGET
                        The alias of the version that is targeted for setting
                        alias

Définissez un alias. Ceci est également compatible avec la marche à sec. Spécifiez le nom d'alias avec -a ou --alias, et spécifiez la version à aliaser avec -v ou --version.

encrypt

$ lamvery encrypt -h
usage: lamvery encrypt [-h] [-c CONF_FILE] [-n SECRET_NAME] [-s] text

positional arguments:
  text                  The text value to encrypt

optional arguments:
  -h, --help            show this help message and exit
  -c CONF_FILE, --conf-file CONF_FILE
                        Configuration YAML file (default: .lamvery.yml)
  -n SECRET_NAME, --secret-name SECRET_NAME
                        The name of the secret value
  -s, --store           Store encripted value to the configuration file
                        (default: .lamvery.secret.yml)

Cryptez la valeur donnée à l'aide de KMS. Spécifiez le nom à utiliser lors de la récupération avec -n ou --name, et ajoutez -s ou --store pour enregistrer le chiffrement dans le fichier de configuration avec ce nom.

encrypt-file

$ lamvery encrypt-file -h
usage: lamvery encrypt-file [-h] [-c CONF_FILE] -p PATH [-s] file

positional arguments:
  file                  The file path to encrypt

optional arguments:
  -h, --help            show this help message and exit
  -c CONF_FILE, --conf-file CONF_FILE
                        Configuration YAML file (default: .lamvery.yml)
  -p PATH, --path PATH  The path to put the decrypted file in the function
  -s, --store           Store encripted value to the configuration file
                        (default: .lamvery.secret.yml)

Cryptez le fichier spécifié à l'aide de KMS. Spécifiez le nom de fichier à utiliser lors de la gestion avec Function avec -n ou --name, et si vous ajoutez -s ou --store, le chiffrement et le nom de fichier seront enregistrés dans le fichier de configuration avec ce nom. Sera fait.

decrypt

$ lamvery decrypt -h
usage: lamvery decrypt [-h] [-c CONF_FILE] [-n SECRET_NAME]

optional arguments:
  -h, --help            show this help message and exit
  -c CONF_FILE, --conf-file CONF_FILE
                        Configuration YAML file (default: .lamvery.yml)
  -n SECRET_NAME, --secret-name SECRET_NAME
                        The name of the secret value

Déchiffre le chiffrement dans le fichier de configuration. Spécifiez le nom décidé au moment du cryptage avec -n ou --name. decrypt-file n'est pas implémenté car c'est une histoire si vous regardez le fichier original w

events Configurez CloudWatch Events. Bien sûr, il prend en charge la marche à sec. Il s'agit d'une mise à jour différentielle, s'il n'y a pas de paramètre d'événement, elle sera créée, et s'il y en a, elle sera mise à jour. Les événements associés à une fonction qui ne sont pas décrits seront supprimés, mais ceux associés à une autre fonction ne seront supprimés que de la cible et ne seront pas supprimés.

lamvery events [-k]

invoke

$ lamvery invoke -h
usage: lamvery invoke [-h] [-a ALIAS] [-c CONF_FILE] [-v VERSION] json

positional arguments:
  json                  The JSON string or file that pass to the function

optional arguments:
  -h, --help            show this help message and exit
  -a ALIAS, --alias ALIAS
                        Alias for a version of the function
  -c CONF_FILE, --conf-file CONF_FILE
                        Configuration YAML file (default: .lamvery.yml)
  -v VERSION, --version VERSION
                        Version of the function

Fonction de démarrage. Le journal résultant sera sorti sur la sortie standard. Spécifiez l'entrée avec un argument. Si vous le transmettez au format JSON, il sera transmis tel quel, et si vous spécifiez le chemin du fichier dans lequel JSON est écrit, le contenu sera transmis. Vous pouvez également spécifier la version (-v) et l'alias ( -a).

logs

$ lamvery logs -h
usage: lamvery logs [-h] [-c CONF_FILE] [-f] [-F FILTER] [-i INTERVAL]
                    [-s START]

optional arguments:
  -h, --help            show this help message and exit
  -c CONF_FILE, --conf-file CONF_FILE
                        Configuration YAML file (default: .lamvery.yml)
  -f, --follow          Watch the log events and updates the display (like
                        `tail -f`)
  -F FILTER, --filter FILTER
                        Filtering pattern for the log messages
  -i INTERVAL, --interval INTERVAL
                        Intervals(seconds) to watch the log events
  -s START, --start START
                        Time to start the log events watching

Affichez les journaux de fonction crachés dans CloudWatch Logs. Vous pouvez utiliser -f pour continuer à jouer tail -f, ou utiliser -s pour spécifier la date et l'heure de début de la navigation.

api

$ lamvery api -h
usage: lamvery api [-h] [-c CONF_FILE] [-d] [-n] [-r] [-s STAGE] [-w]

optional arguments:
  -h, --help            show this help message and exit
  -c CONF_FILE, --conf-file CONF_FILE
                        Configuration YAML file (default: .lamvery.yml)
  -d, --dry-run         Dry run
  -n, --no-integrate    Without automatic integration
  -r, --remove          Remove your API
  -s STAGE, --stage STAGE
                        The name of the stage in API Gateway
  -w, --write-id        Write the id of your API to the configuration file
                        (default: .lamvery.api.yml)

Déployez l'API sur API Gateway. Ajoutez -r pour le supprimer. Vous pouvez supprimer le comportement de définition automatique de x-amazon-apigateway-integration etc. avec -n et le déployer tel qu'il est écrit dans le fichier de configuration.

Flux de création de la fonction Lambda à l'aide d'informations confidentielles (référence)

1. Créez une clé privée avec KMS.

https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html

2. Ajoutez les autorisations suivantes au rôle IAM lors de l'exécution de la fonction.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:kms:us-east-1:<your-account-number>:key/<your-key-id>"
            ]
        }
    ]
}

3. Générez un fichier de configuration et un modèle de fonction

lamvery init
lamvery generate -k function

4. Définissez l'ID de la clé créée en 1 dans le fichier de configuration comme indiqué ci-dessous.

yaml:.lamvery.yml


 profile: default
  region: us-east-1
  configuration:
    name: sample_lambda_function
    runtime: python2.7 # or nodejs
    role: arn:aws:iam::000000000000:role/lambda_basic_execution
    handler: lambda_function.lambda_handler
    description: This is sample lambda function.
    timeout: 10
    memory_size: 128

yaml:.lamvery.secret.yml


key_id: a5ed61a9-fa57-4ebf-9b3f-457b95de05ce # <-ici! !! !!
cipher_texts: {}

5. Crypter et stocker les informations sensibles

lamvery encrypt -s -n foo "This is a secret"

6. Écrivez la source

lambda_function.py


import lamvery

def lambda_handler(event, context):
    print(lamvery.secret.get('foo'))

lambda_function.js


var lamvery = require('./lamvery.js');

exports.lambda_handler = function(event, context) {
    lamvery.secret.get('foo', function(err, data) {
        console.log(data);
    });
}
  1. Deploy!!
lamvery deploy

8. Fonction de lancement

lambery invoke {}

Vous obtiendrez le résultat décrypté comme ci-dessous.

START RequestId: 13829c9c-9f13-11e5-921b-6f048cff3c2d Version: $LATEST
This is a secret
END RequestId: 13829c9c-9f13-11e5-921b-6f048cff3c2d

finalement

Il a beaucoup de fonctionnalités, mais nous prévoyons d'en ajouter d'autres! Si vous le souhaitez, essayez-le et faites-nous part de vos commentaires :-)

Cliquez ici pour vos commentaires ↓ https://github.com/marcy-terui/lamvery

[^ 1]: une bibliothèque qui fournit un environnement virtuel isolé pour les bibliothèques Python, etc. https://pypi.python.org/pypi/virtualenv [^ 2]: au 16 décembre 2015. Il n'y a pas d'API (même si elle peut être interne), ou AWS a le dicton "Talk with API". https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/getting-started-scheduled-events.html [^ 3]: .py est la source brute, .pyc est la source compilée [^ 4]: Je n'ai pas de banc, donc c'est dommage, mais comme la compilation est raccourcie, le temps de démarrage est très court, mais peut-il s'améliorer? [^ 5]: Si vous n'utilisez pas virtualenv, la source qui a fonctionné dans la bibliothèque système ne fonctionnera pas si vous êtes local, il n'y a donc pas d'option pour ne pas l'utiliser, non?

Recommended Posts

À propos de «Lamvery», un outil de déploiement et de gestion pour AWS Lambda
Une histoire de compilation croisée d'un package Python pour AWS Lambda et de son déploiement sans serveur
Création d'un outil de gestion de bibliothèque d'en-tête uniquement pour C / C ++
Création de l'outil de gestion des utilisateurs Let's Chat
Créer une couche pour AWS Lambda Python dans Docker
Procédure de création d'un Line Bot sur AWS Lambda
[Python] J'ai écrit une API REST en utilisant AWS API Gateway et Lambda.
[AWS] Créez un environnement Python Lambda avec CodeStar et faites Hello World
À propos de la gestion des packages avec conda et pip
Histoires et solutions pour la mise à jour de l'AWS CLI
À propos des expressions de signal, de connexion et de lambda de PyQt
Remarques sur la création d'outils de mise en forme de texte
[AWS] Associez Lambda et S3 à boto3
Un outil pour saisir facilement du code Python
Une histoire sur Python pop and append
[AWS Lambda] Créer un package de déploiement à l'aide de l'image Amazon Linux Docker