AWS Lambda — это вычислительный сервис от Amazon. Это делает развертывание и предоставление очень простым и очень хорошо сочетается с архитектурой на основе микросервисов. Вы можете узнать больше о AWS Lambda здесь . В настоящее время поддерживаются платформы JVM, Node JS и Python.
Модель программирования для лямбд состоит из обработчика, объекта контекста, ведения журнала и исключений . Они описаны здесь . Лямбда не должна удерживать состояние, потому что они поднимаются и опускаются и тиражируются по мере необходимости. Постоянное состояние должно храниться в службе, находящейся вне жизненного цикла лямбды, такой как Amazon DynamoDB, S3 и т. Д.
Прежде всего следуйте приведенным здесь инструкциям, чтобы настроить учетную запись AWS и интерфейс командной строки AWS, и запишите идентификатор своей учетной записи.
Шаг 1: Код
Самая простая лямбда будет выглядеть в Python следующим образом:
|
1
2
|
def lambda_handler(event, context): return "Hello World!" |
или как в Java:
|
1
2
3
4
5
6
7
8
9
|
package example;import com.amazonaws.services.lambda.runtime.Context; public class Hello { public String lambdaHandler(String event, Context context) { return "Hello World!"; }} |
Вы можете следовать, довольно длинным инструкциям, чтобы развернуть эту функцию … но это не весело! Давайте сделаем это в стиле devops;)
Вставьте приведенный выше код Python в файл с именем helloworld.py . Если вы хотите использовать версию Java, следуйте приведенным здесь инструкциям, чтобы создать свою лямбду и создать пакет развертывания с помощью Maven.
Шаг 2: Роль
Создайте файл trust.json . Доверие позволяет нашей функции взять на себя роль AWS Lambda.
В trust.json мы разрешаем функции взять на себя роль службы lambda.amazonaws.com , иначе инфраструктура не позволит запустить нашу функцию.
|
01
02
03
04
05
06
07
08
09
10
11
|
{ "Version": "2012-10-17", "Statement": [{ "Sid": "", "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" }]} |
Шаг 3: Развертывание
Создайте следующий скрипт ( deploy.sh ). Примечание. В сценарии предполагается, что у вас установлена переменная среды AWS_ACCOUNT_ID .
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#!/bin/bash### Create the lambda packagezip -j helloworld.zip *.py### Create the role for the lambda to assumerole="helloworld_exec_role"trust="trust.json"aws iam create-role --role-name $role --assume-role-policy-document file://$trustaws iam update-assume-role-policy --role-name $role --policy-document file://$trust### Create the lambda functionfunction_name="helloworld"handler_name="helloworld.lambda_handler"package_file=helloworld.zipruntime=python2.7aws lambda create-function \ --function-name $function_name \ --handler $handler_name \ --runtime $runtime \ --memory 512 \ --timeout 60 \ --role arn:aws:iam::${AWS_ACCOUNT_ID}:role/$role \ --zip-file fileb://$package_file |
или для Java:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#!/bin/bash### Create the lambda packagemvn package### Create the role for the lambda to assumerole="helloworld_exec_role"trust="trust.json"aws iam create-role --role-name $role --assume-role-policy-document file://$trustaws iam update-assume-role-policy --role-name $role --policy-document file://$trust### Create the lambda functionfunction_name="helloworld"handler_name="example.Hello::lambdaHandler"package_file="target/lambda-java-example-1.0-SNAPSHOT.jar"runtime="java8"aws lambda create-function \ --function-name $function_name \ --handler $handler_name \ --runtime $runtime \ --memory 512 \ --timeout 60 \ --role arn:aws:iam::${AWS_ACCOUNT_ID}:role/$role \ --zip-file fileb://${package_file} |
Сделайте исполняемый скрипт chmod +x deploy.sh и разверните ваш lambda ./deploy.sh . Вы можете получить следующую ошибку: «Роль, определенная для функции, не может быть принята лямбдой». Это потому, что роль не была воспроизведена до конца в Amazon. Просто запустите сценарий развертывания снова. Он будет жаловаться, что роль уже существует, но на этот раз создание лямбды должно пройти. В будущем мы рассмотрим проверку состояния, чтобы убедиться, что роль полностью создана, прежде чем мы развернем функцию.
Шаг 5: Казнь!
Вызовите лямбду с помощью приведенной ниже команды. Вы должны увидеть результат в файле с именем output.txt
|
1
|
aws lambda invoke --invocation-type RequestResponse --function-name helloworld --payload '[""]' output.txt |
Шаг 6: Очистка
Чтобы удалить лямбда-функцию и затем роль, вставьте в delete.sh следующее
|
1
2
3
4
5
|
#!/bin/bashrole="helloworld_exec_role"function_name="helloworld"aws lambda delete-function --function-name $function_nameaws iam delete-role --role-name $role |
Затем сделайте исполняемый скрипт chmod +x delete.sh и выполните ./delete.sh
Шаг 7: Расслабьтесь … вы прибыли;)
… И ждите следующего поста на AWS
| Ссылка: | AWS Lambda для начинающих от нашего партнера JCG, Масхука Бадара, в блоге Crafted Software . |