python2.7のLambdaEC2自動起動スクリプトをpython3.7化してみた
https://dev.classmethod.jp/cloud/aws/simple-auto-start-stop-for-ec2/
上記のサイトを丸写ししてEC2の自動起動をしていたんだけれども、python2.7のサポート終了が近付いてきているので、Lambda関数をpython3.7化してみた。
最初にLambdaをそのまま3.7に切替えてみたんですが動作しない。
CloudWatchのログを見てみるとエラー出てるじゃないですか。
※先にログ見ろよな
そりゃそうですよねぇ。そのままで動くと思ったらprint文で引っかかるんですね。
ひとまずエラーの内容を元に以下の通り書き替えました。
まさかprintで引っかかるなんて思わなかった。
これで使っているLambda関数の中から2系は消滅したのでしばらくは安全ですね。
以上、小ネタでした。ちなみにshutdownはcronで動かしています。
上記のサイトを丸写ししてEC2の自動起動をしていたんだけれども、python2.7のサポート終了が近付いてきているので、Lambda関数をpython3.7化してみた。
最初にLambdaをそのまま3.7に切替えてみたんですが動作しない。
CloudWatchのログを見てみるとエラー出てるじゃないですか。
※先にログ見ろよな
[ERROR] Runtime.UserCodeSyntaxError: Syntax error in module 'lambda_function': invalid syntax (lambda_function.py, line 10) Traceback (most recent call last): File "/var/task/lambda_function.py" Line 10 print 'started your instances: ' + ", ".join(instances)
そりゃそうですよねぇ。そのままで動くと思ったらprint文で引っかかるんですね。
ひとまずエラーの内容を元に以下の通り書き替えました。
import boto3 def lambda_handler(event, context): region = event['Region'] operate = event['Action'] instances = event['Instances'] ec2 = boto3.client('ec2', region_name=region) if operate == 'start': ec2.start_instances(InstanceIds=instances) msg = 'started your instances: ' + ", ".join(instances) print(msg) elif operate == 'stop': ec2.stop_instances(InstanceIds=instances) msg = 'stopped your instances: ' + ", ".join(instances) print(msg)
まさかprintで引っかかるなんて思わなかった。
これで使っているLambda関数の中から2系は消滅したのでしばらくは安全ですね。
以上、小ネタでした。ちなみにshutdownはcronで動かしています。
コメント