Puncte:0

AWS CloudFormation - două interfețe de rețea, una cu EIP

drapel in

Sunt un începător AWS. Încercarea de a crea o instanță EC2 cu două interfețe de rețea, una ar trebui să fie publică și cealaltă privată.

Iată ce am încercat în șablonul meu YAML:

  1. Creați un VPC cu două subrețele
  2. Creați o instanță doar cu interfața de rețea privată
  3. Creați a doua interfață de rețea (publică) ca o altă entitate YAML
  4. Atașați a doua interfață de rețea la instanță
  5. Creați un EIP și asociați-l cu a doua interfață de rețea

Interfața de rețea publică trebuie creată ca o entitate separată pentru că trebuie să o fac !Ref în strofa de asociere EIP.

Proprietăți:
[...]
  Gazdă 1:
    Tip: „AWS::EC2::Instanță”
    Proprietăți:
      ID imagine: „ami-02541b8af977f6cdd” # Amazon Linux x86
      InstanceType: „t2.micro”
      AvailabilityZone: !Selectați [0, !GetAZs '']
      KeyName: !Ref KeyName
      Interfețe de rețea:
      - SubnetId: !Ref SubnetPrivate
        DeleteOnTermination: adevărat
        DeviceIndex: „0”
        GroupSet:
        - !Ref SecurityGroup
      Etichete:
      - Cheie: Nume
        Valoare: „simple - host1”
  Host1Eth1:
    Tip: „AWS::EC2::NetworkInterface”
    Proprietăți:
      SubnetId: !Ref SubnetPublic
      GroupSet:
      - !Ref SecurityGroup
      Etichete:
      - Cheie: Nume
        Valoare: „simple - host1 eth1”
  Host1Eth1Attachment:
    Tip: „AWS::EC2::NetworkInterfaceAttachment”
    Proprietăți:
      DeleteOnTermination: adevărat
      DeviceIndex: 1
      NetworkInterfaceId: !Ref Host1Eth1
      InstanceId: !Ref Host1
  ElasticIP:
    Tip: „AWS::EC2::EIP”
    Proprietăți:
      Domeniu: vpc
    Depinde: VPCGatewayAttachment
  ElasticIPAssociation:
    Tip: „AWS::EC2::EIPAssociation”
    Proprietăți:
      EIP: !Ref ElasticIP
      InstanceId: !Ref Host1
      NetworkInterfaceId: !Ref Host1Eth1

Fișierul YAML complet este disponibil aici: https://gist.github.com/kmansoft/6b90b33bcf91eb0d493414ed6c3d9754

Problemă:

Odată ce stiva este creată, Instanța are EIP-ul listat ca IP public în Consolă și există un nume DNS pentru acesta. Cu toate acestea, nu mă pot conecta la instanță folosind SSH (fie prin numele gazdei, fie prin IP).

În mod ciudat, dacă omit EIP-ul din fișierul YAML și îl creez și îl asociez manual folosind Consola AWS, atunci totul funcționează.

Aveți sugestii despre cum să faceți ca EIP public să funcționeze folosind YAML?


Actualizare: am încercat să adaug Depinde: Host1Eth1Attachment la Asociația ElasticIP, pentru a mă asigura că comanda este aceeași ca atunci când asociez EIP-ul în Consolă.

Am primit această eroare:

Există mai multe interfețe atașate instanței „i-020622d0cf13e5185”. Vă rugăm să specificați un ID de interfață pentru operație.

chiar dacă al meu Asociația ElasticIP specifică a NetworkInterfaceId (si un InstanceId).


Actualizare 2: Am încercat să-mi schimb Asociația ElasticIP sa fie asa:

  ElasticIPAssociation:
    Tip: „AWS::EC2::EIPAssociation”
    Proprietăți:
      EIP: !Ref ElasticIP
      NetworkInterfaceId: !Ref Host1Eth1
    Depinde: Host1Eth1Attachment

îndepărtarea InstanceId. Am o eroare diferită:

InstanceId nu a fost găsit în proprietăți

Acest lucru este ciudat, documentația pentru Asociația AWS::EC2::EIPA spune ca InstanceId este „Obligatoriu: condiționat” - „Pentru EC2-VPC, puteți specifica fie ID-ul instanței, fie ID-ul interfeței de rețea, dar nu ambele.”

Pare o eroare CloudFormation?


Actualizare 3

Aceasta - din documentația EC2 - funcționează.

  PublicEIPAsociate:
    Tip: „AWS::EC2::EIPAssociation”
    Proprietăți:
      AllocationId: !GetAtt PublicEIP.AllocationId
      NetworkInterfaceId: !Ref InterfacePublic

Rețineți că nu există InstanceId aici (ceea ce nu ar fi funcționat deoarece Instanța are două interfețe de rețea).

De asemenea, rețineți că aceste utilizări AlocationId si nu EIP pentru a face referire la EIP.

Documentele spun asta despre AlocationId: „Acest lucru este necesar pentru EC2-VPC”. Pentru EIP scrie „Acest lucru este necesar pentru EC2-Classic”. Folosesc EC2-VPC, așa că trec la AlocationId a avut sens și a funcționat în sfârșit.

Tim avatar
drapel gp
Tim
Instanța dvs. ascultă ssh pe interfața cu EIP?
drapel in
Bănuiesc că sshd ascultă la toate adresele. Dacă creez EIP-ul manual în Consolă, totul funcționează. Am actualizat întrebarea - acum problema nu este posibilitatea de a asocia EIP-ul cu o anumită interfață de rețea.
Puncte:0
drapel gp
Tim

După un test rapid, cred că ați găsit o eroare. Aș putea să greșesc, nu am petrecut mult timp cu asta. Cel mai simplu mod de a raporta această eroare este să mergi la Pagina EIPAssociation CloudFormation și oferă feedback. Oferiți-vă să trimiteți un e-mail în exemplul dvs. sau trimiteți această întrebare pe SF.

Aveți dreptate că documentele spun că specificați și InstanceID SAU un NetworkInterfaceID, dar când furnizați doar ID-ul interfeței, acesta vă solicită ID-ul instanței. Dacă adăugați InstanceID, acesta vă spune să îl eliminați.

Un punct mic, conform documentelor, NetworkInterfaceID al EIP trebuie să facă referire la „ID-ul interfeței de rețea”. Valoarea returnată a !Ref la un AWS::EC2::NetworkInterface este numele, așa că trebuie să obțineți atributul ID. Acest lucru ar fi important dacă nu ar exista o eroare în CloudFormation.

ElasticIPAssociation:
  Tip: „AWS::EC2::EIPAssociation”
  Proprietăți:
    EIP: !Ref ElasticIP
    InstanceId: !Ref Host1
    NetworkInterfaceId: !GetAtt Host1Eth1.Id

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.