ALIYUN::ECS::Instance类型用于创建ECS实例。
本资源已停止迭代更新,建议您使用 ALIYUN::ECS::InstanceGroup 资源。
语法
{
"Type": "ALIYUN::ECS::Instance",
"Properties": {
"DedicatedHostId": String,
"Period": Number,
"AutoRenew": String,
"RamRoleName": String,
"IoOptimized": String,
"InternetChargeType": String,
"PrivateIpAddress": String,
"KeyPairName": String,
"SystemDiskDiskName": String,
"PeriodUnit": String,
"Description": String,
"Tags": List,
"HostName": String,
"AutoRenewPeriod": Number,
"ImageId": String,
"ResourceGroupId": String,
"InstanceChargeType": String,
"VSwitchId": String,
"Password": String,
"PasswordInherit": Boolean,
"InstanceType": String,
"SystemDiskCategory": String,
"UserData": String,
"SystemDiskSize": Number,
"ZoneId": String,
"InternetMaxBandwidthOut": Integer,
"VpcId": String,
"SpotStrategy": String,
"InstanceName": String,
"DeletionProtection": Boolean,
"DeploymentSetId": String,
"SecurityGroupIds": List,
"SecurityGroupId": String,
"SecurityEnhancementStrategy": String,
"SpotPriceLimit": String,
"HpcClusterId": String,
"AllocatePublicIP": Boolean,
"SystemDiskDescription": String,
"SystemDiskPerformanceLevel": String,
"DiskMappings": List,
"SpotInterruptionBehavior": String,
"ZoneIds": List,
"SpotDuration": Integer,
"CreditSpecification": String,
"PrivatePoolOptions": Map,
"StorageSetId": String,
"HttpTokens": String,
"HttpEndpoint": String,
"Tenancy": String,
"StorageSetPartitionNumber": Integer,
"DeploymentSetGroupNo": Integer,
"Affinity": String,
"UseAdditionalService": Boolean,
"ImageFamily": String
}
}
属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
ResourceGroupId | String | 否 | 是 | 资源组ID。 | 无 |
SpotInterruptionBehavior | String | 否 | 否 | 抢占实例中断模式。 | 目前仅支持Terminate(默认)直接释放实例。 |
ZoneIds | List | 否 | 否 | 可用区列表。 | 仅在控制台选取参数时生效。 |
SpotDuration | Integer | 否 | 否 | 抢占式实例的保留时长。 | 取值范围:0~6。 单位:小时。
|
SecurityGroupIds | List | 否 | 否 | 安全组ID列表。 | SecurityGroupId和SecurityGroupIds仅能指定其中一个。 |
ImageId | String | 否 | 是 | 镜像ID。包括公共镜像、自定义镜像和云市场镜像。 | 支持通过模糊的方式指定公共镜像ID,无需指定一个完整的公共镜像ID。例如:
|
InstanceType | String | 是 | 是 | ECS实例规格。 | 关于ECS实例规格的更多信息,请参见实例规格族。 |
SecurityGroupId | String | 否 | 否 | 安全组ID。 | SecurityGroupId和SecurityGroupIds仅能指定其中一个。 |
SecurityEnhancementStrategy | String | 否 | 否 | 是否开启安全加固。 | 取值:
|
Description | String | 否 | 是 | 描述信息。 | 长度为2~256个字符。 |
InstanceName | String | 否 | 是 | 实例名称。 | 长度为2~128个字符。必须以英文字母或汉字开头,不能以 如果没有指定该属性,默认值为实例的InstanceId。 |
Password | String | 否 | 是 | ECS实例登录密码。 | 长度为8~30个字符。必须同时包含大写英文字母、小写英文字母、数字和特殊字符中至少三种,支持特殊字符: |
PasswordInherit | Boolean | 否 | 否 | 是否使用镜像预设的密码。 | 取值:
说明 使用该属性时,Password必须为空,同时您需要确保使用的镜像已经设置了密码。 |
HostName | String | 否 | 是 | 云服务器的主机名。 | 最小长度为2个字符。半角句号(.)和短划线(-)不能作为主机名的首尾字符,且不能连续使用。
|
AllocatePublicIP | Boolean | 否 | 否 | 是否分配公网IP。 | 取值:
说明 如果InternetMaxBandwidthOut取值大于0,则会分配公网IP。 |
PrivateIpAddress | String | 否 | 否 | 在专有网络环境下,指定的内网IP。 | IP地址不能与专有网络下的其它实例重复。 |
InternetChargeType | String | 否 | 是 | 访问公网计费方式。 | 取值:
|
InternetMaxBandwidthOut | Integer | 否 | 是 | 公网出带宽最大值。 | 取值范围:0~100。 默认值:0。 单位:Mbps。 |
IoOptimized | String | 否 | 否 | 是否创建I/O优化实例。 | 取值:
|
DiskMappings | List | 否 | 是 | 需要挂载的数据盘。 | 最多支持16块数据盘。 更多信息,请参见DiskMappings语法和DiskMappings属性。 |
SystemDiskCategory | String | 否 | 是 | 系统盘类型。 | 取值:
已停售的实例规格且非I/O优化实例默认值为cloud,否则默认值为cloud_efficiency。 |
SystemDiskDescription | String | 否 | 否 | 系统盘描述信息。 | 无 |
SystemDiskDiskName | String | 否 | 否 | 系统盘名称。 | 长度为2~128个字符。必须以英文字母或汉字开头,不能以 |
SystemDiskSize | Number | 否 | 是 | 系统盘大小。 | 取值范围:20~500。 单位:GB。 如果使用自定义镜像创建系统盘,需要保证系统盘大于自定义镜像大小。 |
Tags | List | 否 | 是 | 用户自定义标签。 | 最多支持20个标签,格式: |
UserData | String | 否 | 是 | 创建ECS实例时传递的用户数据。 | 内容需要限制在16 KB以内,不需要使用Base64转码,特殊字符需要使用反斜线(\)转义。 |
ZoneId | String | 否 | 否 | 可用区ID。 | 无 |
HpcClusterId | String | 否 | 否 | 实例所属的HPC集群ID。 | 无 |
VpcId | String | 否 | 否 | 专有网络ID。 | 无 |
VSwitchId | String | 否 | 否 | 交换机ID。 | 无 |
InstanceChargeType | String | 否 | 否 | ECS实例付费类型。 | 取值:
|
Period | Number | 否 | 否 | 付费周期。 | 当InstanceChargeType取值为PrePaid时,Period为必选属性;当InstanceChargeType取值为PostPaid时,Period为可选属性。 |
KeyPairName | String | 否 | 是 | ECS实例绑定的密钥对名称。 | 当实例类型为Windows时,请忽略该属性;当实例类型为Linux时,密码登录方式会被初始化为禁止。为提高实例安全性,建议您使用密钥对的连接方式。 |
RamRoleName | String | 否 | 否 | 实例RAM角色名称。 | 更多信息,请参见CreateRole和ListRoles。 |
SpotPriceLimit | String | 否 | 否 | 实例的每小时最高价格。 | 支持最多3位小数。当SpotStrategy取值为SpotWithPriceLimit时,该属性生效。 |
SpotStrategy | String | 否 | 否 | 按量付费实例的竞价策略。 | 当InstanceChargeType取值为PostPaid时,SpotStrategy为必选属性。 取值:
|
DedicatedHostId | String | 否 | 否 | ECS实例创建指定专有宿主机上。 | 您可以通过调用DescribeDedicatedHosts接口查询专有宿主机ID列表 。由于专有宿主机不支持创建抢占式实例,指定DedicatedHostId后,请求中的SpotStrategy和SpotPriceLimit设置将被自动忽略。 |
PeriodUnit | String | 否 | 否 | 购买资源的时长。 | 取值:
|
AutoRenewPeriod | Number | 否 | 否 | 每次自动续费的时长。 | 当AutoRenew取值为True时,AutoRenewPeriod为必选属性。 取值:
|
AutoRenew | String | 否 | 否 | 是否自动续费。 | 取值:
当InstanceChargeType取值PrePaid时,AutoRenew为必选属性。 |
DeletionProtection | Boolean | 否 | 是 | 实例释放保护属性,指定是否支持通过控制台或DeleteInstance接口释放实例。 | 取值:
说明 该属性仅适用于按量付费实例,且只能限制手动释放操作,对系统释放操作不生效。 |
DeploymentSetId | String | 否 | 否 | 部署集ID。 | 无 |
SystemDiskPerformanceLevel | String | 否 | 是 | 创建ESSD云盘作为系统盘使用时,设置云盘的性能等级。 | 取值:
关于如何选择ESSD性能等级,请参见ESSD云盘。 |
CreditSpecification
| String | 否 | 是 | 设置突发性能实例的运行模式。 | 取值: |
PrivatePoolOptions | Map | 否 | 否 | 实例启动的私有池容量选项。 | 更多信息,请参考PrivatePoolOptions属性。 |
StorageSetId | String | 否 | 否 | 存储集ID。 | 无 |
HttpTokens | String | 否 | 是 | 访问实例元数据时是否强制使用加固模式(IMDSv2)。 | 取值:
说明 有关访问实例元数据的模式,请参见实例元数据访问模式。 |
HttpEndpoint | String | 否 | 是 | 是否启用实例元数据的访问通道。 | 取值范围:
说明 有关实例元数据的信息,请参见ECS实例元数据概述。 |
Tenancy | String | 否 | 否 | 是否在专有宿主机上创建实例。 | 取值:
|
StorageSetPartitionNumber | Integer | 否 | 否 | 存储集中的最大分区数量。 | 取值范围:大于等于2。 |
DeploymentSetGroupNo | Integer | 否 | 否 | 如果您设置的部署集对应的策略为部署集组高可用策略(AvailabilityGroup),可以通过该参数指定实例在部署集中的分组号。 | 取值范围:1~7。 |
Affinity | String | 否 | 否 | 专有宿主机实例是否与专有宿主机关联。 | 取值:
|
UseAdditionalService | Boolean | 否 | 否 | 是否使用阿里云提供的虚拟机系统配置(Windows:NTP、KMS;Linux:NTP、YUM)。 | 取值:
|
ImageFamily | String | 否 | 否 | 镜像族系名称。 | 通过设置该参数来获取当前镜像族系内最新可用镜像来创建实例。
说明 阿里云官方镜像关联的镜像族系信息请参见公共镜像概述。 |
DiskMappings语法
"DiskMappings": [
{
"Category": String,
"DiskName": String,
"Description": String,
"Device": String,
"SnapshotId": String,
"PerformanceLevel": String,
"Size": String
}
]
DiskMappings属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
Size | String | 是 | 否 | 数据盘大小。 | 取值范围:20~500。 单位:GB。 |
Category | String | 否 | 否 | 数据盘类型。 | 取值:
I/O优化实例的默认值为cloud_efficiency,非I/O优化实例的默认值为cloud。 如果自定义镜像已包含了一个数据盘,那么创建ECS实例时,若要在ROS模板中指定数据盘类型,可以将Category指定为需要的数据盘类型。例如:
|
DiskName | String | 否 | 否 | 数据盘名称。 | 长度为2~128个字符。必须以英文字母或汉字开头,不能以 |
Description | String | 否 | 否 | 描述信息。 | 长度为2~256个字符,不能以 |
Device | String | 否 | 否 | 挂载点。 | 无 |
PerformanceLevel | String | 否 | 否 | 创建ESSD云盘作为数据盘使用时,设置云盘的性能等级。 | 取值:
关于如何选择ESSD性能等级,请参见ESSD云盘。 |
SnapshotId | String | 否 | 否 | 数据盘使用的快照ID。 | 无 |
Tags语法
"Tags": [
{
"Value": String,
"Key": String
}
]
Tags属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
Key | String | 是 | 否 | 标签键。 | 长度为1~128个字符,不能以 |
Value | String | 否 | 否 | 标签值。 | 长度为0~128个字符,不能以 |
PrivatePoolOptions语法
"PrivatePoolOptions": [
{
"Id": String,
"MatchCriteria": String
}
]
PrivatePoolOptions属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
Id | String | 否 | 否 | 私有池ID。即弹性保障服务ID或容量预定服务ID。 | 无 |
MatchCriteria | String | 否 | 否 | 弹性保障服务或容量预定服务在生效后会生成私有池容量,供实例启动时选择。 | 取值:
以下任一场景,实例启动的私有池容量选项只能取值
|
返回值
Fn::GetAtt
InstanceId:实例ID。由系统生成,实例的全局唯一标识。
PrivateIp:VPC类型实例的私网IP地址。
InnerIp:Classic类型实例的内网IP地址。
PublicIp:Classic类型实例的公网IP地址。
ZoneId:可用区ID。
HostName:云服务器的主机名。
PrimaryNetworkInterfaceId:主网卡ID。
SecurityGroupIds:已创建实例的安全组ID列表。
示例
创建两台ECS实例(OpsEcsInstance、ProdEcsInstance),并为ProdEcsInstance实例完成OpsEcsInstance免密登录操作。
如果您需要对ECS实例的Userdata脚本执行结果进行消息通知。更多信息,请参见ALIYUN::ROS::WaitConditionHandle和ALIYUN::ROS::WaitCondition。
ROSTemplateFormatVersion: '2015-09-01'
Description: Creates VPC ECS instance
Metadata: {}
Parameters:
VpcId:
AssociationProperty: ALIYUN::ECS::VPC::VPCId
Type: String
Description:
en: Please search the ID starting with (vpc-xxx) from console-Virtual Private Cloud
zh-cn: 现有专有网络的实例ID
Label:
en: VPC ID
zh-cn: 专有网络VPC实例ID
VSwitchZoneId:
AssociationProperty: ALIYUN::ECS::Instance:ZoneId
Type: String
Description:
zh-cn: 可用区ID。<br><b>注: <font color='blue'>选择前请确认该可用区是否支持创建ECS资源的规格,建议与其他交换机可用区不同</font></b>
en: Availability Zone ID.<br><b>note:<font color='blue'>before selecting, please confirm that the Availability Zone supports the specification of creating ECS resources,which is recommended to be different from other VSwitch Availability Zone</font></b>
Label:
zh-cn: 交换机可用区
en: VSwitch Availability Zone
VSwitchId:
AssociationProperty: ALIYUN::ECS::VSwitch::VSwitchId
AssociationPropertyMetadata:
VpcId: ${VpcId}
ZoneId: ${VSwitchZoneId}
Type: String
Description:
en: Instance ID of existing business network switches, console-Virtual Private Cloud-VSwitches under query
zh-cn: 现有业务网络交换机的实例ID
Label:
en: VSwitch ID
zh-cn: 交换机实例ID
SecurityGroupId:
Type: String
AssociationProperty: ALIYUN::ECS::SecurityGroup::SecurityGroupId
AssociationPropertyMetadata:
VpcId: ${VpcId}
Description:
en: Please search the business security group ID starting with(sg-xxx)from console-ECS-Network & Security
zh-cn: 现有业务安全组的实例ID
Label:
en: Business Security Group ID
zh-cn: 业务安全组ID
InstanceType:
Type: String
Description:
zh-cn: 填写VSwitch可用区下可使用的规格。
en: Fill in the specifications that can be used under the VSwitch availability zone.
Label:
zh-cn: 实例规格
en: Instance Type
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
ZoneId: ${VSwitchZoneId}
SystemDiskCategory:
Type: String
AssociationProperty: ALIYUN::ECS::Disk::SystemDiskCategory
AssociationPropertyMetadata:
ZoneId: ${VSwitchZoneId}
InstanceType: ${InstanceType}
Label:
en: System Disk Type
zh-cn: 系统盘类型
Description:
en: '<font color=''blue''><b>Optional values:</b></font><br>[cloud_efficiency: <font color=''green''>Efficient Cloud Disk</font>]<br>[cloud_ssd: <font color=''green''>SSD Cloud Disk</font>]<br>[cloud_essd: <font color=''green''>ESSD Cloud Disk</font>]<br>[cloud: <font color=''green''>Cloud Disk</font>]<br>[ephemeral_ssd: <font color=''green''>Local SSD Cloud Disk</font>]'
zh-cn: '<font color=''blue''><b>可选值:</b></font><br>[cloud_efficiency: <font color=''green''>高效云盘</font>]<br>[cloud_ssd: <font color=''green''>SSD云盘</font>]<br>[cloud_essd: <font color=''green''>ESSD云盘</font>]<br>[cloud: <font color=''green''>普通云盘</font>]<br>[ephemeral_ssd: <font color=''green''>本地SSD盘</font>]'
SystemDiskSize:
Default: 40
Type: Number
Description:
zh-cn: 系统盘大小, 取值范围:[40, 500], 单位:GB。
en: 'System disk size, range of values: 40-500, units: GB.'
Label:
zh-cn: 系统盘空间
en: System Disk Space
Resources:
OpsEcsInstance:
Type: ALIYUN::ECS::Instance
Properties:
HostName: OpsEcsInstance
UserData:
Fn::Sub:
- |
#!/bin/bash
RootPassword=${RootPassword}
ProdIP=${ProdIP}
SSHConfig() {
echo '[ ! -f /root/.ssh/id_rsa.pub ] && ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa &>/dev/null' >> /tmp/auto_ssh.sh
echo 'while read line;do' >> /tmp/auto_ssh.sh
echo ' ip=`echo $line | cut -d " " -f1`' >> /tmp/auto_ssh.sh
echo ' user_name=`echo $line | cut -d " " -f2`' >> /tmp/auto_ssh.sh
echo ' pass_word=`echo $line | cut -d " " -f3`' >> /tmp/auto_ssh.sh
echo 'expect <<EOF' >> /tmp/auto_ssh.sh
echo ' spawn ssh-copy-id -i /root/.ssh/id_rsa.pub $user_name@$ip' >> /tmp/auto_ssh.sh
echo ' expect {' >> /tmp/auto_ssh.sh
echo ' "yes/no" { send "yes\n";exp_continue}' >> /tmp/auto_ssh.sh
echo ' "password" { send "$pass_word\n"}' >> /tmp/auto_ssh.sh
echo ' }' >> /tmp/auto_ssh.sh
echo ' expect eof' >> /tmp/auto_ssh.sh
echo 'EOF' >> /tmp/auto_ssh.sh
echo 'done < /tmp/host_ip.txt' >> /tmp/auto_ssh.sh
}
SetHostsConfig() {
echo "`ifconfig eth0 | awk '/inet /{print $2}'` root ${RootPassword}" >> /tmp/host_ip.txt
echo "${ProdIP} root ${RootPassword}" >> /tmp/host_ip.txt
sh /tmp/auto_ssh.sh
}
main() {
yum install -y expect
SSHConfig
SetHostsConfig
rm -rf /tmp/host_ip.txt
}
main
- ProdIP:
Fn::GetAtt:
- ProdEcsInstance
- PrivateIp
RootPassword: Admin@123!
VpcId:
Ref: VpcId
SecurityGroupId:
Ref: SecurityGroupId
VSwitchId:
Ref: VSwitchId
ImageId: centos_7
AllocatePublicIP: false
InstanceType:
Ref: InstanceType
SystemDiskSize: 40
SystemDiskCategory:
Ref: SystemDiskCategory
Password: Admin@123!
ProdEcsInstance:
Type: ALIYUN::ECS::Instance
Properties:
HostName: ProdEcsInstance
SystemDiskCategory:
Ref: SystemDiskCategory
VpcId:
Ref: VpcId
SecurityGroupId:
Ref: SecurityGroupId
SystemDiskSize: 40
ImageId: centos_7
VSwitchId:
Ref: VSwitchId
Password: Admin@123!
InstanceType:
Ref: InstanceType
AllocatePublicIP: false
Outputs: {}
{
"ROSTemplateFormatVersion": "2015-09-01",
"Description": "Creates VPC ECS instance",
"Metadata": {},
"Parameters": {
"VpcId": {
"AssociationProperty": "ALIYUN::ECS::VPC::VPCId",
"Type": "String",
"Description": {
"en": "Please search the ID starting with (vpc-xxx) from console-Virtual Private Cloud",
"zh-cn": "现有专有网络的实例ID"
},
"Label": {
"en": "VPC ID",
"zh-cn": "专有网络VPC实例ID"
}
},
"VSwitchZoneId": {
"AssociationProperty": "ALIYUN::ECS::Instance:ZoneId",
"Type": "String",
"Description": {
"zh-cn": "可用区ID。<br><b>注: <font color='blue'>选择前请确认该可用区是否支持创建ECS资源的规格,建议与其他交换机可用区不同</font></b>",
"en": "Availability Zone ID.<br><b>note:<font color='blue'>before selecting, please confirm that the Availability Zone supports the specification of creating ECS resources,which is recommended to be different from other VSwitch Availability Zone</font></b>"
},
"Label": {
"zh-cn": "交换机可用区",
"en": "VSwitch Availability Zone"
}
},
"VSwitchId": {
"AssociationProperty": "ALIYUN::ECS::VSwitch::VSwitchId",
"AssociationPropertyMetadata": {
"VpcId": "${VpcId}",
"ZoneId": "${VSwitchZoneId}"
},
"Type": "String",
"Description": {
"en": "Instance ID of existing business network switches, console-Virtual Private Cloud-VSwitches under query",
"zh-cn": "现有业务网络交换机的实例ID"
},
"Label": {
"en": "VSwitch ID",
"zh-cn": "交换机实例ID"
}
},
"SecurityGroupId": {
"Type": "String",
"AssociationProperty": "ALIYUN::ECS::SecurityGroup::SecurityGroupId",
"AssociationPropertyMetadata": {
"VpcId": "${VpcId}"
},
"Description": {
"en": "Please search the business security group ID starting with(sg-xxx)from console-ECS-Network & Security",
"zh-cn": "现有业务安全组的实例ID"
},
"Label": {
"en": "Business Security Group ID",
"zh-cn": "业务安全组ID"
}
},
"InstanceType": {
"Type": "String",
"Description": {
"zh-cn": "填写VSwitch可用区下可使用的规格。",
"en": "Fill in the specifications that can be used under the VSwitch availability zone."
},
"Label": {
"zh-cn": "实例规格",
"en": "Instance Type"
},
"AssociationProperty": "ALIYUN::ECS::Instance::InstanceType",
"AssociationPropertyMetadata": {
"ZoneId": "${VSwitchZoneId}"
}
},
"SystemDiskCategory": {
"Type": "String",
"AssociationProperty": "ALIYUN::ECS::Disk::SystemDiskCategory",
"AssociationPropertyMetadata": {
"ZoneId": "${VSwitchZoneId}",
"InstanceType": "${InstanceType}"
},
"Label": {
"en": "System Disk Type",
"zh-cn": "系统盘类型"
},
"Description": {
"en": "<font color='blue'><b>Optional values:</b></font><br>[cloud_efficiency: <font color='green'>Efficient Cloud Disk</font>]<br>[cloud_ssd: <font color='green'>SSD Cloud Disk</font>]<br>[cloud_essd: <font color='green'>ESSD Cloud Disk</font>]<br>[cloud: <font color='green'>Cloud Disk</font>]<br>[ephemeral_ssd: <font color='green'>Local SSD Cloud Disk</font>]",
"zh-cn": "<font color='blue'><b>可选值:</b></font><br>[cloud_efficiency: <font color='green'>高效云盘</font>]<br>[cloud_ssd: <font color='green'>SSD云盘</font>]<br>[cloud_essd: <font color='green'>ESSD云盘</font>]<br>[cloud: <font color='green'>普通云盘</font>]<br>[ephemeral_ssd: <font color='green'>本地SSD盘</font>]"
}
},
"SystemDiskSize": {
"Default": 40,
"Type": "Number",
"Description": {
"zh-cn": "系统盘大小, 取值范围:[40, 500], 单位:GB。",
"en": "System disk size, range of values: 40-500, units: GB."
},
"Label": {
"zh-cn": "系统盘空间",
"en": "System Disk Space"
}
}
},
"Resources": {
"OpsEcsInstance": {
"Type": "ALIYUN::ECS::Instance",
"Properties": {
"HostName": "OpsEcsInstance",
"UserData": {
"Fn::Sub": [
"#!/bin/bash\nRootPassword=${RootPassword}\nProdIP=${ProdIP}\nSSHConfig() {\necho '[ ! -f /root/.ssh/id_rsa.pub ] && ssh-keygen -t rsa -P \"\" -f ~/.ssh/id_rsa &>/dev/null' >> /tmp/auto_ssh.sh\necho 'while read line;do' >> /tmp/auto_ssh.sh\necho ' ip=`echo $line | cut -d \" \" -f1`' >> /tmp/auto_ssh.sh\necho ' user_name=`echo $line | cut -d \" \" -f2`' >> /tmp/auto_ssh.sh\necho ' pass_word=`echo $line | cut -d \" \" -f3`' >> /tmp/auto_ssh.sh\necho 'expect <<EOF' >> /tmp/auto_ssh.sh\necho ' spawn ssh-copy-id -i /root/.ssh/id_rsa.pub $user_name@$ip' >> /tmp/auto_ssh.sh\necho ' expect {' >> /tmp/auto_ssh.sh\necho ' \"yes/no\" { send \"yes\\n\";exp_continue}' >> /tmp/auto_ssh.sh\necho ' \"password\" { send \"$pass_word\\n\"}' >> /tmp/auto_ssh.sh\necho ' }' >> /tmp/auto_ssh.sh\necho ' expect eof' >> /tmp/auto_ssh.sh\necho 'EOF' >> /tmp/auto_ssh.sh\necho 'done < /tmp/host_ip.txt' >> /tmp/auto_ssh.sh\n}\nSetHostsConfig() {\necho \"`ifconfig eth0 | awk '/inet /{print $2}'` root ${RootPassword}\" >> /tmp/host_ip.txt\necho \"${ProdIP} root ${RootPassword}\" >> /tmp/host_ip.txt\nsh /tmp/auto_ssh.sh\n}\nmain() {\nyum install -y expect\nSSHConfig\nSetHostsConfig\nrm -rf /tmp/host_ip.txt\n}\nmain\n",
{
"ProdIP": {
"Fn::GetAtt": [
"ProdEcsInstance",
"PrivateIp"
]
},
"RootPassword": "Admin@123!"
}
]
},
"VpcId": {
"Ref": "VpcId"
},
"SecurityGroupId": {
"Ref": "SecurityGroupId"
},
"VSwitchId": {
"Ref": "VSwitchId"
},
"ImageId": "centos_7",
"AllocatePublicIP": false,
"InstanceType": {
"Ref": "InstanceType"
},
"SystemDiskSize": 40,
"SystemDiskCategory": {
"Ref": "SystemDiskCategory"
},
"Password": "Admin@123!"
}
},
"ProdEcsInstance": {
"Type": "ALIYUN::ECS::Instance",
"Properties": {
"HostName": "ProdEcsInstance",
"SystemDiskCategory": {
"Ref": "SystemDiskCategory"
},
"VpcId": {
"Ref": "VpcId"
},
"SecurityGroupId": {
"Ref": "SecurityGroupId"
},
"SystemDiskSize": 40,
"ImageId": "centos_7",
"VSwitchId": {
"Ref": "VSwitchId"
},
"Password": "Admin@123!",
"InstanceType": {
"Ref": "InstanceType"
},
"AllocatePublicIP": false
}
}
},
"Outputs": {}
}