如何使用 boto3 在集群中启动 EC2 实例
Posted
技术标签:
【中文标题】如何使用 boto3 在集群中启动 EC2 实例【英文标题】:How to start EC2 instance in cluster with boto3 【发布时间】:2019-02-25 23:39:43 【问题描述】:我想在我的集群中的一个实例上启动一个任务定义(不是在默认实例中)。所以像:
-
创建集群
使用 docker 映像创建任务定义(我有一个 docker 映像
已经推送到 ecs)
在集群中运行任务定义
我想为 ec2 实例添加一个密钥对以进行 ssh 访问
我已经尝试使用 boto3 (ec2, ecs) 形式的这些函数
create_cluster run_task register_container_instance register_task_definition run_instances我设法用run_instances 运行了一个实例,它运行良好,但我想在我的集群中运行一个实例。这是我的代码:
def run_instances():
response = ec2.run_instances(
BlockDeviceMappings=[
'DeviceName': '/dev/xvda',
'Ebs':
'DeleteOnTermination': True,
'VolumeSize': 8,
'VolumeType': 'gp2'
,
,
],
ImageId='ami-06df494fbd695b854',
InstanceType='m3.medium',
MaxCount=1,
MinCount=1,
Monitoring=
'Enabled': False
)
return response
ec2 控制台上有一个正在运行的实例,但它没有出现在 ecs 控制台中的任何集群中(我尝试使用 ecs 优化的 ami 和普通的 ami)。
我还尝试按照以下步骤让我的系统在集群中启动并运行,但没有成功: https://github.com/spulec/moto/blob/master/tests/test_ecs/test_ecs_boto3.py
你能帮我找出我错过了什么吗?除了调用这些 SDK 函数,还有其他的设置吗?
谢谢!
【问题讨论】:
您在寻找什么? EC2还是ECS? - 启动 ec2 实例使用run_instances 我设法使用run_instances 运行实例,它运行良好,但我想在我的集群中运行一个实例。请用代码查看我更新的问题。 【参考方案1】:您需要运行一个使用 ECS Optimized AMI
的实例,因为这些 AMI 上预装了 ECS 代理,否则您需要自己安装 ECS 代理并烘焙自定义 AMI。
默认情况下,您的 ECS 优化实例会启动到您的默认集群中,但您可以在 run_instances
函数的 UserData
属性中指定备用集群名称
#!/bin/bash
echo ECS_CLUSTER=your_cluster_name >> /etc/ecs/ecs.config
可用的 ECS AMI 列表可用here
【讨论】:
太棒了。奇迹般有效。注意:我必须按照here 的描述将具有 AmazonEC2ContainerServiceforEC2Role 策略的角色附加到正在运行的实例。操作方法如下:CLIaws console以上是关于如何使用 boto3 在集群中启动 EC2 实例的主要内容,如果未能解决你的问题,请参考以下文章
如何在Python AWS boto API中获取EC2实例ID的容器实例列表