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:
- Tạo một VPC với hai mạng con
- Tạo một Instance chỉ với giao diện mạng riêng
- Tạo giao diện mạng thứ hai (công khai) dưới dạng một thực thể YAML khác
- Đính kèm giao diện mạng thứ hai vào phiên bản
- 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.