Điểm:0

AWS CloudFormation - hai giao diện mạng, một giao diện có EIP

lá cờ in

Tôi là người mới sử dụng AWS. Cố gắng tạo một Phiên bản EC2 với hai giao diện mạng, một giao diện phải ở chế độ công khai và giao diện còn lại là riêng tư.

Đây là những gì tôi đã thử trong mẫu YAML của mình:

  1. Tạo một VPC với hai mạng con
  2. Tạo một Instance chỉ với giao diện mạng riêng
  3. Tạo giao diện mạng thứ hai (công khai) dưới dạng một thực thể YAML khác
  4. Đính kèm giao diện mạng thứ hai vào phiên bản
  5. Tạo một EIP và liên kết nó với giao diện mạng thứ hai

Giao diện mạng công cộng phải được tạo như một thực thể riêng biệt vì tôi cần! Tham khảo nó trong khổ thơ kết hợp EIP.

Tính chất:
[…]
  Máy chủ1:
    Nhập: 'AWS::EC2::Instance'
    Tính chất:
      ImageId: 'ami-02541b8af977f6cdd' # Amazon Linux x86
      Loại phiên bản: 't2.micro'
      AvailabilityZone: !Select [0, !GetAZs '']
      Tên khóa: !Ref KeyName
      Giao diện mạng:
      - SubnetId: !Ref SubnetPrivate
        DeleteOnTermination: đúng
        Chỉ mục thiết bị: '0'
        Bộ nhóm:
        - !Ref nhóm bảo mật
      thẻ:
      - Phím: Tên
        Giá trị: 'đơn giản - host1'
  Máy chủ1Eth1:
    Nhập: 'AWS::EC2::NetworkInterface'
    Tính chất:
      SubnetId: !Ref SubnetPublic
      Bộ nhóm:
      - !Ref nhóm bảo mật
      thẻ:
      - Phím: Tên
        Giá trị: 'đơn giản - host1 eth1'
  Host1Eth1Đính kèm:
    Nhập: 'AWS::EC2::NetworkInterfaceAttachment'
    Tính chất:
      DeleteOnTermination: đúng
      Chỉ số thiết bị: 1
      NetworkInterfaceId: !Ref Host1Eth1
      InstanceId: !Ref Host1
  IP đàn hồi:
    Nhập: 'AWS::EC2::EIP'
    Tính chất:
      Tên miền: vpc
    Phụ thuộc vào: VPCGatewayAttachment
  Hiệp hội IP đàn hồi:
    Nhập: 'AWS::EC2::EIPAssociation'
    Tính chất:
      EIP: !Ref ElasticIP
      InstanceId: !Ref Host1
      NetworkInterfaceId: !Ref Host1Eth1

Tệp YAML hoàn chỉnh có sẵn tại đây: https://gist.github.com/kmansoft/6b90b33bcf91eb0d493414ed6c3d9754

Vấn đề:

Sau khi ngăn xếp được tạo, Phiên bản có EIP được liệt kê là IP Công khai của nó trong Bảng điều khiển và có một tên DNS cho nó. Tuy nhiên, tôi không thể kết nối với phiên bản bằng SSH (bằng tên máy chủ hoặc bằng IP).

Thật kỳ lạ, nếu tôi bỏ qua EIP khỏi tệp YAML và tạo và liên kết nó theo cách thủ công bằng Bảng điều khiển AWS, thì mọi thứ sẽ hoạt động.

Bạn có đề xuất nào về cách làm cho EIP công khai hoạt động bằng YAML không?


Cập nhật: Tôi đã cố gắng thêm Phụ thuộc vào: Host1Eth1Attachment đến Hiệp hội IP đàn hồi, để đảm bảo thứ tự giống như khi tôi liên kết EIP trong Bảng điều khiển.

Có lỗi này:

Có nhiều giao diện được đính kèm với phiên bản 'i-020622d0cf13e5185'. Thay vào đó, vui lòng chỉ định ID giao diện cho thao tác.

mặc dù của tôi Hiệp hội IP đàn hồi chỉ định một Id giao diện mạng (và một Id trường hợp).


Cập nhật 2: Tôi đã thử thay đổi Hiệp hội IP đàn hồi được như thế này:

  Hiệp hội IP đàn hồi:
    Nhập: 'AWS::EC2::EIPAssociation'
    Tính chất:
      EIP: !Ref ElasticIP
      NetworkInterfaceId: !Ref Host1Eth1
    Phụ thuộc vào: Host1Eth1Attachment

di chuyển cái Id trường hợp. Có một lỗi khác:

InstanceId không tìm thấy trong thuộc tính

Điều này thật kỳ lạ, tài liệu về AWS::EC2::EIPAssociation nói rằng Id trường hợp là "Bắt buộc: Có điều kiện" - "Đối với EC2-VPC, bạn có thể chỉ định ID phiên bản hoặc ID giao diện mạng, nhưng không thể chỉ định cả hai."

Có vẻ như lỗi CloudFormation?


cập nhật 3

Điều này - từ tài liệu EC2 - hoạt động.

  PublicEIPAssociate:
    Nhập: 'AWS::EC2::EIPAssociation'
    Tính chất:
      AllocationId: !GetAtt PublicEIP.AllocationId
      NetworkInterfaceId: !Ref InterfacePublic

Lưu ý rằng không có Id trường hợp tại đây (điều này sẽ không hoạt động vì Phiên bản có hai giao diện mạng).

Cũng lưu ý điều này sử dụng Id phân bổ và không EIP để tham khảo EIP.

Các tài liệu nói điều này về Id phân bổ: "Điều này là bắt buộc đối với EC2-VPC". Vì EIP nó nói "Điều này là bắt buộc đối với EC2-Classic". Tôi đang sử dụng EC2-VPC nên chuyển sang Id phân bổ có ý nghĩa và cuối cùng đã làm việc.

Tim avatar
lá cờ gp
Tim
Phiên bản của bạn có đang nghe ssh trên giao diện với EIP không?
lá cờ in
Tôi đoán sshd nghe trên tất cả các địa chỉ. Nếu tôi tạo EIP theo cách thủ công trong Bảng điều khiển, mọi thứ sẽ hoạt động. Tôi đã cập nhật câu hỏi - hiện tại sự cố không thể liên kết EIP với giao diện mạng cụ thể.
Điểm:0
lá cờ gp
Tim

Sau khi kiểm tra nhanh, tôi nghĩ bạn có thể đã tìm thấy một lỗi. Tôi có thể sai, tôi đã không dành nhiều thời gian cho nó. Cách dễ nhất để báo cáo lỗi này là truy cập Trang CloudFormation EIPAssociation và đưa ra phản hồi. Đề nghị gửi email trong ví dụ của bạn hoặc tham khảo câu hỏi này trên SF.

Bạn đúng khi các tài liệu nói chỉ định và InstanceID HOẶC NetworkInterfaceID nhưng khi bạn chỉ cung cấp ID giao diện, nó sẽ yêu cầu ID phiên bản. Nếu bạn thêm InstanceID, nó sẽ yêu cầu bạn xóa nó.

Một điểm nhỏ, theo các tài liệu, NetworkInterfaceID của EIP cần tham khảo "ID của giao diện mạng". Giá trị trả về của !Ref cho AWS::EC2::NetworkInterface là tên nên bạn cần lấy thuộc tính ID. Điều đó sẽ rất quan trọng nếu không có lỗi trong CloudFormation.

Hiệp hội IP đàn hồi:
  Nhập: 'AWS::EC2::EIPAssociation'
  Tính chất:
    EIP: !Ref ElasticIP
    InstanceId: !Ref Host1
    NetworkInterfaceId: !GetAtt Host1Eth1.Id

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.