Відповіді:
Оновлення
AWS випустила інструмент під назвою " Планувальник екземплярів ", включаючи повне керівництво по конфігурації, яке посилається на цю сторінку. Здається, це є вдосконаленням планувальника EC2, який я описую нижче, маючи ще кілька функцій, але це, по суті, те саме.
Поданий посібник все ще працюватиме, але, мабуть, краще переглянути плановий примірник нових установок.
Оригінальна публікація
AWS має інструмент під назвою EC2 Scheduler, який дає вам дуже гнучкий контроль над запуском та зупинкою екземплярів EC2.
Інструмент дозволяє визначити час запуску та зупинки за замовчуванням, коли ви налаштовуєте інструмент, який ви можете змінити пізніше. Ви можете вибрати, які екземпляри контролюються, ви і можете вказати різні часи запуску та зупинки для кожного примірника за допомогою тегів.
Хоча це чудовий інструмент, документація дещо розпливчаста і заплутана. Це як документація написана інженером, який написав інструмент і знає про нього все, а не технічним письменником.
Примітка : якщо у вас є відгуки або виправлення, коментарі оцінюються. Якщо у вас виникло запитання на основі цього, будь ласка, розпочніть власне запитання.
Що таке планувальник EC2
Цей інструмент - це функція лямбда, яка працює з Cloudwatch Events та DynamoDB. Він розгортається за допомогою шаблону Cloudformation, який також встановлює необхідні ролі та політики IAM. Про архітектуру ви можете прочитати тут .
Розгортання
Для початку перейдіть на цю сторінку і натисніть «запустити рішення». Зараз пряме посилання є тут , але воно може змінитися.
Виберіть регіон, до якого потрібно розгорнути ресурси, у верхній частині консолі. Сценарій контролює випадки EC2 у будь-якому регіоні, але він працює в одному регіоні.
Позначення екземплярів EC2
Це висвітлено в документації тут , але це не так просто, як це могло б бути.
Ви визначаєте, які екземпляри починаються та зупиняються, позначаючи їх.
Найпростіший випадок вимагає відзначити кожен екземпляр EC2, який потрібно запустити і зупинити відповідно до розкладу. Для цього знайдіть свій екземпляр EC2 у консолі, натисніть теги та створіть цей тег
Щоб увімкнути копіювання та вставити:
Якщо ви хочете, щоб певний екземпляр був запущений і зупинений в іншому розкладі, ви додаєте додаткову інформацію до ключа та значення тегу. Наприклад, якщо ви хочете, щоб екземпляр починався з 1500 UTC і зупинявся на 2400 UTC у вівторок, четвер і п’ятницю, ви вводите наступне.
Ключ: планувальник: ec2-startstop: пізнє значення: 1500; 2400; utc; вт, чт, пт
Зауважте, що слово "пізно" може бути будь-яким рядком, "пізно" не має особливого значення.
Ви можете перетворити UTC на місцевий час за допомогою цього інструменту .
Ви можете використовувати редактор тегів для масових примірників тегів. Це може легше дозволити вам налаштувати масове тегування, що може бути корисно для різних налаштувань для розробника, тестування та виробництва. Я сумніваюся, ви б використовували це на виробництві.
Параметри Cloud Cloud Formation
При запуску шаблону CloudFormation вам доведеться ввести безліч параметрів. Більшість ви можете залишити за замовчуванням. Ось деякі найважливіші параметри
Дозволи, правила та ролі
Розділ ролей Permissions / IAM шаблону CloudFormation - це червона оселедець - тобто це в значній мірі не має значення. Він визначає лише роль, яка використовується для запуску сценарію CloudFormation, при цьому немає ніякого значення для створених ресурсів або ролі, яка використовується при запуску функції лямбда. З ретроспективою це очевидно, але мені це було не очевидно, коли я починав.
Яку б роль ви не виконували цей сценарій, оскільки однакові ролі та вбудовані дозволи створюються в IAM. Функція лямбда запускається, використовуючи "роль планувальника ec2", яку створює сценарій.
Я включив мою політику нижче, якщо вони корисні для когось.
CloudWatch події та показники
Якщо ви хочете побачити журнали з функції Lambda, перейдіть до подій Cloudwatch. Лісозаготівля досить хороша. Існують також показники, тож ви можете бачити, коли вона працює, час, на який вона працює, і т.д.
Додатковий
Код функції лямбда доступний на Github .
Політика
Вони, як правило, не потрібні, але можуть бути для когось, тому я їх включатиму.
Політика щодо ролі IAM
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances",
"ec2:DescribeTags",
"iam:CreateRole",
"iam:GetRole",
"iam:PassRole",
"iam:PutRolePolicy",
"iam:DeleteRolePolicy",
"iam:DeleteRole",
"dynamodb:*",
"lambda:*",
"SNS:Publish",
"events:*"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "S3:GetObject",
"Resource": [
"arn:aws:s3:::solutions-us-west-2",
"arn:aws:s3:::solutions-us-west-2/*"
]
},
{
"Effect": "Allow",
"Action": [
"ec2:StopInstances",
"ec2:StartInstances"
],
"Resource": [
"arn:aws:ec2:us-west-2:123456789012:instance/i-0d112345Ab6789012"
]
}
]
}
Політика довіри щодо ролі IAM
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"lambda.amazonaws.com",
"cloudformation.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
Якщо ви просто хочете запускати та зупиняти екземпляри, ось ще один досвід, який також використовує послугу Lambda. Він передбачає, що ви хочете керувати певним ідентифікатором екземпляра. Ви можете керувати кількома екземплярами, додаючи більше ідентифікаторів, розділених комою. (наприклад: 'i-3453453', 'i-45656745'). Ви можете знайти ідентифікатор вашого примірника в розділі "Примірники консолі AWS".
Код нижче
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"ec2:Start*",
"ec2:Stop*"
],
"Resource": "*"
}
]
}
Код нижче
import boto3
region = ' eu-west-1'
instances = ['i-0dd344443184503fa']
def lambda_handler(event, context):
ec2 = boto3.client('ec2', region_name=region)
ec2.stop_instances(InstanceIds=instances)
print 'stopped your instances: ' + str(instances)
Код нижче
import boto3
region = 'eu-west-1'
instances = [' i-0dd344443184503fa']
def lambda_handler(event, context):
ec2 = boto3.client('ec2', region_name=region)
ec2.start_instances(InstanceIds=instances)
print 'started your instances: ' + str(instances)
Тут ви створите подію CloudWatch, яка запустить вашу функцію Lambda вночі
Примітка: вирази Cron оцінюються в UTC. Не забудьте відрегулювати вираз для бажаного часового поясу. Ось приклад, який виконуватиме функцію щодня о 08:00 GMT / UTC):
0 08 * * ? *
Щоб перезапустити примірники вранці, повторіть ці дії та скористайтеся бажаним часом початку. Якщо ви хочете відправляти поштове повідомлення, коли функції не спрацьовують, ви можете налаштувати тему SNS та налаштувати відправлення цього повідомлення під налагодженням у вікні створення функцій Lmbda.
Джерело всього цього можна знайти тут: документація AWS