Score:0

AWS CloudFormation - สองอินเทอร์เฟซเครือข่าย หนึ่งอินเทอร์เฟซพร้อม EIP

ธง in

ฉันเป็นมือใหม่ของ AWS พยายามสร้างอินสแตนซ์ EC2 ที่มีอินเทอร์เฟซเครือข่ายสองอินเทอร์เฟซ อินเทอร์เฟซหนึ่งควรเป็นแบบสาธารณะและอีกแบบส่วนตัว

นี่คือสิ่งที่ฉันได้ลองในเทมเพลต YAML ของฉัน:

  1. สร้าง VPC ที่มีสองเครือข่ายย่อย
  2. สร้างอินสแตนซ์ด้วยอินเทอร์เฟซเครือข่ายส่วนตัว
  3. สร้างอินเทอร์เฟซเครือข่ายที่สอง (สาธารณะ) เป็นเอนทิตี YAML อื่น
  4. แนบอินเทอร์เฟซเครือข่ายที่สองเข้ากับอินสแตนซ์
  5. สร้าง EIP และเชื่อมโยงกับอินเทอร์เฟซเครือข่ายที่สอง

อินเทอร์เฟซเครือข่ายสาธารณะจะต้องสร้างเป็นเอนทิตีแยกต่างหาก เนื่องจากฉันต้อง !อ้างอิง ในบทเชื่อมโยง EIP

คุณสมบัติ:
[...]
  โฮสต์ 1:
    ประเภท: 'AWS::EC2::อินสแตนซ์'
    คุณสมบัติ:
      ImageId: 'ami-02541b8af977f6cdd' # Amazon Linux x86
      ประเภทอินสแตนซ์: 't2.micro'
      AvailabilityZone: !เลือก [0, !GetAZs '']
      ชื่อคีย์: !Ref ชื่อคีย์
      อินเทอร์เฟซเครือข่าย:
      - SubnetId: !อ้างอิง SubnetPrivate
        DeleteOnTermination: จริง
        ดัชนีอุปกรณ์: '0'
        ชุดกลุ่ม:
        - !อ้างอิง กลุ่มความปลอดภัย
      แท็ก:
      - คีย์: ชื่อ
        ค่า: 'ง่าย - host1'
  Host1Eth1:
    ประเภท: 'AWS::EC2::NetworkInterface'
    คุณสมบัติ:
      SubnetId: !อ้างอิง SubnetPublic
      ชุดกลุ่ม:
      - !อ้างอิง กลุ่มความปลอดภัย
      แท็ก:
      - คีย์: ชื่อ
        ค่า: 'ง่าย - host1 eth1'
  Host1Eth1ไฟล์แนบ:
    ประเภท: 'AWS::EC2::NetworkInterfaceAttachment'
    คุณสมบัติ:
      DeleteOnTermination: จริง
      ดัชนีอุปกรณ์: 1
      NetworkInterfaceId: !Ref Host1Eth1
      รหัสอินสแตนซ์: !Ref Host1
  ยืดหยุ่น IP:
    ประเภท: 'AWS::EC2::EIP'
    คุณสมบัติ:
      โดเมน: vpc
    ขึ้นอยู่กับ: VPCGatewayAttachment
  สมาคม ElasticIP:
    ประเภท: 'AWS::EC2::EIPAssociation'
    คุณสมบัติ:
      EIP: !อ้างอิง ElasticIP
      รหัสอินสแตนซ์: !Ref Host1
      NetworkInterfaceId: !Ref Host1Eth1

ไฟล์ YAML ฉบับสมบูรณ์มีอยู่ที่นี่: https://gist.github.com/kmansoft/6b90b33bcf91eb0d493414ed6c3d9754

ปัญหา:

เมื่อสร้างสแต็กแล้ว อินสแตนซ์จะแสดง EIP เป็น IP สาธารณะใน Console และมีชื่อ DNS สำหรับสแต็ก อย่างไรก็ตาม ฉันไม่สามารถเชื่อมต่อกับอินสแตนซ์โดยใช้ SSH (ไม่ว่าจะด้วยชื่อโฮสต์หรือ IP)

น่าแปลก ถ้าฉันตัด EIP ออกจากไฟล์ YAML และสร้างและเชื่อมโยงด้วยตนเองโดยใช้ AWS Console ทุกอย่างก็ใช้ได้

มีคำแนะนำเกี่ยวกับวิธีทำให้ EIP สาธารณะทำงานโดยใช้ YAML ไหม


อัปเดต: ฉันพยายามเพิ่มแล้ว ขึ้นอยู่กับ: Host1Eth1Attachment ถึง สมาคม ElasticIPเพื่อให้แน่ใจว่าการสั่งซื้อจะเหมือนกับตอนที่ฉันเชื่อมโยง EIP ในคอนโซล

ได้รับข้อผิดพลาดนี้:

มีหลายอินเทอร์เฟซที่แนบมากับอินสแตนซ์ 'i-020622d0cf13e5185' โปรดระบุรหัสอินเทอร์เฟซสำหรับการดำเนินการแทน

แม้ว่าของฉัน สมาคม ElasticIP ไม่ระบุ รหัสอินเทอร์เฟซเครือข่าย (และอ รหัสอินสแตนซ์).


อัปเดต 2: ฉันได้ลองเปลี่ยนไฟล์ สมาคม ElasticIP จะเป็นดังนี้:

  สมาคม ElasticIP:
    ประเภท: 'AWS::EC2::EIPAssociation'
    คุณสมบัติ:
      EIP: !อ้างอิง ElasticIP
      NetworkInterfaceId: !Ref Host1Eth1
    ขึ้นอยู่กับ: Host1Eth1Attachment

การถอด รหัสอินสแตนซ์. มีข้อผิดพลาดอื่น:

ไม่พบ InstanceId ในคุณสมบัติ

นี่เป็นเรื่องแปลก เอกสารประกอบสำหรับ AWS::EC2::EIPAสมาคม บอกว่า รหัสอินสแตนซ์ คือ "จำเป็น: แบบมีเงื่อนไข" - "สำหรับ EC2-VPC คุณสามารถระบุ ID อินสแตนซ์หรือ ID อินเทอร์เฟซเครือข่ายอย่างใดอย่างหนึ่ง แต่ไม่ใช่ทั้งสองอย่าง"

ดูเหมือนข้อบกพร่องของ CloudFormation หรือไม่


ปรับปรุง 3

สิ่งนี้ - จากเอกสาร EC2 - ใช้งานได้

  ผู้ร่วมงาน EIP สาธารณะ:
    ประเภท: 'AWS::EC2::EIPAssociation'
    คุณสมบัติ:
      AllocationId: !GetAtt PublicEIP.AllocationId
      NetworkInterfaceId: !Ref ส่วนต่อประสานสาธารณะ

โปรดทราบว่าไม่มี รหัสอินสแตนซ์ ที่นี่ (ซึ่งใช้ไม่ได้เพราะอินสแตนซ์มีอินเทอร์เฟซเครือข่ายสองอินเทอร์เฟซ)

โปรดสังเกตการใช้งานนี้ด้วย รหัสการจัดสรร และไม่ สพป เพื่ออ้างถึง EIP

เอกสารพูดเกี่ยวกับเรื่องนี้ รหัสการจัดสรร: "จำเป็นสำหรับ EC2-VPC" สำหรับ สพป มันบอกว่า "สิ่งนี้จำเป็นสำหรับ EC2-Classic" ฉันใช้ EC2-VPC ดังนั้นเปลี่ยนไปใช้ รหัสการจัดสรร เข้าท่าและได้ผลในที่สุด

Tim avatar
gp flag
Tim
อินสแตนซ์ของคุณกำลังฟัง ssh บนอินเทอร์เฟซด้วย EIP หรือไม่
in flag
ฉันเดาว่า sshd ฟังที่อยู่ทั้งหมด ถ้าฉันสร้าง EIP ด้วยตนเองใน Console ทุกอย่างจะทำงานได้ ฉันได้อัปเดตคำถามแล้ว - ตอนนี้ปัญหาไม่สามารถเชื่อมโยง EIP กับอินเทอร์เฟซเครือข่ายเฉพาะได้
Score:0
ธง gp
Tim

หลังจากการทดสอบอย่างรวดเร็ว ฉันคิดว่าคุณอาจพบจุดบกพร่อง ฉันอาจคิดผิด ฉันไม่ได้ใช้เวลานานกับมัน วิธีที่ง่ายที่สุดในการรายงานข้อบกพร่องนี้คือไปที่ หน้า EIPAssociation CloudFormation และให้ข้อเสนอแนะ เสนออีเมลในตัวอย่างของคุณ หรืออ้างอิงคำถามนี้ใน SF

คุณพูดถูกที่เอกสารระบุและ InstanceID หรือ NetworkInterfaceID แต่เมื่อคุณระบุเพียง ID อินเทอร์เฟซ มันจะถามหา Instance ID หากคุณเพิ่ม InstanceID จะแจ้งให้คุณลบออก

จุดเล็ก ๆ ตามเอกสาร NetworkInterfaceID ของ EIP จำเป็นต้องอ้างอิง "ID ของอินเทอร์เฟซเครือข่าย" ค่าที่ส่งคืนของ !Ref to a AWS::EC2::NetworkInterface คือชื่อ ดังนั้นคุณต้องได้รับแอตทริบิวต์ ID นั่นจะสำคัญหากไม่มีจุดบกพร่องใน CloudFormation

สมาคม ElasticIP:
  ประเภท: 'AWS::EC2::EIPAssociation'
  คุณสมบัติ:
    EIP: !อ้างอิง ElasticIP
    รหัสอินสแตนซ์: !Ref Host1
    NetworkInterfaceId: !GetAtt Host1Eth1.Id

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา