Yanıtlar:
Güncelleme
AWS , bu sayfadan bağlanan tam bir yapılandırma kılavuzu da dahil olmak üzere " Örnek Zamanlayıcı " adlı bir araç yayınladı . Aşağıda tarif ettiğim EC2 Zamanlayıcı'nın birkaç özelliği daha var, ancak aslında aynı şey.
Aşağıdaki kılavuz yine de çalışır, ancak yeni yüklemeler için örnek zamanlayıcıya bakmak muhtemelen daha iyidir.
Orijinal Mesaj
AWS, EC2 örneklerini başlatma ve durdurma konusunda çok esnek kontrol sağlayan EC2 Zamanlayıcı adlı bir araca sahiptir .
Araç, aracı kurduğunuzda daha sonra değiştirebileceğiniz varsayılan başlangıç ve bitiş zamanlarını tanımlamanıza olanak tanır. Hangi örneklerin denetleneceğini seçebilir, siz ve etiketleri kullanarak her örnek için farklı başlangıç ve bitiş zamanları belirleyebilirsiniz.
Harika bir araç olsa da, dokümantasyon biraz belirsiz ve kafa karıştırıcı. Dokümantasyon, aracı yazan ve teknik bir yazardan ziyade her şeyi bilen bir mühendis tarafından yazılmış gibi.
Not : Görüşleriniz veya düzeltmeleriniz varsa yorumlar takdir edilir. Buna dayalı bir sorunuz varsa lütfen kendi sorunuzu başlatın.
EC2 Zamanlayıcı nedir
Bu araç, Cloudwatch Etkinlikleri ve DynamoDB ile çalışan bir Lambda İşlevidir. Gerekli IAM rollerini ve politikalarını da ayarlayan bir Cloudformation şablonu kullanılarak dağıtılır. Mimari hakkında buradan bilgi edinebilirsiniz .
yayılma
Bu sayfaya gidip "çözümü başlat" ı tıklayarak başlayın . Şu anda doğrudan bağlantı burada , ancak değişebilir.
Konsolun üst kısmında kaynakların dağıtılmasını istediğiniz bölgeyi seçin. Komut dosyası, herhangi bir bölgedeki EC2 örneklerini denetler, ancak bir bölgede çalışır.
EC2 Örneklerini Etiketleme
Buradaki belgelerde ele alınmaktadır , ancak olması gerektiği kadar basit değildir.
Örneklerinizi etiketleyerek hangi örneklerin başlatılıp durdurulacağını siz kontrol edersiniz.
En basit durum, başlatılmasını ve durdurulmasını istediğiniz her EC2 örneğini programa göre etiketlemenizi gerektirir. Bunu yapmak için EC2 örneğinizi konsolda bulun, etiketleri tıklayın ve bu etiketi oluşturun
Kopyala ve yapıştır özelliğini etkinleştirmek için:
Belirli bir vakanın farklı bir programda başlatılmasını ve durdurulmasını istiyorsanız etiket anahtarına ve değerine ek bilgiler eklersiniz. Örneğin, bir örneğin 1500 UTC'de başlamasını ve Salı, Perşembe ve Cuma günleri 2400 UTC'de durmasını istiyorsanız, aşağıdakileri girersiniz.
Anahtar: zamanlayıcı: ec2-startstop: late Değer: 1500; 2400; utc; sal, thu, fri
"Geç" kelimesinin herhangi bir dize olabileceğini, "geç" kelimesinin özel bir anlamı olmadığını unutmayın.
Bu aracı kullanarak UTC'yi yerel saatinize dönüştürebilirsiniz .
Etiket örneklerini toplu olarak etiketlemek için etiket düzenleyiciyi kullanabilirsiniz. Bu, geliştirici, test ve üretim için farklı ayarlara sahip olmak için yararlı olabilecek toplu etiketleme ayarlamanıza daha kolay izin verebilir. Yine de bunu üretimde kullanacağınızdan şüpheliyim.
CloudFormation Parametreleri
CloudFormation şablonunu çalıştırdığınızda çok fazla parametre girmeniz gerekir. Çoğu varsayılan olarak bırakabilirsiniz. İşte en önemli parametrelerden bazıları
İzinler, Politikalar ve Roller
CloudFormation şablonunun İzinler / IAM rolü bölümü kırmızı bir ringa balığıdır - yani büyük önemsizdir. Yalnızca CloudFormation komut dosyasını çalıştırmak için kullanılan rolü belirtir, oluşturulan kaynaklarda veya lambda işlevi çalıştığında kullanılan rolde fark etmez. Geçmişe bakıldığında bu açıktır, ancak başladığımda benim için açık değildi.
Bu komut dosyasını aynı rolle çalıştırdığınız herhangi bir rol ve satır içi izinler IAM içinde oluşturulur. Lambda işlevi, komut dosyasının oluşturduğu bir "ec2 zamanlayıcı rolü" kullanarak çalışır.
Herkes için yararlı olmaları durumunda politikalarımı aşağıya ekledim.
CloudWatch Etkinlikleri ve Metrikleri
Lambda İşlevinizden günlükleri görmek istiyorsanız Cloudwatch Etkinlikleri'ne gidin. Günlüğe kaydetme oldukça iyidir. Metrikler de vardır, böylece ne zaman çalıştığını, ne zaman çalıştığını vb. Görebilirsiniz.
Ek
Lambda fonksiyonunun kodu Github'da mevcuttur .
Politikalar
Bunlar genellikle gerekli değildir, ancak birisi için olabilir, bu yüzden onları dahil edeceğim.
IAM Rolü Politikası
{
"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 rolü için güven politikası
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"lambda.amazonaws.com",
"cloudformation.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
Örnekleri başlatmak ve durdurmak istiyorsanız, Lambda hizmetini de kullanan başka bir şey. Belirli bir örnek kimliğini kontrol etmek istediğinizi varsayar. Virgülle ayrılmış daha fazla kimlik ekleyerek birden fazla örneği kontrol edebilirsiniz. (örneğin: 'i-3453453', 'i-45656745'). Örneğin kimliğini AWS konsolu Örnekleri bölümünde bulabilirsiniz.
Aşağıdaki kod
{
"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": "*"
}
]
}
Aşağıdaki kod
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)
Aşağıdaki kod
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)
Burada gece Lambda işlevinizi tetikleyecek bir CloudWatch Etkinliği oluşturacaksınız
Not: Cron ifadeleri UTC olarak değerlendirilir. İfadeyi tercih ettiğiniz saat dilimi için ayarladığınızdan emin olun. İşte işlevi her gün 08:00 GMT / UTC'de çalıştıracak bir örnek):
0 08 * * ? *
Örneklerinizi sabah yeniden başlatmak için bu adımları tekrarlayın ve tercih ettiğiniz başlangıç saatini kullanın. İşlevler başarısız olduğunda bir posta iletisi göndermek istiyorsanız, bir SNS konusu ayarlayabilir ve bu iletinin Lmbda İşlev Oluşturma Penceresinde Hata Ayıklama altında gönderilmesini yapılandırabilirsiniz.
Tüm bunların kaynağı burada bulunabilir: AWS belgeleri