Поиск по сайту:

Функция AWS Lambda для запуска и остановки экземпляра EC2


На этой странице

  1. Предварительные требования
  2. Что мы будем делать
  3. Войти в AWS
  4. Создание лямбда-функции

Lambda подпадает под службу «Вычисления» в AWS (Amazon Web Services). С помощью Lambda мы можем кодировать без предоставления серверов или управления ими. Lambda автоматически запускает наш код, не требуя от нас выделения серверов или управления ими. Нам просто нужно написать код и загрузить это к лямбда-функции.

Lambda выполняет код только при необходимости. Он автоматически растет, поддерживая от нескольких запросов до тысяч запросов.

Плата взимается за каждые 100 мс выполнения нашего кода и количество его срабатываний. Плата взимается только за время вычислений, которое потребляет наш код, и не взимается, когда код не выполняется. Чтобы узнать больше о выставлении счетов, нажмите здесь.

Нам нужно предоставить только код, а AWS Lambda позаботится об обслуживании, автоматическом масштабировании и высокой доступности. Этот код также может выполняться в ответ на события. Чтобы использовать Lambda, нам нужно написать код на одном из предоставляемых ею языков.

В этой статье мы увидим, как создать простую функцию Lambda, которая может запускать/останавливать экземпляр EC2.

Предпосылки

  1. Аккаунт AWS (создайте, если у вас его нет)
  2. Основы службы EC2 (нажмите здесь, чтобы узнать EC2).

Что мы будем делать

  1. Войдите в AWS.
  2. Создайте лямбда-функцию.
  3. Изменить роль IAM
  4. Исполнение роли

Войти в АВС

  1. Нажмите здесь, чтобы перейти на страницу входа в AWS.

Когда мы перейдем по приведенной выше ссылке, мы увидим следующую веб-страницу, где нам необходимо войти в систему, используя наши данные для входа.

После успешного входа в AWS мы увидим главную консоль со всеми перечисленными ниже службами.

Создайте лямбда-функцию

Прежде чем приступить к созданию лямбда-функции, выберите нужный и ближайший регион.

Нажмите на стрелку рядом с регионом по умолчанию (Здесь это Париж), и вы увидите список доступных регионов и выберите нужный регион. Здесь я выбрал «Париж», оставив его без изменений. Вы можете выбрать по своему выбору или требованию.

Нажмите «Сервисы» в верхнем левом углу, и вы увидите следующий экран со всеми сервисами, доступными на AWS. Нажмите «Лямбда», доступную в разделе «Вычисления».

Вы получите экран, на котором вы можете создать лямбда-функцию. Нажмите «Создать функцию».

Вы можете создать функцию самостоятельно, использовать существующие чертежи или просмотреть репозиторий, где мы можем найти нужную функцию, чтобы узнать, существует ли она. Здесь мы создадим нашу собственную простую лямбда-функцию, используя Python.

Нажмите «Автор с нуля», чтобы написать собственную лямбда-функцию.

Укажите имя функции.

Выберите «Python 3.6» в раскрывающемся списке среды выполнения.

Лямбда-функция должна иметь достаточные разрешения для ее выполнения. Выберите «Создать новую роль с базовыми разрешениями Lambda». Это создаст новую роль с тем же именем, что и имя функции, с некоторым случайным ключом в качестве суффикса.

Приведенных выше разрешений по умолчанию недостаточно. Мы поймем это лучше на следующем шаге. А пока мы просто создадим функцию и посмотрим, какие возможные ошибки могут возникнуть.

Добавьте следующий код в функцию и нажмите кнопку «Сохранить», чтобы сохранить функцию.

Измените значение \регион и экземпляры.

import boto3
region = 'eu-west-3'
instances = ['i-05be5c0c4039881ed']
ec2 = boto3.client('ec2', region_name=region)
def lambda_handler(event, context):
    ec2.stop_instances(InstanceIds=instances)
    print('stopped your instances: ' + str(instances))

Нажмите кнопку «Выбрать тестовое событие», доступную помимо кнопки «Тест», и выберите «Настроить тестовое событие». Вы получите следующий экран. Не вносите никаких изменений и просто дайте имя событию, здесь оно является «testStopEC2» и нажмите «Сохранить». Это событие является просто образцом и не имеет никакого отношения к нашей функции. Мы можем создать другое событие в соответствии с нашими требованиями.

Примечание. Мы можем создать событие Cloudwatch, с помощью которого мы сможем активировать эту лямбда-функцию на основе события, инициированного в Cloudwatch. Мы не будем обсуждать это сейчас, так как для этого потребуется четкое понимание Cloudwatch. Итак, мы приступим к простому событию. Вы можете изучить это, как только познакомитесь с Lambda и Cloudwatch.

Теперь нажмите «Тест». Обратите внимание, что функция не может быть выполнена из-за недостаточного разрешения. Это то, о чем я говорил на предыдущем шаге. Не паникуйте, глядя на ошибку. Мы назначим необходимые разрешения для роль, созданная при создании лямбда-функции.

Изменить роль IAM

Нажмите «Услуги» в правом верхнем углу экрана и найдите IAM.

Вы увидите следующий экран. Это главный экран IAM. В этой статье мы не будем подробно останавливаться на IAM.

Нажмите «Роли» на левой панели и нажмите «Роль», которая начинается с того же имени, что и имя лямбда-функции, и имеет некоторую случайную строку в качестве суффикса.

Нажмите «Прикрепить политики».

Найдите «ec2» в поле поиска, выберите «AmazonEC2FullAccess» из списка и нажмите кнопку «Прикрепить политику». Теперь все готово для выполнения функции Lambda с необходимыми разрешениями.

Выполнить лямбда-функцию

Вернитесь к нашей лямбда-функции и нажмите кнопку «Проверить». На этот раз в журналах вы увидите, что функция выполнена успешно. Это означает, что лямбда-функция инициировала запрос на остановку экземпляра.

Перейдите к службе «EC2» и посмотрите, был ли остановлен экземпляр с идентификатором экземпляра, который мы предоставили функции Lambda. Здесь вы можете видеть, что состояние экземпляра «Остановка», что означает, что функция Lambda успешно обработана. наш запрос на остановку требуемого экземпляра.

На предыдущих шагах мы видели функцию Lambda для остановки экземпляра EC2. Теперь мы увидим, как можно запустить экземпляр EC2 с помощью Lambda. Для этого вы можете либо отредактировать ту же функцию, либо написать новую функцию, выполнив те же предыдущие шаги.

Здесь мы будем использовать ту же функцию и просто изменим наш код Python.

Используйте следующий код, чтобы запустить экземпляр EC2 с помощью Lambda.

Измените значение \регион и экземпляры.

import boto3
region = 'eu-west-3'
instances = ['i-05be5c0c4039881ed']
ec2 = boto3.client('ec2', region_name=region)
def lambda_handler(event, context):
#    ec2.stop_instances(InstanceIds=instances)
    ec2.start_instances(InstanceIds=instances)
    print('stopped your instances: ' + str(instances))

Сохранить функцию

Примечание. Будьте осторожны при написании кода на Python. Неправильный отступ может привести к ошибкам.

Нажмите «Тест», чтобы выполнить функцию.

Посмотрите подробности выполнения, и вы ясно увидите, что функция была успешно выполнена. Это означает, что функция Lambda инициировала запрос на запуск экземпляра.

Здесь вы можете видеть, что состояние экземпляра — «Инициализация», что означает, что функция Lambda успешно обработала наш запрос на запуск требуемого экземпляра.

Заключение:

В этой статье мы увидели, как создать простую лямбда-функцию для остановки экземпляра ec2, назначить необходимые политики ролям, используемым лямбда-функцией. Мы также увидели, как запустить экземпляр EC2 с помощью функции Lambda. Мы отредактировали одну и ту же функцию для выполнения остановки/запуска экземпляра EC2. Для этого вы можете создать две разные функции.