web-dev-qa-db-ja.com

Boto3を使用してAWSインスタンスでコマンドを実行する方法

起動したAWSインスタンスでBoto3を使用してシェルコマンドを実行できるかどうか、誰か教えてもらえますか?.

「boto.manage.cmdshell」については数か所で読みましたが、Boto3では非推奨になっています。

どんな助けにも感謝します。

よろしく、Saurabh

9
sdeshpande
ssm_client = boto3.client('ssm')
response = ssm_client.send_command(
            InstanceIds=['i-03#####'],
            DocumentName="AWS-RunShellScript",
            Parameters={'commands': ['start ecs']}, )

command_id = response['Command']['CommandId']
output = ssm_client.get_command_invocation(
      CommandId=command_id,
      InstanceId='i-03######',
    )
print(output)
11
Joe Mantil
ssm = boto3.client('ssm' )    
testCommand = ssm.send_command( InstanceIds=[ 'i-123123123123' ], DocumentName='AWS-RunShellScript', Comment='la la la', OutputS3BucketName='myOutputS3Bucket', OutputS3KeyPrefix='i-123123123123', Parameters={ "commands":[ "ip config" ]  } )

i-123123123123は、偽のec2インスタンスIDです。これをOutputS3KeyPrefixに入れて、ログをバケットに保存する一意の場所を取得します。

このようにssmエージェントをインストールできます。

ec2r = boto3.resource('ec2' )
userdata = """#cloud-config
    runcmd:
     - /home/ec2-user/Sudo npm run prod
     - cd /tmp
     - curl https://Amazon-ssm-%s.s3.amazonaws.com/latest/linux_AMD64/Amazon-ssm-agent.rpm -o Amazon-ssm-agent.rpm
     - yum install -y Amazon-ssm-agent.rpm
""" % region   

if ssm == "on":
    instance = ec2r.create_instances( ImageId=AMI, MinCount=1, MaxCount=1, KeyName=keyname, InstanceType=instancetype, 
        NetworkInterfaces=[{
        'DeviceIndex': 0,
        'AssociatePublicIpAddress': False,
        'SubnetId': mySub,
        'Groups': secGroupList,
        'AssociatePublicIpAddress': AssociatePublicIpAddress
    }],
        Monitoring={ 'Enabled': False },

        UserData=userdata,
        IamInstanceProfile={
            'Name': rolename
        },
        EbsOptimized=False
    )
3
ddtraveller

いいえ。 boto.manage.cmdshell botoの機能はboto3に移行されませんでした。オリジナル boto.manage.cmdshell使用される機能 Paramiko boto3でSSH機能を使用する場合は、boto3で直接使用できます。

これがこのトピックに関する boto3 githubの問題 です。

@jarmodが指摘するように、2015年10月の時点で AWSの新しい機能 があり、Windowsシステムで AWS EC2 SSM を使用してコマンドを実行できます。 botocoreバージョン1.3.1以降、boto3で boto3 SSM client を使用してこれにアクセスできます。

これが、「EC2 Run Command」のサポートに関する boto3 githubの問題 です。

2
gene_wood

変化する

command_id = response['Command']['CommandId']

command_id = context.aws_request_id

私は少し古いスレッドに答えていることを知っています。当時はSSMが存在していたかどうかはわかりません。ただし、今ではboto3からSSM send_commandを使用して、ec2インスタンスで直接コマンドを実行できます。 EC2インスタンスでPowerShellコマンドを実行するサンプルは次のとおりです

import boto3
ssm_client = boto3.client('ssm', region_name="us-west-2") # use region code in which you are working
response = ssm_client.send_command(
             InstanceIds=[
                "i-03########" # use instance id on which you want to execute, even multiple is allowd
                     ],
             DocumentName="AWS-RunPowerShellScript",
             Parameters={
                'commands':[
                     'ipconfig'
                       ]
                   },
             })
command_id = response['Command']['CommandId']
output = ssm_client.get_command_invocation(
      CommandId=command_id,
      InstanceId='i-03######',
    )
print(output)

詳細については、 boto3 SSM docs を参照してください。SSM自体の詳細については、AWSドキュメントを参照してください。

0
sumit pandit

Documentation は言う:

aws_request_id

リクエストに関連付けられているAWSリクエストID。これは、invokeメソッドを呼び出したクライアントに返されたIDです。

変化する:

command_id = response['Command']['CommandId']

ために:

command_id = context.aws_request_id