ALIYUN::ECS::Instance類型用于創建ECS實例。
語法
{
"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": {} }