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 package zip -j helloworld.zip *.py ### Create the role for the lambda to assume role= "helloworld_exec_role" trust= "trust.json" aws iam create-role --role-name $role --assume-role-policy-document file: //$trust aws iam update-assume-role-policy --role-name $role --policy-document file: //$trust ### Create the lambda function function_name= "helloworld" handler_name= "helloworld.lambda_handler" package_file=helloworld.zip runtime=python2. 7 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 |
или для 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 package mvn package ### Create the role for the lambda to assume role= "helloworld_exec_role" trust= "trust.json" aws iam create-role --role-name $role --assume-role-policy-document file: //$trust aws iam update-assume-role-policy --role-name $role --policy-document file: //$trust ### Create the lambda function function_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/bash role= "helloworld_exec_role" function_name= "helloworld" aws lambda delete- function -- function -name $function_name aws iam delete-role --role-name $role |
Затем сделайте исполняемый скрипт chmod +x delete.sh
и выполните ./delete.sh
Шаг 7: Расслабьтесь … вы прибыли;)
… И ждите следующего поста на AWS
Ссылка: | AWS Lambda для начинающих от нашего партнера JCG, Масхука Бадара, в блоге Crafted Software . |