【问题标题】:Run python Flask API on AWS EC2 through boto3通过 boto3 在 AWS EC2 上运行 python Flask API
【发布时间】:2020-09-09 11:41:07
【问题描述】:

我是 AWS 的新手,所以我正在构建一个代码来从一个图像创建一个实例,我希望在创建这个 EC2 的同时它运行一个像这样的 pyhton 代码:

python /folder/folder2/api_flask.py

这是我在 boto 上创建实例的代码。

import boto3
client = boto3.session('ec2')
client.run_instances(ImageId='ami-id_number_of_img', MinCount=1, MaxCount=1, InstanceType='t2.nano')

感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

    run_instances 有一个名为UserData 的选项,可让您使用Run commands on your Linux instance at launch

    因此要运行您的代码,您可以尝试以下操作:

    import boto3
    
    client = boto3.client('ec2') # not boto3.session('ec2')
    
    client.run_instances(ImageId='ami-id_number_of_img', 
                         MinCount=1, 
                         MaxCount=1, 
                         InstanceType='t2.nano',
                         UserData='#!/bin/bash\npython /folder/folder2/api_flask.py\n')
    

    【讨论】:

      【解决方案2】:

      既然您提到您是 AWS 新手,请考虑使用 CloudFormation 来预置 AWS 基础设施。正如 Marcin 所说,您仍然需要利用 UserData

      MyInstance:
        Type: AWS::EC2::Instance
        Properties:
          UserData:
            Fn::Base64: !Sub |
              python /folder/folder2/api_flask.py
          InstanceType: t2.nano
          ImageId: ami-id_number_of_img
      

      为什么选择 CloudFormation?它更具可读性,允许就地更新和拆除。然后,您可以通过 boto3 启动堆栈(免责声明:未经测试,但演示了这个想法):

      import boto3
      
      client = boto3.client('cloudformation')
      with open('mytemplate.yml', 'r') as f:
        response = client.create_stack(
          StackName='my-stack',
          TemplateBody=f.read())
      

      【讨论】:

        猜你喜欢
        • 2018-04-07
        • 2020-01-28
        • 1970-01-01
        • 1970-01-01
        • 2018-08-09
        • 1970-01-01
        • 1970-01-01
        • 2020-06-19
        • 1970-01-01
        相关资源
        最近更新 更多