

停止しているUbuntuのEC2インスタンスを起動してから、スクリプトを実行し、その結果をメールで送信してから、また停止するということをやりたいです。  
次のようなLambda関数を書いて実行しました。

[code]

    import boto3
    
    instanceId = 'i-xxxxxxxx'
    instance = boto3.resource('ec2').Instance(instanceId)
    statusDict = {'pending'      : 0,
                  'running'      :16,
                  'shutting-down':32,
                  'terminated'   :48,
                  'stopping'     :64,
                  'stopped'      :80 
                 }
    
    ec2 = boto3.client('ec2')
    ssm = boto3.client('ssm')
    
    def lambda_handler(event, context):
        try:
            state = instance.state
            stateCode = state['Code']
            if stateCode == statusDict['running']:
                print('Instance is already running.')
            else:
                response = instance.start()
                print(response)
                instance.wait_until_running()
                print('Succeed to start instance')
    
            print(ssm.describe_instance_information())
            waiter = ec2.get_waiter('instance_status_ok')
            waiter.wait(InstanceIds=[instanceId])
            print(ssm.describe_instance_information())
    
            ssm.send_command(
                InstanceIds = [instanceId],
                DocumentName = "AWS-RunShellScript",
                Parameters = {
                    "commands": [
                        "python3 ./example.py",
                        "cat log.txt | sendmail example@gmail.com", 
                        "aws ec2 stop-instances --instance-ids i-xxxxxxxxx",
                    ],
                    "executionTimeout": ["3600"],
                    "workingDirectory":["/home/ubuntu/example/"]
                },
            )
        except Exception as e:
            print(e)
            raise e
    
[/code]

これを実行すると、メールの送信までは実行されるのですが、インスタンスの停止が行われません。  
サーバーにはawsがインストールされていて、サーバーにsshでログインして同じコマンドを入力するとちゃんと停止されることは確認しています。

スクリプト実行後にインスタンスを停止するためにはどうすればいいでしょうか。


CC BY-SA 3.0
2017-11-10T02:40:00.327
39469
2019-08-30T13:01:45.177
8825
question
aws aws-lambda
LambdaでEC2インスタンスを起動しコマンド実行後にインスタンス停止する方法


原因はわかりませんが・・・

実行するコマンドをshutdownにしてみてはどうでしょうか？  
もしくはssmでコマンド実行を行なった後に別途ssmからterminateしてみるとか。


CC BY-SA 4.0
2019-06-01T09:45:55.773
55435
2019-06-01T09:45:55.773
34547
39469
answer