【问题标题】:How do I run a python script that is located on the AWS EC2 server?如何运行位于 AWS EC2 服务器上的 python 脚本?
【发布时间】:2020-09-18 00:33:08
【问题描述】:

我想在我的计算机上使用 python 代码来运行位于服务器 (EC2 ubuntu 18) 上的 python 脚本。我知道您可以为此使用 boto,但我没有找到一个完整的示例,它可以在这里编写为服务器,我们像这样连接到它,我们像这样执行脚本。

【问题讨论】:

    标签: python python-3.x amazon-web-services amazon-ec2 boto3


    【解决方案1】:

    您可以使用 AWS SSM 或 lambda 函数来做到这一点。

    参考@mokugo-devops 的answer for AWS SSM

    或 lambda 函数方法参考这里

    #requires paramiko package
    #paramiko package is available at:
    # https://github.com/pranavmalaviya2/COVID-19-Live-Data-board/tree/master/lambda%20functions/SSH_lambda-Deployment-package
    
    import json
    import boto3
    import paramiko
    import time
    
    def lambda_handler(event, context):
        # boto3 client
        client = boto3.client('ec2')
        s3_client = boto3.client('s3')
        
        # getting instance information
        describeInstance = client.describe_instances()
        
        # downloading pem file from S3 
        s3_client.download_file('bucket-name','key-name.pem', '/destination/folder/new-key-name.pem')
    
        # reading pem file and creating key object
        key = paramiko.RSAKey.from_private_key_file("/destination/folder/new-key-name.pem")
        # an instance of the Paramiko.SSHClient
        ssh_client = paramiko.SSHClient()
        # setting policy to connect to unknown host
        ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    
        # connect using ec2 instance ID if requires
        ssh_client.connect(hostname="12.12.12.12", username="ubuntu", pkey=key)
    
        # command list
        commands = [
            "python script.py",
            "python script2.py",
            "aws s3 cp --recursive source/ s3://destination-bucket/",
        ]
    
        # executing list of commands within server
        print("Starting execution")
        for command in commands:
            print("Executing command: " + command)
            stdin , stdout, stderr = ssh_client.exec_command(command)
            print(stdout.read())
            print(stderr.read())
        
        print("finished execution")
        
        return {
            'statusCode': 200,
            'body': json.dumps('Execution Completed')
        }
    

    【讨论】:

      【解决方案2】:

      看看 AWS SSM - Run Command

      您可以从本地 Python 脚本运行 send-command

      您可以:

      要执行此操作,您需要确保已安装目标实例SSM Agent,并且该实例具有correct privileges 的角色。 示例命令

      import boto3
      client = boto3.client('ssm')
      
      client.send_command(
          InstanceIds=[
              'i-01234567',
          ],
          DocumentName='AWS-RunShellScript',
          Parameters={
              'commands': [
                  'python3 /home/ec2-user/main.py',
              ]
          }
      )
      

      【讨论】:

      • 或者能否提供python代码,我看到的文档)
      • 您好,您可以通过此命令将 Python 代码作为 Python 命令提供。它就像在 shell 命令行上运行一样
      • 你可以用一个小例子,假设有一个main.py的脚本
      • 一开始导入了哪些库?
      猜你喜欢
      • 2011-09-08
      • 1970-01-01
      • 2018-08-30
      • 2017-05-22
      • 1970-01-01
      • 1970-01-01
      • 2017-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多