ฉันเป็นมือใหม่ของ AWS พยายามสร้างอินสแตนซ์ EC2 ที่มีอินเทอร์เฟซเครือข่ายสองอินเทอร์เฟซ อินเทอร์เฟซหนึ่งควรเป็นแบบสาธารณะและอีกแบบส่วนตัว
นี่คือสิ่งที่ฉันได้ลองในเทมเพลต YAML ของฉัน:
- สร้าง VPC ที่มีสองเครือข่ายย่อย
- สร้างอินสแตนซ์ด้วยอินเทอร์เฟซเครือข่ายส่วนตัว
- สร้างอินเทอร์เฟซเครือข่ายที่สอง (สาธารณะ) เป็นเอนทิตี YAML อื่น
- แนบอินเทอร์เฟซเครือข่ายที่สองเข้ากับอินสแตนซ์
- สร้าง 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 ดังนั้นเปลี่ยนไปใช้ รหัสการจัดสรร
เข้าท่าและได้ผลในที่สุด