【问题标题】:passing argument to boto3 e2 start script将参数传递给 boto3 e2 启动脚本
【发布时间】:2022-02-15 01:14:52
【问题描述】:

知道如何修改它以将实例 ID 作为参数传递而不是将其放入脚本中吗?

import boto3

def stop_instance(instance_id):
    ec2 = boto3.client("ec2", region_name="us-west-1")
    response = ec2.stop_instances(InstanceIds=[instance_id])
    print(response)

stop_instance()

【问题讨论】:

  • 添加command line parsing,例如使用 argparse 或单击。
  • 如果你想从命令行停止一个实例,你可以使用AWS Command-Line Interface (CLI)命令:aws ec2 stop-instances --instance-ids <instance-id>
  • 我想用python。事实上我只想有一个脚本来启动和停止实例

标签: amazon-web-services amazon-ec2 boto3


【解决方案1】:

如果您的目标是通过 Python 脚本停止所有 EC2 实例,您可以首先调用 describe-instances method 以动态构建所有正在运行的 EC2 实例的列表(根据 state 属性拉取 id 值 = running)。从那里您可以将该列表传递给您的函数以阻止它们,因为stop-instances method 可以处理一个 id 列表。

【讨论】:

  • 不停止所有。我想要一个 ad=hoc python 脚本通过将实例 ID 作为参数传递来停止 ec2 实例。像这样 python3 shutdown_ec2.py instance_id
  • 感谢您澄清残局 - 使用 sys 模块 (sys.argv) 将实例 id 值传递到脚本中
  • 我需要导入sys和argparse吗?
【解决方案2】:

喜欢这样吗?

import boto3
import sys
import argparse
instance_id = sys.argv[1]

def stop_instance(instance_id):
    ec2 = boto3.client("ec2", region_name="us-west-1")
    response = ec2.stop_instances(InstanceIds=[instance_id])
    print(response)

stop_instance(instance_id)

然后我用 python3 stop_ec2.py instance-id 运行它

【讨论】:

  • 当我不带参数运行它时:它显示了这个............
  • python3 stop_ec2.py Traceback(最近一次调用最后一次):文件“stop_ec2.py”,第 4 行,在 instance_id = sys.argv[1] IndexError: list index out of range
  • 是否如预期的那样
猜你喜欢
  • 2016-09-16
  • 2013-08-06
  • 2012-03-15
  • 2019-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多