如何通过AWS PHP SDK创建带自定义配置的EC2实例并加入指定ECS集群
实现方案
方案1:直接创建带自定义配置的EC2实例,手动注册到ECS集群
- 调用EC2 SDK的
RunInstances接口创建实例,Spot竞价相关参数直接在请求的InstanceMarketOptions字段中配置即可,支持自定义竞价上限、实例中断策略、Spot实例类型等参数 - 实例必须满足ECS注册的基础要求:使用ECS优化版AMI,绑定带有
AmazonEC2ContainerServiceforEC2Role权限的IAM实例配置文件 - 实例注册到集群有两种实现方式:
- 方式1:在实例的
UserData中注入集群注册配置,实例启动后会自动完成注册,配置示例如下(需要base64编码后传入参数):#!/bin/bash echo ECS_CLUSTER=你的ECS集群名称 >> /etc/ecs/ecs.config systemctl restart ecs.service - 方式2:实例创建完成后,主动调用ECS SDK的
RegisterContainerInstance接口,传入集群名称、EC2实例ID等参数手动完成注册,适合批量实例操作场景
- 方式1:在实例的
方案2:基于启动模板+ECS容量提供者实现(生产环境推荐)
- 先调用EC2 SDK的
CreateLaunchTemplate接口创建启动模板,提前把所有自定义配置(Spot参数、实例规格、AMI、安全组、集群注册UserData等)预存在模板中 - 调用ECS SDK的
CreateCapacityProvider接口关联上述启动模板,配置自动扩缩容规则后,将容量提供者绑定到你创建的ECS集群 - 后续需要新增实例时,只需要调整容量提供者的目标容量,ECS会自动按照模板配置创建符合要求的实例,并自动注册到集群,无需手动处理实例创建和注册流程
PHP SDK关键代码示例
// 初始化EC2客户端 $ec2Client = new Aws\Ec2\Ec2Client([ 'region' => 'ap-northeast-1', 'version' => '2016-11-15' ]); // 创建带Spot配置的EC2实例 $result = $ec2Client->runInstances([ 'ImageId' => 'ami-xxxxxx', // 对应区域的ECS优化AMI ID 'InstanceType' => 't3.large', 'MinCount' => 1, 'MaxCount' => 1, 'IamInstanceProfile' => [ 'Name' => 'ecsInstanceRole-profile' // 提前创建的ECS实例角色对应的实例配置文件 ], 'UserData' => base64_encode("#!/bin/bash\necho ECS_CLUSTER=my-test-cluster >> /etc/ecs/ecs.config"), // Spot竞价配置 'InstanceMarketOptions' => [ 'MarketType' => 'spot', 'SpotOptions' => [ 'MaxPrice' => '0.08', // 自定义最高出价 'SpotInstanceType' => 'one-time', 'InterruptionBehavior' => 'terminate' ] ] ]);
内容的提问来源于stack exchange,提问作者EastsideDev
相关产品推荐
相关产品推荐

