当前位置: 首页 > 知识库问答 >
问题:

boto3 python启动EC2

巫马令
2023-03-14

我正在使用下面的python boto3代码来启动Ec2

import boto3
region='us-east-1'
instance_id = 'i-06ce851edfXXXXXX'
ec2 = boto3.client('ec2', region_name=region)

def lambda_handler(event, context):
resp = ec2.describe_instance_status(InstanceIds=[str(instance_id)],
        IncludeAllInstances=True)
print("Response = ",resp)

instance_status = resp['InstanceStatuses'][0]['InstanceState']['Code']
print("Instance status =", instance_status)

if instance_status == 80:
    ec2.start_instances(InstanceIds=[instance_id])
    print("Started instance with Instance_id",instance_id)

elif instance_status == 16:
     ec2.stop_instances(InstanceIds=[instance_id])
     print("Stopped EC2 with Instance-ID",instance_id)
else:
     print("No desired state found")

当实例处于运行状态时,我可以通过运行此lambda来停止实例。

但当实例处于停止状态并且我运行Lambda时,我会得到下面的消息,它不会显示任何错误。但当我签入控制台时,实例仍然处于停止状态。我无法找出实例为什么没有进入运行阶段。实例状态=80个实例id为i-06ce851edfXXXXXX的已启动实例

下面是使用的IAM角色

 {
    "Action": [
        "ec2:StopInstances",
        "ec2:StartInstances",
        "ec2:RebootInstances"
    ],
     "Resource": [
             "arn:aws:ec2:us0east-1:2x83xxxxxxxxxx:instance/i-06ce851edfXXXXXX"
      ],
     "Effect": "Allow"

共有3个答案

陈哲
2023-03-14

实际上,根卷的加密是这里的问题。您可以将内联策略添加到角色:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:*"
            ],
            "Resource": "*"
        }]
}

请注意,它将为所有资源授予完整的访问表单KMS。如果需要,可以将此策略的范围限制为某些特定资源。

有关此问题的详细信息,请单击此处:https://aws.amazon.com/premiumsupport/knowledge-center/encrypted-volumes-stops-immediately/

曾典
2023-03-14

我发现了这个问题。EC2的根卷是加密的,所以我在角色中添加了KMS权限,并且成功了。

宦宏爽
2023-03-14

您的代码正在工作。我用我的lambda在我的测试实例上验证了它。

为了便于阅读,我对其进行了一些重新格式化,但它没有任何更改(实例id除外)。我可以停止运行实例。然后我可以启动停止的实例。

需要注意的一点是,停止和开始需要时间。如果您快速执行函数,它将无法在停止状态下启动实例。也许这就是你认为它不起作用的原因。

还要确保将lambda的默认超时从3秒增加到10秒或更长。

import boto3

region='us-east-1'
instance_id = 'i-08a1e399b3d299c2d'

ec2 = boto3.client('ec2', region_name=region)

def lambda_handler(event, context):

    resp = ec2.describe_instance_status(
            InstanceIds=[str(instance_id)],
            IncludeAllInstances=True)

    print("Response = ",resp)

    instance_status = resp['InstanceStatuses'][0]['InstanceState']['Code']

    print("Instance status =", instance_status)

    if instance_status == 80:
        ec2.start_instances(InstanceIds=[instance_id])
        print("Started instance with Instance_id",instance_id)

    elif instance_status == 16:
         ec2.stop_instances(InstanceIds=[instance_id])
         print("Stopped EC2 with Instance-ID",instance_id)
    else:
         print("No desired state found")
 类似资料:
  • iam使用带有kafa整数的jhipsterSpring靴 正在应用中。yml公司 云:流:默认绑定器:kafka函数:定义:memberSupplier;成员批准供应商;memberEventConsumer;memberApprovalEventConsumer绑定:memberSupplier-out-0:目标:memberEventConsumer-in-0:目标:memberApprov

  • 我在启动spring boot应用程序时遇到以下错误。这是我的第一个spring boot项目。因此,我不确定错误以及如何修复它。 申请启动失败 描述: 配置为侦听端口8080的Tomcat连接器无法启动。端口可能已在使用中,或者连接器可能配置错误。 行动: 验证连接器的配置,识别并停止在端口8080上侦听的任何进程,或者将此应用程序配置为在另一个端口上侦听。

  • 首先在 /etc/init.d 目录下添加 es 脚本(可执行), #!/bin/bash su es -c "/elasticsearch-2.3.5/bin/elasticsearch -d" 2. 查看系统启动级别 [root@slave02 init.d]# runlevel N 5 3. 在 /etc/rc5.d 下建立软链 ln -s S70es /etc/init.d/es

  • 大家好,我正在windows 7中使用xampp v3.2.1。我想在windows启动时自动启动它,但无法启动。 我尝试了这里提供的解决方案,但在服务中找不到任何东西。 我在D驱动器中安装了xampp,这就是为什么apache和mysql在从run打开services.msc时不显示在服务中的原因。 我已经从xampp控制面板的config(配置)按钮尝试过了,我选中了autostart(自动启

  • Chrome大部分时候作为一个独立可执行程序运行,它知道怎样运行我们使用的各种有趣的进程。 这是具体过程: 首先,我们有一个平台相关的入口: Windows上是wWinMain(),Linux上是main()。这存在于chrome/app/chrome_exe_main_* 这样的文件中。在Mac和Windows上,这个函数会加载下面所描述的模块,在Linux上,它会做很少事情,几个平台上,它们最

  • 启动容器 启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动。 因为 Docker 的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器。 新建并启动 所需要的命令主要为 docker run。 例如,下面的命令输出一个 “Hello World”,之后终止容器。 $ docker run ubuntu:18.04 /bin/echo

  • 本部分包括启动 JDV 6.3 以及部署测试 VDB 测试。 启动使用端口偏移,并绑定 IP 地址启动 jdv@A1DB01 jboss-eap-6.4]$ ./bin/standalone.sh -Djboss.socket.binding.port-offset=100 -b 0.0.0.0 -bmanagement=0.0.0.0 2>&1 > ./console.log & 验证启动 查看

  • 从文件夹内部执行“npm start”命令时出现以下错误/ 我在互联网上尝试了多种解决方案,但都无效。