背景:私はEC2インスタンスを起動するために15分ごとに特定のラムダ関数を呼び出します。これはタグの値を問い合わせることによって動作し、その値が現在の時刻と一致する場合、インスタンスは開始されるインスタンスのリストに追加されます。ラムダウォームスタートをコードで説明しますか?
問題:しかし、この機能は頻繁に呼び出されるため「暖かい」状態を維持するため、4時間に1回しか機能しません。関数が暖かい間、私は現在の時間(呼び出しの時間)の変数は暖かい環境で持続され、現実の、本当の本当の実在の時間に更新されることはありません。以下のコードを参照してください。この機能のための私のCloudWatchのログで
# This lambda script start EC2 instances
import boto3
import logging
from datetime import datetime, time
ec = boto3.resource('ec2')
startup = datetime.now().strftime('%H%M')
now = int(startup)
minutes = [now-5,now-4,now-3,now-2,now-1,now]
logger = logging.getLogger()
logger.setLevel(logging.ERROR)
print 'The current time is: %s' % (startup)
def lambda_handler(event, context):
for min in minutes:
wave = ec.instances.filter(
Filters=[
{'Name': 'instance-state-name', 'Values': ['stopped']},
{'Name': 'tag:Autostop', 'Values': ['%d' % (min)]}
]
)
for i in wave:
iid = (i.instance_id)
for t in i.tags:
if t['Key'] == 'Autostop':
start_value = t['Value']
print 'Instance %s should be started at %s UTC' % (iid, start_value)
try:
print 'Starting %s' % (iid)
i.start()
except:
print 'ERROR -- Error starting instance %s' % (iid)
pass
、私は新しいログ・ストリームを約4時間ごとに表示され、最初のログエントリがライン15の出力が含まれている参照(現在の時刻です:X)が、後続のすべてのエントリにログ・ストリームはSTARTおよびENDのrequestidに過ぎず、現在の時刻は言及されていません。これは約4時間続き、その機能はリサイクルされているように見え、再び「寒い」状態になります。
私はプログラミングに比較的新しいですし、機能が呼び出されるたびに更新されている私の時間ベースの変数(今起動と)を確実にする方法があるならば、それは暖かいのかどうか、知りたいのですがまたは冷たい呼び出し。
lambda_handler関数内の変数を移動する必要があります。しかし、以下に述べるように、ハンドラーの呼び出しごとに時間を更新したい場合は、呼び出しハンドラーに時間を入れてください。 – 2ps
これは、関数から直接コピー/ペーストされ、エラーなく実行されます。だから、あなたは今私に心配している...笑エラーはどこですか? – AppleBaggins