ไม่สามารถคัดลอกข้อมูลจาก s3 ไปยังคลัสเตอร์ redshift ในซับเน็ตส่วนตัว

ฉันได้ตั้งค่าคลัสเตอร์ redshift ในซับเน็ตส่วนตัวแล้ว ฉันสามารถเชื่อมต่อกับคลัสเตอร์ RedShift ของฉันได้สำเร็จและทำการสืบค้น SQL พื้นฐานผ่าน DBeaver

ฉันจำเป็นต้องอัปโหลดไฟล์บางไฟล์จาก s3 ไปยัง redshift ด้วย ดังนั้นฉันจึงตั้งค่าเกตเวย์ s3 ในซับเน็ตส่วนตัวของฉัน และอัปเดตตารางเส้นทางสำหรับซับเน็ตส่วนตัวของฉันเพื่อเพิ่มเส้นทางที่ต้องการดังนี้:

Destination       Target                 Status            Propagated
192.168.0.0/16    local                  active            No   
pl-7ba54012 (com.amazonaws.us-east-2.s3, 52.219.80.0/20, 3.5.128.0/21, 52.219.96.0/20, 52.92.76.0/22)   vpce-04eed78f4db84ae49  
active             No   
0.0.0.0/0         nat-0a73ba7659e887232  active            No 

อย่างไรก็ตาม ฉันไม่สามารถเรียกใช้การคัดลอกแบบสอบถามจากบัคเก็ต s3 ของฉันได้

copy venue
from 's3://*****/tickit/venue_pipe.txt'
iam_role 'arn:aws:iam::******:role/global-dev-rdt-role-S3ReadonlyAccess'
region 'us-east-2';

ไม่มีนโยบายจำกัดบนบัคเก็ตของฉันและกลุ่มความปลอดภัยซับเน็ตสาธารณะและส่วนตัว และฉันสามารถเรียกใช้คำสั่ง SQL บนคลัสเตอร์ redshift ของฉันในซับเน็ตส่วนตัวได้แล้ว

อัปเดต: กลุ่มความปลอดภัยสำหรับคลัสเตอร์ redshift อนุญาตให้เชื่อมต่อทั้งหมดกับพอร์ต 5439

Type         Protocol      Port Range     Source      Description
Redshift     TCP           5439           0.0.0.0/0
Redshift     TCP           5439           ::/0
SSH          TCP           22             sg-0f933e18d6c1967b8

person Mahdi    schedule 01.01.2020    source แหล่งที่มา
comment
คุณหมายถึงอะไรว่าฉันไม่สามารถเรียกใช้แบบสอบถามคัดลอกได้ คุณสามารถแบ่งปันข้อความแสดงข้อผิดพลาดหรืออธิบายปัญหาให้เราทราบได้หรือไม่?   -  person John Rotenstein    schedule 02.01.2020
comment
เว้นแต่คุณได้เปิดใช้งาน การกำหนดเส้นทาง VPC ที่ปรับปรุงแล้ว ฉันคิดว่าคุณไม่จำเป็นต้องใช้ตำแหน่งข้อมูล VPC เพื่อเชื่อมต่อ Redshift กับ S3 เนื่องจากการรับส่งข้อมูลไม่ได้ผ่าน VPC   -  person John Rotenstein    schedule 02.01.2020
comment
ใช้เวลานานมากและข้อความค้นหากลับมาพร้อมกับสถานะล้มเหลว..ฉันได้เปิดใช้งานการกำหนดเส้นทาง VPC ด้วย เนื่องจากควรหลีกเลี่ยงการรับส่งข้อมูลผ่านอินเทอร์เน็ต   -  person Mahdi    schedule 02.01.2020
comment
คุณหมายถึงอะไรโดยเกตเวย์ s3? คุณกำลังอ้างถึงตำแหน่งข้อมูล VPC สำหรับ Amazon S3 หรือไม่   -  person John Rotenstein    schedule 02.01.2020
comment
ใช่ ฉันหมายถึงตำแหน่งข้อมูลสำหรับ s3 ในซับเน็ตส่วนตัวใน VPC   -  person Mahdi    schedule 02.01.2020
comment
ว่าแต่ คุณจะเชื่อมต่อกับคลัสเตอร์ Redshift ได้อย่างไร? คลัสเตอร์ของคุณอยู่ในเครือข่ายย่อยสาธารณะหรือเครือข่ายย่อยส่วนตัวหรือไม่ หากอยู่ในเครือข่ายย่อย สาธารณะ คุณจะต้องเพิ่มจุดสิ้นสุด VPC ลงในตารางเส้นทางที่เป็นเครือข่ายย่อยสาธารณะ   -  person John Rotenstein    schedule 03.01.2020
comment
อยู่ในเครือข่ายย่อยส่วนตัวและกลุ่มความปลอดภัยมีกฎให้อนุญาตการเชื่อมต่อทั้งหมดไปยังพอร์ต 5439 Redshift,TCP,5439,0.0.0.0/0 มันเป็นเรื่องแปลกเว้นแต่ฉันจะเปิดใช้งานการกำหนดเส้นทางที่ปรับปรุงแล้ว ฉันไม่สามารถเรียกใช้คำสั่งคัดลอกได้   -  person Mahdi    schedule 03.01.2020


คำตอบ (1)


เพื่อจำลองสถานการณ์ของคุณ ฉันได้ทำสิ่งต่อไปนี้:

  • สร้าง VPC ใหม่ด้วยเครือข่ายย่อยสาธารณะและเครือข่ายย่อยส่วนตัว (ไม่มีเกตเวย์ NAT)
  • Launched a 1-node Amazon Redshift cluster in the private subnet
    • Enhanced VPC Routing = No
    • เข้าถึงได้สาธารณะ = ไม่
  • เปิดตัวอินสแตนซ์ Amazon EC2 Linux ในซับเน็ตสาธารณะ
  • วิ่ง sudo yum install postgresql บนอินสแตนซ์ EC2
  • สร้างการเชื่อมต่อกับคลัสเตอร์ Redshift ผ่าน psql บนอินสแตนซ์ EC2 (psql -h xx.yy.ap-southeast-2.redshift.amazonaws.com -p 5439 -U username)
  • สร้างตาราง (create table foo(id integer);)
  • โหลดโต๊ะแล้ว (copy foo from 's3://my-bucket/bar.txt' iam_role 'xxx';)

ทำงานได้สำเร็จ โดยมีข้อความว่า:

INFO:  Load into table 'foo' completed, 4 record(s) loaded successfully.

ดังนั้นจึงไม่จำเป็นต้อง จุดสิ้นสุด VPC/เกตเวย์ NAT เพื่อดำเนินการคำสั่ง COPY จาก Redshift คลัสเตอร์ Redshift มีวิธีพิเศษของตัวเองในการเชื่อมต่อกับ S3 ซึ่งดูเหมือนผ่าน 'แบ็กเอนด์' ของ Redshift

หากมีการโหลดข้อมูลจาก Amazon S3 ในภูมิภาคเดียวกัน ปริมาณการใช้งานจะคงอยู่ภายในเครือข่าย AWS ทั้งหมด หากข้อมูลมาจากภูมิภาคอื่น ข้อมูลนั้นจะยังคงได้รับการเข้ารหัสเนื่องจากการสื่อสารกับ Amazon S3 จะทำผ่าน HTTPS

การทดสอบที่สอง: การใช้เครือข่าย VPC ที่ปรับปรุงแล้ว

เพื่อสะท้อนสถานการณ์ของคุณ ฉันได้เปิดตัวคลัสเตอร์ RedShift อื่นที่มีเปิดใช้งานการกำหนดเส้นทาง VPC ที่ปรับปรุงแล้ว

เมื่อฉันรันคำสั่ง COPY มันค้างอย่างที่คาดไว้เพราะฉันไม่ได้กำหนดค่าวิธีการสำหรับคลัสเตอร์ Redshift เพื่อเข้าถึง Amazon S3 ผ่าน VPC

จากนั้น ฉันได้สร้าง ตำแหน่งข้อมูล VPC สำหรับ Amazon S3 และเชื่อมต่อกับเครือข่ายย่อยส่วนตัวด้วยนโยบาย "การเข้าถึงแบบเต็ม"

จากนั้น เมื่อฉันรันคำสั่ง COPY อีกครั้ง มันก็โหลดข้อมูลจาก Amazon S3 ได้สำเร็จ

บรรทัดล่าง: มันได้ผลสำหรับฉัน คุณอาจต้องการเปรียบเทียบการกำหนดค่าของคุณกับขั้นตอนข้างต้นที่ฉันดำเนินการ

person John Rotenstein    schedule 02.01.2020
comment
สำหรับสถานการณ์ที่สอง คุณได้ตั้งค่าคลัสเตอร์ redshift ในซับเน็ตส่วนตัวด้วยเกตเวย์ NAT หรือไม่ ฉันสามารถเรียกใช้คำสั่งคัดลอกได้เมื่อฉันปิดใช้งานการกำหนดเส้นทางที่ได้รับการปรับปรุง แต่ไม่สามารถเรียกใช้ได้เมื่อฉันเปิดใช้งาน - person Mahdi; 02.01.2020
comment
ทั้งสองสถานการณ์ใช้ VPC เดียวกัน: ซับเน็ตสาธารณะพร้อมอินเทอร์เน็ตเกตเวย์และอินสแตนซ์ EC2, ซับเน็ตส่วนตัวพร้อมคลัสเตอร์ Redshift ไม่มีสถานการณ์ใดที่ใช้เกตเวย์ NAT สถานการณ์ที่สองยังมีจุดสิ้นสุด VPC สำหรับ S3 เชื่อมต่อกับเครือข่ายย่อยส่วนตัวอีกด้วย - person John Rotenstein; 02.01.2020
comment
สวัสดี ขออภัยสำหรับความผิดพลาดของฉัน ฉันต้องใส่เกตเวย์ NAT ในซับเน็ตสาธารณะและแนบเกตเวย์อินเทอร์เน็ตเพื่อให้การเข้าถึงอินเทอร์เน็ตที่ปลอดภัยแก่ VPC ของฉัน ในกรณีนี้ ฉันต้องการทราบว่าการกำหนดเส้นทางที่ปรับปรุงสามารถตั้งค่าเป็นจริงได้หรือไม่ เชื่อมต่อผ่านจุดสิ้นสุด s3 ในซับเน็ตส่วนตัวหรือไม่ - person Mahdi; 02.01.2020
comment
ใช่ คุณสามารถใช้ทั้ง NAT Gateway และ VPC Endpoint ได้ ตารางเส้นทางสำหรับเครือข่ายย่อยส่วนตัวจะมีรายการสำหรับทั้งสองรายการ เนื่องจากกฎการกำหนดเส้นทางสำหรับตำแหน่งข้อมูล VPC มีความเฉพาะเจาะจงมากกว่า การรับส่งข้อมูลสำหรับ S3 จะไปผ่านตำแหน่งข้อมูล VPC ในขณะที่การรับส่งข้อมูลอื่นๆ จะไปผ่านเกตเวย์ NAT ดังนั้นการกำหนดค่าที่คุณแสดงในคำถามของคุณควรทำงานได้ดี คุณได้กำหนดค่า VPC Endpoint ด้วยนโยบายการเข้าถึงแบบเต็มหรือไม่ - person John Rotenstein; 03.01.2020