2017-02-08 10 views
1

背景:私は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時間続き、その機能はリサイクルされているように見え、再び「寒い」状態になります。

私はプログラミングに比較的新しいですし、機能が呼び出されるたびに更新されている私の時間ベースの変数(今起動)を確実にする方法があるならば、それは暖かいのかどうか、知りたいのですがまたは冷たい呼び出し。

+1

lambda_handler関数内の変数を移動する必要があります。しかし、以下に述べるように、ハンドラーの呼び出しごとに時間を更新したい場合は、呼び出しハンドラーに時間を入れてください。 – 2ps

+0

これは、関数から直接コピー/ペーストされ、エラーなく実行されます。だから、あなたは今私に心配している...笑エラーはどこですか? – AppleBaggins

答えて

5

あなたは私の推測では、それにエラーがあるので、あなたが実際のコードを貼り付けていないことである

def lambda_handler(event, context): 
    startup = datetime.now().strftime('%H%M') 
    now = int(startup) 
    minutes = [now-5,now-4,now-3,now-2,now-1,now] 
    for min in minutes: 
     [...] 
+0

omg ..私は質問を削除するように誘惑されているので、私はこれを以前見ていないという恥を抱くことはありませんが、それはあなたのことを奪うでしょう。ありがとう! – AppleBaggins

+0

些細なことだ...私は関数の外で宣言するのに数分が必要で、分を宣言するためには時間変数が必要です。 – AppleBaggins

+0

私はそれらを関数の中に入れることができますが、分の分の部分の外に置くことができます。 – AppleBaggins

関連する問題