Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 仅使用cloudformation在默认公共子网中创建EC2_Amazon Web Services_Amazon Cloudformation_Subnet - Fatal编程技术网

Amazon web services 仅使用cloudformation在默认公共子网中创建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

我有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 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内的随机子网。一个选项是添加一个
参数
,要求用户提供一个子网。这样,您不需要将其硬编码到模板中,但可以在创建堆栈时用户指定的子网中专门启动实例。