[PYTHON] Über "Lamvery", ein Bereitstellungs- und Verwaltungstool für AWS Lambda

Dies ist ich werde es auch dieses Jahr tun! AWS Lambda Tied Up Adventskalender 2015 ist ein Artikel am 16., der jedoch von Zeit zu Zeit aktualisiert wird (letzte Aktualisierung: 15.07.2016).

Einführung

Alle bereitgestellten Informationen sind zum 15.07.2015 aktuell. Die Entwicklung ist im Gange und kann sich ändern.

Was ist Lamvery?

Weil es eine gute Quelle ist

Es wird hier sein https://github.com/marcy-terui/lamvery

Überblick

Es ist ein Tool, das die Bereitstellung der Lambda-Funktion sowie das Einstellen und Verwalten von Peripheriefunktionen einschließlich der Funktion selbst unterstützt. Es besteht aus Python und ich verwende es hauptsächlich in Python, aber Node.js wird vorerst auch unterstützt, und ich habe die Mindestoperation bestätigt.

Basierend auf dem Konzept des benutzerfreundlichen Bereitstellungs- und Verwaltungstools für die AWS Lambda-Funktion entwickeln wir mit dem Schwerpunkt auf der einfachen und bequemen Handhabung einer Funktion und der Wahrscheinlichkeit eines praktischen Bereitstellungsablaufs. Es ist als Werkzeug positioniert.

Ich denke auch, dass es wertvoll ist, zusätzliche Funktionen hinzuzufügen, die nicht realisiert werden können, ohne sich an die Bereitstellung von Function zu binden, und es ist eine Funktion, die solche Tools aktiv hinzufügen.

Wie man liest

Der Autor liest "Ranberi".

Ursprung

Ursprünglich Bereitstellen von Python-Code in der AWS-Dokumentation .html) ist zu lästig und ich dachte, ich könnte etwas dagegen tun, also habe ich "** Lam ** bda + ** v ** irtual ** e ** nv + p ** y ** thon" gemacht. Es fühlt sich an, als hätte ich es aufgenommen und mit [^ 1] verbunden, aber jetzt kann ich nicht anders, als zu denken, dass der kurze und coole Name gut war.

Warum mit anderen ähnlichen Tools vergleichen?

Lambda-Uploader, Kappa usw.

Apex Bitte überprüfen Sie hier. Insbesondere sollten Sie bei den Rollback-Spezifikationen vorsichtig sein, da Sie auf einen Blick erkennen können, dass "Oh, das ist ein Bösewicht". http://qiita.com/marcy-terui/items/db8dae512af3c553fe72

Warum hast du Lamvery gemacht, ohne das oben genannte zu verwenden?

Ich wollte ein Werkzeug, das in meine Hand passt und praktisch verwendet werden kann, und als ich es benutzte, schien ich verschiedene Dinge zu wollen, also dachte ich, ich sollte es selbst machen.

Grobe Liste der Funktionen und Dinge, die Sie tun können

Wie benutzt man

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

Einstellmethode

Erstellen Sie zunächst mit dem folgenden Befehl eine Vorlage für die Einstellungsdatei.

lamvery init

Nachdem Sie eine Vorlage für einige Konfigurationsdateien haben, bearbeiten Sie diese. Wie oben erwähnt, wird jinja2 als Vorlage interpretiert. Wenn Sie es also in "{{}}" einschließen, wird die Variable erweitert, und wenn Sie sie in "{%%}" einschließen, wird sie erweitert. Sie können Code einbetten. Außerdem habe ich die Umgebungsvariablen, von denen ich denke, dass sie häufig verwendet werden, in eine Variable namens "env" eingefügt, damit ich sie kurz schreiben kann.

Das Folgende ist ein Einstellungsbeispiel.

Grundlegende Konfiguration

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

Ereigniseinstellungen (Cloud Watch-Ereignisse)

yaml:.lamvery.event.yml


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

Einstellungen für vertrauliche Informationen (KMS)

yaml:.lamvery.secret.yml


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

Ausschlussliste

yaml:.lamvery.exclude.yml


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

Aktionshaken

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

Elemente einstellen

Grundlegende Konfiguration

Ereigniseinstellungen (Cloud Watch-Ereignisse)

Einstellungen in Bezug auf vertrauliche Informationen

Ausschlussliste

Zählen Sie einfach die Pfade der Dateien auf, die Sie mit regulären Ausdrücken ausschließen möchten

Aktionshaken

Derzeit wird nur "Build" unterstützt. build ist der Prozess zum Erstellen eines Bereitstellungspakets. Listen Sie die Befehle auf, die Sie vor "vor" und nach "nach" ausführen möchten.

API Gateway

Befehl

Bei Befehlszeilenargumenten werden nur häufig verwendete aufgelistet. Wenn Sie alles wissen möchten, überprüfen Sie bitte 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)

Vorlagen für verschiedene Einstellungsdateien erstellen Dies ist der erste Befehl, der nach der Installation ausgeführt wird.

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"

Dies ist ein Befehl zum Generieren von Vorlagen für verschiedene Programme. Der zu generierende Dateityp wird durch "-k" angegeben, aber derzeit kann nur die Funktionsvorlage mit "function" generiert werden.

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

Erstellen Sie eine Archivdatei (ZIP) des Quellcodes und der Bibliothek. Zur Bestätigung oder beim Erstellen eines unregelmäßigen Flusses. Der Dateiname lautet "Funktionsname.zip". Wenn keine Einstellungsdatei vorhanden ist, handelt es sich um das Ausführungsverzeichnis 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

Führen Sie alle folgenden Schritte zusammen aus.

--Erstellen Sie ein Archiv mit Quellcode und Bibliotheken

Außerdem habe ich die Option Trockenlauf (nur den Unterschied ohne Aktualisierung anzeigen) hinzugefügt, die in codenize.tools nützlich ist, um die ich mich normalerweise kümmere. Es ist -d oder --dry-run.

Sie können Umgebungsvariablen mit -e oder --env angeben.

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

Spult "Bereitstellen" zurück. Es unterstützt auch Trockenlauf. Die Rollback-Spezifikationen sind in [hier] beschrieben (http://qiita.com/marcy-terui/items/db8dae512af3c553fe72#deploy--rollback).

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

Der Quellcode wird nicht aktualisiert, nur die Funktionseinstellungen werden aktualisiert. Natürlich unterstützt es Trockenlauf. Beachten Sie jedoch, dass bei der Versionierung die Einstellungen erst angezeigt werden, wenn Sie eine neue Version veröffentlichen. Es ist ein Befehl, der nur verwendet werden kann, wenn fast keine Versionierung vorhanden ist, da die Einstellungen auch bei der Bereitstellung synchronisiert werden.

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

Legen Sie einen Alias fest. Dies ist auch mit Trockenlauf kompatibel. Geben Sie den Aliasnamen mit "-a" oder "--alias" an und geben Sie die Version an, die mit "-v" oder "--version" aliasiert werden soll.

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)

Verschlüsseln Sie den angegebenen Wert mit KMS. Geben Sie den Namen an, der beim Abrufen mit "-n" oder "--name" verwendet werden soll, und fügen Sie "-s" oder "--store" hinzu, um die Verschlüsselung in der Einstellungsdatei mit diesem Namen zu registrieren.

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)

Verschlüsseln Sie die angegebene Datei mit KMS. Geben Sie den Dateinamen an, der bei der Verarbeitung von Function mit -n oder --name verwendet werden soll. Wenn Sie -s oder --store hinzufügen, werden die Verschlüsselung und der Dateiname in der Einstellungsdatei mit diesem Namen registriert. Getan werden.

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

Entschlüsselt die Verschlüsselung in der Konfigurationsdatei. Geben Sie den zum Zeitpunkt der Verschlüsselung festgelegten Namen mit -n oder --name an. decrypt-file ist nicht implementiert, da es sich um eine Story handelt, wenn Sie sich die Originaldatei w ansehen

events Richten Sie CloudWatch-Ereignisse ein. Natürlich unterstützt es Trockenlauf. Es handelt sich um eine differenzielle Aktualisierung. Wenn keine Ereigniseinstellung vorhanden ist, wird sie erstellt und, falls vorhanden, aktualisiert. Ereignisse, die nicht im mit der Funktion verknüpften Ereignis beschrieben sind, werden gelöscht, aber diejenigen, die einer anderen Funktion zugeordnet sind, werden nur aus dem Ziel entfernt und nicht gelöscht.

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

Funktion starten. Das resultierende Protokoll wird an die Standardausgabe ausgegeben. Geben Sie die Eingabe mit einem Argument an. Wenn Sie es im JSON-Format übergeben, wird es unverändert übergeben. Wenn Sie den Pfad der Datei angeben, in die JSON geschrieben ist, wird der Inhalt übergeben. Sie können auch die Version (-v) und den Alias ( -a) angeben.

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

Zeigen Sie die in CloudWatch-Protokollen ausgegebenen Funktionsprotokolle an. Sie können "-f" verwenden, um "tail -f" weiterzuspielen, oder "-s" verwenden, um das Startdatum und die Startzeit für das Surfen anzugeben.

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)

Stellen Sie die API für das API-Gateway bereit. Fügen Sie -r hinzu, um es zu entfernen. Sie können das Verhalten der automatischen Einstellung von "x-amazon-apigateway-Integration" usw. mit "-n" unterdrücken und so bereitstellen, wie es in der Einstellungsdatei geschrieben ist.

Ablauf der Erstellung der Lambda-Funktion unter Verwendung vertraulicher Informationen (Referenz)

1. Erstellen Sie mit KMS einen privaten Schlüssel.

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

2. Fügen Sie der IAM-Rolle die folgenden Berechtigungen hinzu, wenn Sie die Funktion ausführen.

{
    "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. Generieren Sie eine Konfigurationsdatei und eine Funktionsvorlage

lamvery init
lamvery generate -k function

4. Stellen Sie die ID des in 1 erstellten Schlüssels in der Einstellungsdatei wie unten gezeigt ein.

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 # <-Hier! !! !!
cipher_texts: {}

5. Verschlüsseln und speichern Sie vertrauliche Informationen

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

6. Schreiben Sie die Quelle

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. Starten Sie die Funktion

lambery invoke {}

Sie erhalten das entschlüsselte Ergebnis wie folgt.

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

Schließlich

Es hat viele Funktionen, aber wir planen, weitere hinzuzufügen! Wenn Sie möchten, probieren Sie es bitte aus und geben Sie uns Ihr Feedback :-)

Klicken Sie hier für Feedback ↓ https://github.com/marcy-terui/lamvery

[^ 1]: Eine Bibliothek, die eine isolierte virtuelle Umgebung für Python-Bibliotheken usw. bereitstellt. https://pypi.python.org/pypi/virtualenv [^ 2]: Stand 16. Dezember 2015. Es gibt keine API (obwohl diese möglicherweise intern ist) oder AWS hat das Sprichwort "Mit API sprechen". https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/getting-started-scheduled-events.html [^ 3]: .py ist die Rohquelle, .pyc ist die kompilierte Quelle [^ 4]: Ich habe keine Bank, also ist es eine Schande, aber da die Kompilierung verkürzt ist, ist die Startzeit sehr kurz, aber kann sie sich verbessern? [^ 5]: Wenn Sie virtualenv nicht verwenden, funktioniert die Quelle, die zufällig in der Systembibliothek funktioniert hat, nicht, wenn Sie lokal sind. Es gibt also keine Möglichkeit, sie nicht zu verwenden, oder?

Recommended Posts

Über "Lamvery", ein Bereitstellungs- und Verwaltungstool für AWS Lambda
Eine Geschichte über das Cross-Kompilieren eines Python-Pakets für AWS Lambda und das Bereitstellen ohne Server
Erstellt ein Bibliotheksverwaltungstool nur für Header für C / C ++
Lassen Sie uns Chat-Benutzerverwaltungstool gemacht
Erstellen Sie in Docker eine Ebene für AWS Lambda Python
Vorgehensweise zum Erstellen eines Linienbot in AWS Lambda
[Python] Ich habe eine REST-API mit AWS API Gateway und Lambda geschrieben.
[AWS] Erstellen Sie mit CodeStar eine Python Lambda-Umgebung und führen Sie Hello World aus
Über Paketmanagement mit Conda und Pip
Geschichten und Lösungen für das AWS CLI-Update
Informationen zu PyQts Signal-, Verbindungs- und Lambda-Ausdrücken
Hinweise zum Erstellen von Textformatierungswerkzeugen
[AWS] Verknüpfen Sie Lambda und S3 mit boto3
Ein Tool zur einfachen Eingabe von Python-Code
Eine Geschichte über Python Pop und Append
[AWS Lambda] Erstellen Sie ein Bereitstellungspaket mit dem Amazon Linux Docker-Image