compute-nest-best-practice/managed-reverse-vpc-connection/template.yaml (202 lines of code) (raw):
ROSTemplateFormatVersion: '2015-09-01'
Description:
zh-cn: 创建托管VPC环境,配置私网反向访问,包括ECS实例、NatIp及安全设置,支持多域名映射,优化实例部署与访问控制。
en: Establish a managed VPC environment, configure private network reverse access,
encompassing ECS instances, Nat IPs, and security settings, facilitating multi-domain
mapping, and optimizing instance deployment alongside access control mechanisms.
Parameters:
# 用户服务信息列表,包括用户服务域名、用户服务IP和用户服务端口
VpcReverseParameters:
Type: Json
AssociationProperty: List[Parameters]
Default: []
AssociationPropertyMetadata:
Parameters:
AccessDomain:
Type: String
Label:
zh-cn: 用户服务域名
AccessIp:
Type: String
Label:
zh-cn: 用户服务IP
AccessPort:
Type: String
Label:
zh-cn: 用户服务端口
# 可用区
ZoneId:
Type: String
AssociationPropertyMetadata:
ComputeNestNetworkConfigZone: true
Description:
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</font></b>
zh-cn: 可用区ID
Label:
en: VSwitch Available Zone
zh-cn: 可用区
# 数据盘类型
DataDiskCategory:
Type: String
AllowedValues:
- cloud_efficiency
- cloud_ssd
- cloud_essd
Default: cloud_efficiency
Label:
en: Disk Type
zh-cn: 数据盘类型
# 数据盘空间
DataDiskSize:
Type: Number
Label:
en: Data Disk Space
zh-cn: 数据盘空间
MinValue: 20
MaxValue: 500
Default: 40
# 专有网络VPC实例ID
VpcId:
AssociationProperty: ALIYUN::ECS::VPC::VPCId
Type: String
Label:
en: VPC ID
zh-cn: 专有网络VPC实例ID
# 安全组ID
SecurityGroupId:
AssociationPropertyMetadata:
VpcId: VpcId
Default: sg-2zeip0loevltubwfzrtm
Label:
zh-cn: 安全组ID
en: Security Group ID
AssociationProperty: ALIYUN::ECS::SecurityGroup::SecurityGroupId
Type: String
# 交换机实例ID
VSwitchId:
AssociationProperty: ALIYUN::ECS::VSwitch::VSwitchId
AssociationPropertyMetadata:
VpcId: ${VpcId}
ZoneId: ${ZoneId}
Type: String
Label:
en: VSwitch ID
zh-cn: 交换机实例ID
# Ecs实例类型
EcsInstanceType:
Type: String
Label:
en: Instance Type
zh-cn: 实例类型
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
# FullNat表ID,可在VPC NAT网关页面查询
FullNatTableId:
Type: String
AssociationProperty: ALIYUN::VPC::NatGateway::ForwardTableId
# Nat网关ID,可在VPC NAT网关页面查询
NatGatewayId:
Type: String
AssociationProperty: ALIYUN::VPC::NatGateway::NatGatewayId
# NatIp网段
NatIpCidr:
Type: String
Resources:
WaitConditionHandle:
Type: ALIYUN::ROS::WaitConditionHandle
WaitCondition:
Type: ALIYUN::ROS::WaitCondition
Properties:
Count: 1
Handle:
Ref: WaitConditionHandle
Timeout: 1800
EcsInstanceGroup:
Type: ALIYUN::ECS::InstanceGroup
DependsOn:
- VPCNatIp
Properties:
InstanceName:
Fn::Join:
- '-'
- - Ref: ALIYUN::StackName
- '[1,4]'
IoOptimized: optimized
ZoneId:
Ref: ZoneId
DiskMappings:
- Category:
Ref: DataDiskCategory
Device: /dev/xvdb
Size:
Ref: DataDiskSize
SystemDiskSize: 40
UserData:
Fn::Sub:
- |
#!/bin/sh
# 读取用户传入的域名列表和模板创建的NatIP列表,一一映射到/etc/host文件中
Hosts="${AccessDomains}"
PrivateIps="${NatIp}"
Hosts=(`echo $Hosts | sed 's/\[//g' | sed 's/\]//g' | sed 's/,//g'`)
PrivateIps=(`echo $PrivateIps | sed 's/\[//g' | sed 's/\]//g' | sed 's/,//g'`)
arraylength=${!#Hosts[@]}
for (( i=0; i<$arraylength; i++ ));
do
echo ${!PrivateIps[$i]} ${!Hosts[$i]} >> /etc/hosts
done
${CurlCli} -d "{\"Data\" : \"SUCCESS\", \"Status\" : \"SUCCESS\"}"
- CurlCli:
Fn::GetAtt:
- WaitConditionHandle
- CurlCli
NatIp:
Fn::GetAtt:
- VPCNatIp
- NatIp
AccessDomains:
Fn::SelectMapList:
- AccessDomain
- Ref: VpcReverseParameters
InstanceChargeType: PrePaid
PeriodUnit: Month
Period: 1
SecurityGroupId:
Ref: SecurityGroupId
VSwitchId:
Ref: VSwitchId
MaxAmount: 1
SystemDiskCategory: cloud_efficiency
VpcId:
Ref: VpcId
ImageId: m-2zefr7ixarlg8coevwzl
InstanceType:
Ref: EcsInstanceType
HostName: reverse-vpc
Password: passw0RD
AllocatePublicIP: false
# 创建NatIP,用于跨VPC的转发
VPCNatIp:
Type: ALIYUN::VPC::NatIp
Count:
Fn::Length:
Ref: VpcReverseParameters
Properties:
NatIpCidr:
Ref: NatIpCidr
NatIpDescription: test
NatIpName: test
NatGatewayId:
Ref: NatGatewayId
Outputs:
NatIp:
Value:
Fn::GetAtt:
- VPCNatIp
- NatIp
Metadata:
ALIYUN::ROS::Interface:
ParameterGroups:
- Parameters:
- ZoneId
- InstanceType
- DataDiskCategory
- DataDiskSize
- VpcId
- SecurityGroupId
- VSwitchId
Label:
default:
en: instance
zh-cn: 实例规格
- Parameters:
- VpcReverseParameters
Label:
default:
en: Vpc Reverse Connection
zh-cn: 反向访问参数