Amazon web services 仅使用cloudformation在默认公共子网中创建EC2
我有CF模板,它正在创建EC2机器Amazon web services 仅使用cloudformation在默认公共子网中创建EC2,amazon-web-services,amazon-cloudformation,subnet,Amazon Web Services,Amazon Cloudformation,Subnet,我有CF模板,它正在创建EC2机器 AWSTemplateFormatVersion: 2010-09-09 Mappings: InstanceAMI: # ubuntu 18.04 us-west-2: ami: 'ami-0bbe6b35405ecebdb' us-east-1: ami: 'ami-0ac019f4fcb7cb7e6' Parameters: Endpoint: Type: String # TODO
AWSTemplateFormatVersion: 2010-09-09
Mappings:
InstanceAMI:
# ubuntu 18.04
us-west-2:
ami: 'ami-0bbe6b35405ecebdb'
us-east-1:
ami: 'ami-0ac019f4fcb7cb7e6'
Parameters:
Endpoint:
Type: String
# TODO edit the default value
Description:
Resources:
NodeInstanceProfile:
Type: AWS::IAM::InstanceProfile
Properties:
Path: "/"
Roles:
- !Ref NodeInstanceRole
NodeInstanceRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service:
- ec2.amazonaws.com
Action:
- sts:AssumeRole
Path: "/"
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AdministratorAccess
CdpDeplSvcSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Access Deployment service
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 443
ToPort: 443
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: 8080
ToPort: 8080
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: 0.0.0.0/0
Tags:
- Key: Name
Value: 'Access Deployment'
DeploymentMachine:
Type: AWS::EC2::Instance
Properties:
# AvailabilityZone: us-east-1a
ImageId: !FindInMap [InstanceAMI, !Ref "AWS::Region", ami]
InstanceType: 't2.small'
KeyName: 'key'
Tags:
- Key: Name
Value: 'Deployment'
BlockDeviceMappings:
- DeviceName: "/dev/sda1"
Ebs:
# VolumeType: "io1"
# Iops: "200"
DeleteOnTermination: "true"
VolumeSize: "30"
NetworkInterfaces:
- DeviceIndex: 0
AssociatePublicIpAddress: 'true'
DeleteOnTermination: 'true'
GroupSet:
- !GetAtt CdpDeplSvcSecurityGroup.GroupId
IamInstanceProfile: !Ref NodeInstanceProfile
它执行正确。但我面临的问题是,它有时在默认的私有子网中创建,有时在默认的公共子网中创建。
我只想在默认公共子网中部署此计算机。我不想将VPC id或子网id作为参数传递。为此,我在这里做了一些更改。这将把它放在一个随机子网中-您需要硬编码子网,或者通过一个参数指定子网,然后引用该参数-这可以为您提供一些灵活性,可以根据客户改变子网
可能,在部署堆栈期间,您可以编写部署脚本,使用AWS CLI获取所有公共子网,并将一个作为参数传递到cloudformation堆栈中。这只会将其放入随机子网-您需要硬编码子网,或者通过一个参数指定子网,然后引用该参数-这可以为您提供一些灵活性,可以根据客户更改子网
在堆栈部署期间,您可能需要编写部署脚本,使用AWS CLI获取所有公共子网,并将其中一个作为参数传递到cloudformation堆栈中。是否愿意硬编码子网ID?您必须以某种方式提供它,这里没有魔法。您必须通过提供子网引用甚至可用区域(如果每个子网位于不同的AZ中)来提供您的愿望的一些指示。否则,它将是一个随机分配。为什么不希望将子网ID作为参数传递?@JohnRotenstein and guest有一个用例,我不会询问客户的AWS详细信息。(专有网络ID,子网ID)。在EC2创建期间,它应该自动占用公共子网。在它正常工作之前,突然它开始占用私有子网。那么,它是否可能自动占用公共子网?是的,您没有指定任何内容(VPC,subnet),因此它可能会进入默认VPC内的随机子网。一个选项是添加一个
参数
,要求用户提供一个子网。这样,您不需要将其硬编码到模板中,但可以在创建堆栈时用户指定的子网中专门启动实例。您愿意硬编码子网ID吗?您必须以某种方式提供它,这里没有魔法。您必须通过提供子网引用甚至可用区域(如果每个子网位于不同的AZ中)来提供您的愿望的一些指示。否则,它将是一个随机分配。为什么不希望将子网ID作为参数传递?@JohnRotenstein and guest有一个用例,我不会询问客户的AWS详细信息。(专有网络ID,子网ID)。在EC2创建期间,它应该自动占用公共子网。在它正常工作之前,突然它开始占用私有子网。那么,它是否可能自动占用公共子网?是的,您没有指定任何内容(VPC,subnet),因此它可能会进入默认VPC内的随机子网。一个选项是添加一个参数
,要求用户提供一个子网。这样,您不需要将其硬编码到模板中,但可以在创建堆栈时用户指定的子网中专门启动实例。