Jawaban:
Memperbarui
AWS telah merilis alat yang disebut " Penjadwal Instance ", termasuk panduan konfigurasi lengkap yang ditautkan dari halaman itu. Tampaknya merupakan peningkatan dari Penjadwal EC2 yang saya jelaskan di bawah, dengan beberapa fitur lagi, tetapi pada dasarnya hal yang sama.
Panduan di bawah ini masih akan berfungsi, tetapi mungkin lebih baik untuk melihat penjadwal contoh untuk instalasi baru.
Pos Asli
AWS memiliki alat yang disebut Penjadwal EC2 yang memberi Anda kontrol yang sangat fleksibel untuk memulai dan menghentikan instance EC2.
Alat ini memungkinkan Anda untuk menentukan waktu mulai dan berhenti default ketika Anda mengatur alat, yang dapat Anda ubah nanti. Anda dapat memilih instance mana yang dikontrol, Anda dan Anda dapat menentukan waktu mulai dan berhenti yang berbeda untuk setiap instance menggunakan tag.
Meskipun ini merupakan alat yang hebat, dokumentasi ini agak kabur dan membingungkan. Sepertinya dokumentasi telah ditulis oleh seorang insinyur yang menulis alat dan tahu segalanya tentang itu, daripada seorang penulis teknis.
Catatan : jika Anda memiliki umpan balik atau komentar koreksi dihargai. Jika Anda memiliki pertanyaan berdasarkan ini, silakan mulai pertanyaan Anda sendiri.
Apa itu Penjadwal EC2
Alat ini adalah Fungsi Lambda yang berfungsi dengan Acara Cloudwatch dan DynamoDB. Ini dikerahkan menggunakan templat Cloudformation, yang juga mengatur peran dan kebijakan IAM yang diperlukan. Anda dapat membaca tentang arsitektur di sini .
Penyebaran
Mulailah dengan membuka halaman ini dan mengklik "luncurkan solusi". Saat ini tautan langsung ada di sini , tetapi itu bisa berubah.
Pilih wilayah tujuan sumber daya yang Anda inginkan di bagian atas konsol. Script mengontrol instance EC2 di wilayah mana pun, tetapi dijalankan di satu wilayah.
Menandai Instance EC2
Ini tercakup dalam dokumentasi di sini , tetapi tidak sesederhana mungkin.
Anda mengontrol instans mana yang dimulai dan dihentikan dengan memberi tag instans Anda.
Kasing paling sederhana mengharuskan Anda untuk menandai setiap instance EC2 yang ingin Anda mulai dan hentikan sesuai jadwal. Untuk melakukan ini, temukan instance EC2 Anda di konsol, klik tag, dan buat tag ini
Untuk mengaktifkan salin dan tempel:
Jika Anda ingin memulai dan menghentikan instance spesifik pada jadwal yang berbeda, Anda menambahkan informasi tambahan ke kunci dan nilai tag. Misalnya jika Anda ingin contoh dimulai pada 1500 UTC dan berhenti pada 2400 UTC pada hari Selasa, Kamis dan Jumat Anda memasukkan yang berikut ini.
Kunci: scheduler: ec2-startstop: late Nilai: 1500; 2400; utc; tue, thu, fri
Perhatikan bahwa kata "terlambat" dapat berupa string apa pun, "terlambat" tidak memiliki arti khusus.
Anda dapat mengonversi UTC ke waktu lokal Anda menggunakan alat ini .
Anda dapat menggunakan editor tag untuk membuat instance tag massal. Itu bisa lebih mudah membiarkan Anda mengatur penandaan massal, yang dapat berguna untuk memiliki pengaturan yang berbeda untuk dev, pengujian, dan produksi. Saya ragu Anda akan menggunakannya untuk produksi.
Parameter CloudFormation
Ketika Anda menjalankan template CloudFormation Anda harus memasukkan banyak parameter. Sebagian besar Anda dapat meninggalkan default. Inilah beberapa parameter terpenting
Izin, Kebijakan, dan Peran
Bagian peran Izin / IAM dari templat CloudFormation adalah herring merah - artinya sebagian besar tidak relevan. Ini menentukan hanya peran yang digunakan untuk menjalankan skrip CloudFormation, tidak ada bedanya dengan sumber daya yang dibuat atau peran yang digunakan ketika fungsi lambda berjalan. Kalau dipikir-pikir ini jelas, tetapi tidak jelas bagi saya ketika saya mulai.
Apa pun peran yang Anda jalankan skrip ini sebagai peran dan izin inline yang sama dibuat dalam IAM. Fungsi Lambda berjalan menggunakan "peran penjadwal EC2" yang dibuat skrip.
Saya telah memasukkan kebijakan saya di bawah jika mereka bermanfaat bagi siapa pun.
Acara dan Metrik CloudWatch
Jika Anda ingin melihat log dari Fungsi Lambda Anda, buka Acara Cloudwatch. Penebangannya cukup bagus. Ada juga metrik, sehingga Anda dapat melihat kapan dijalankan, waktu dijalankan, dll.
Tambahan
Kode untuk fungsi lambda tersedia di Github .
Kebijakan
Ini umumnya tidak diperlukan, tetapi bisa untuk seseorang jadi saya akan memasukkannya.
Kebijakan untuk Peran 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"
]
}
]
}
Kebijakan kepercayaan untuk peran IAM
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"lambda.amazonaws.com",
"cloudformation.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
Jika Anda hanya ingin memulai dan menghentikan instances, berikut ini contoh lain yang juga menggunakan layanan Lambda. Itu mengasumsikan Anda ingin mengontrol id instance tertentu. Anda dapat mengontrol beberapa instance dengan menambahkan lebih banyak id yang dipisahkan oleh koma. (mis: 'i-3453453', 'i-45656745'). Anda dapat menemukan id instance Anda di bagian Instance AWS konsol.
Kode di bawah ini
{
"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": "*"
}
]
}
Kode di bawah ini
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)
Kode di bawah ini
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)
Di sini Anda akan membuat Acara CloudWatch yang akan memicu fungsi Lambda Anda di malam hari
Catatan: Ekspresi Cron dievaluasi dalam UTC. Pastikan untuk menyesuaikan ekspresi untuk zona waktu pilihan Anda. Berikut adalah contoh yang akan menjalankan fungsinya setiap hari pada pukul 08:00 GMT / UTC):
0 08 * * ? *
Untuk memulai kembali instans Anda di pagi hari, ulangi langkah-langkah ini dan gunakan waktu mulai yang Anda inginkan. Jika Anda ingin mengirim pesan email setiap kali fungsi gagal, Anda dapat mengatur topik SNS dan mengkonfigurasi pengiriman pesan itu di bawah Debugging di Lmbda Function Creation Window.
Sumber semua ini dapat ditemukan di sini: dokumentasi AWS