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)
Toutes les informations fournies sont à jour au 2015-07-15. Le développement est en cours et est sujet à changement.
Ce sera ici https://github.com/marcy-terui/lamvery
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.
L'auteur lit "Ranberi".
À 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.
.py
et .pyc
, et l'un d'eux est inclus dans l'archive [^ 3]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
. Py
n'est pas stocké dans l'archive, seul .pyc
est stocké, etc. [^ 4]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.
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
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.
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
yaml:.lamvery.event.yml
rules:
- name: foo
description: bar
schedule: 'rate(5 minutes)'
targets:
- id: test-target-id
input:
this:
- is: a
- sample: input
yaml:.lamvery.secret.yml
key_id: xxxx-yyyy-zzzz
cipher_texts: {}
secret_files: {}
yaml:.lamvery.exclude.yml
- ^\.lamvery\.yml$
- ^\.lamvery\.event\.yml$
- ^\.lamvery\.secret\.yml$
- ^\.lamvery\.exclude\.yml$
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
hoge
définie par hoge. C'est celui qui contient les informations d'identification et les paramètres de région. http://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-chap-getting-started.html S'il n'est pas spécifié (écrire
null ou supprimer chaque élément), il suit le comportement de ʻAWS SDK (boto3)
(Rôle IAM sur EC2, variables d'environnement telles que ʻAWS_SECRET_KEY` sur local)true
), désactivé ( false
)python2.7
ou nodejs
.subnets
et l'ID de groupe de sécurité dans security_groups
dans la liste.. Utilisé lorsque vous ne souhaitez gérer qu'une partie des arguments passés par défaut lorsque ʻinput
n'est pas spécifié au format JSONPath.Énumérez simplement les chemins des fichiers que vous souhaitez exclure avec des expressions régulières
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
-w
lors de la création de l'API pour la première fois avec la commande ʻapi`, elle sera remplie automatiquement.x-amazon-apigateway-integration
requis pour l'exécution des fonctions Lambda et la configuration de CORS est automatiquement ajouté, sauf indication explicite dans le fichier de configuration. Le modèle de mappage définit également automatiquement Passer tous les paramètres (ce Le comportement peut être supprimé en option)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.
https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:Decrypt"
],
"Resource": [
"arn:aws:kms:us-east-1:<your-account-number>:key/<your-key-id>"
]
}
]
}
lamvery init
lamvery generate -k function
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: {}
lamvery encrypt -s -n foo "This is a secret"
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);
});
}
lamvery deploy
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
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