Статьи

AWS Lambda для начинающих

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 .