3 votes

La propriété DeviceIndex ne peut pas être vide dans CloudFormation

Je suis très novice en matière de CloudFormation et j'essaie de m'y retrouver. Dans le cadre de ce processus d'apprentissage, j'essaie de construire un modèle pour créer un VPC, un sous-réseau et déployer une instance publique. Voici le code que j'ai fait dans la fenêtre CF Design. Bien que mon code soit valide, j'obtiens une erreur du type : "erreur de construction".

CREATE_FAILED   AWS::EC2::Instance  AR3Web  Property DeviceIndex cannot be empty.
ROLLBACK_IN_PROGRESS    AWS::CloudFormation::Stack  Intro   The following resource(s) failed to create:[IgwAttachment, AR3Web]. . Rollback requested by user. 

Je règle DeviceIndex : '0' dans mon code. Quelqu'un peut-il m'aider à comprendre où je me trompe ?

Merci d'avance pour votre aide.

Mon code

---
AWSTemplateFormatVersion: 2010-09-09
Description: Test Stack
Resources:
  AR3VPC:
    Type: 'AWS::EC2::VPC'
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsSupport: 'true'
      EnableDnsHostnames: 'true'
      InstanceTenancy: default
      Tags:
        - Key: Name
          Value: AR3VPC
    Metadata:
      'AWS::CloudFormation::Designer':
        id: baa1b4d4-07ea-4095-b4a4-4925e7c68052
  PublicSubnet1:
    Type: 'AWS::EC2::Subnet'
    Properties:
      VpcId: !Ref AR3VPC
      CidrBlock: 10.0.1.0/24
      MapPublicIpOnLaunch: 'true'
      AvailabilityZone: us-east-1a
    Metadata:
      'AWS::CloudFormation::Designer':
        id: 24f10588-e12e-45bf-a270-c844afa4d9a7
  AR3Web:
    Type: 'AWS::EC2::Instance'
    Properties:
      ImageId: 'ami-a4c7edb2'
      InstanceType: 't2.micro'
      KeyName: virginiakp
      NetworkInterfaces:
        - GroupSet:
            - !Ref AR3WebSG
          AssociatePublicIpAddress: 'true'
          DeviceIndex: '0'
          DeleteOnTermination: 'true'
        - SubnetId: !Ref PublicSubnet1
    Metadata:
      'AWS::CloudFormation::Designer':
        id: 6080a1d9-2670-48db-abf8-a7a3ac597f2e
  AR3WebSG:
    Type: 'AWS::EC2::SecurityGroup'
    Properties:
      GroupDescription: Allow HTTP access
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: 0.0.0.0/0
      VpcId: !Ref AR3VPC
      Tags:
        - Key: Name
          Value: AR3WebSecurityGroup
    Metadata:
      'AWS::CloudFormation::Designer':
        id: 2870d531-f538-4bee-8a03-393012432b71
  AR3IGW:
    Type: 'AWS::EC2::InternetGateway'
    Properties:
      Tags:
        - Key: Name
          Value: AR3 IGW
    Metadata:
      'AWS::CloudFormation::Designer':
        id: c2557116-9cd5-4826-9932-656e90b271a1
  AR3Rt:
    Type: 'AWS::EC2::RouteTable'
    Properties:
      VpcId: !Ref AR3VPC
    Metadata:
      'AWS::CloudFormation::Designer':
        id: e9f2dfcc-e65b-49c5-8a21-66dd3b012549
  PubRt:
    Type: 'AWS::EC2::Route'
    DependsOn: IgwAttachment
    Properties:
      RouteTableId: !Ref AR3Rt
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId: !Ref AR3IGW
    Metadata:
      'AWS::CloudFormation::Designer':
        id: 37bac7d1-69ee-4c1c-9a8d-8940e586b590
  IgwAttachment:
    Type: 'AWS::EC2::VPCGatewayAttachment'
    Properties:
      InternetGatewayId: !Ref AR3IGW
      VpcId: !Ref AR3VPC
    Metadata:
      'AWS::CloudFormation::Designer':
        id: 72d68293-8163-4372-a771-1f4a4062d6dd
  PublicSubnetRouteTableAssociation:
    Type: 'AWS::EC2::SubnetRouteTableAssociation'
    Properties:
      SubnetId: !Ref PublicSubnet1
      RouteTableId: !Ref AR3Rt
    Metadata:
      'AWS::CloudFormation::Designer':
        id: 7e429e8b-2fb5-49de-a383-60ec910ed505

3voto

Alex Harvey Points 3315

Vous voyez ce message parce que vous avez une faute de frappe dans votre tableau d'interfaces réseau. Vous avez :

NetworkInterfaces:
  - GroupSet:
      - !Ref AR3WebSG
    AssociatePublicIpAddress: 'true'
    DeviceIndex: '0'
    DeleteOnTermination: 'true'
  - SubnetId: !Ref PublicSubnet1

Le tiret à côté de SubnetId semble être une faute de frappe, mais dans le YAML, il désigne un nouvel élément dans le tableau de NetworkInterfaces. Ainsi, alors que le premier élément a DeviceIndex : 0, le deuxième élément n'a pas de DeviceIndex, et c'est pourquoi vous recevez ce message.

Changez-le en :

NetworkInterfaces:
  - GroupSet:
      - !Ref AR3WebSG
    AssociatePublicIpAddress: 'true'
    DeviceIndex: '0'
    DeleteOnTermination: 'true'
    SubnetId: !Ref PublicSubnet1

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X