Saya perlu mengatur server SFTP yang, pada dasarnya, memiliki kapasitas yang sangat besar. Saya perlu memberikan salah satu detail login SFTP mitra kami ke server tempat mereka akan mengunggah jutaan file, berjumlah beberapa ratus Terabyte. Saya kemudian akan selektif dan sangat jarang membaca beberapa file ini. Ini adalah satu-satunya persyaratan aktual, semua pilihan teknologi siap diperebutkan.
Apa yang terlintas dalam pikiran sebagai cara termudah adalah memiliki semacam instance EC2 yang menjalankan server SFTP sedemikian rupa sehingga segala sesuatu yang diunggah dapat langsung dikirim ke S3, atau semacam proses menemukan file baru ketika mereka diunggah, menyalinnya ke S3, dan menghapusnya dari disk.
Apakah ini cara terbaik? Apakah ada cara lain untuk mendapatkan server yang pada dasarnya memiliki "ruang disk yang tak terbatas dan tumbuh secara ajaib"?
Terima kasih atas bantuan Anda! Daniel
sumber
Jawaban:
Saya menjawab pertanyaan yang sama di Stack Overflow .
s3fs memang solusi yang masuk akal, dan dalam kasus saya, saya telah memasangnya dengan proftpd dengan hasil yang sangat baik, terlepas dari masalah teoritis / potensial.
Pada saat saya menulis jawabannya, saya hanya mengatur ini untuk salah satu klien konsultan saya ... tetapi sejak itu, saya juga mulai meminum kool-aid saya sendiri dan menggunakannya dalam produksi di pekerjaan saya. Perusahaan kami bertukar data dengan mengunggah dan mengunduh file sepanjang hari di server sftp saya, yang menyimpan semuanya secara langsung di S3. Sebagai bonus, sistem ekspor laporan saya - yang menulis spreadsheet excel langsung ke S3 - dapat mengekspor laporan "ke server FTP" dengan hanya memasukkannya langsung ke dalam server ftp server, dengan metadata yang sesuai untuk menampilkan uid, gid, dan mode setiap file. (s3fs menggunakan header x-amz-meta-uid, -gid, dan -mode untuk meniru izin sistem file). Ketika klien masuk ke server, file laporan hanya ... ada.
Saya pikir solusi yang ideal mungkin akan menjadi sftp ke layanan S3 gateway, tapi saya masih belum sempat mendesainnya, karena solusi ini bekerja sangat baik ... dengan beberapa peringatan, tentu saja:
Tidak semua nilai default untuk s3fs adalah waras. Anda mungkin ingin menentukan opsi ini:
Mungkin lebih baik menggunakan wilayah selain US-Standard, karena itulah satu-satunya wilayah yang tidak menawarkan konsistensi baca-setelah-tulis pada objek baru. (Atau, jika Anda perlu menggunakan US-Standard, Anda dapat menggunakan nama host yang hampir tidak didokumentasikan
your-bucket.s3-external-1.amazonaws.com
dari wilayah us-east-1 untuk mencegah permintaan Anda dari geo-routed, yang dapat meningkatkan konsistensi.)Saya telah mengaktifkan versi objek pada bucket, yang s3fs sama sekali tidak sadari. Keuntungan dari hal ini adalah bahwa bahkan jika suatu file harus di "stomped," saya selalu dapat membuka versi bucket untuk memulihkan file "ditimpa". Versi objek dalam S3 dirancang secara brilian sedemikian rupa sehingga klien S3 yang tidak menyadari versi sama sekali tidak dinonaktifkan atau bingung, karena jika Anda tidak melakukan panggilan REST yang sadar versi, respons yang dikembalikan S3 kompatibel dengan klien yang memiliki tidak ada konsep versi.
Perhatikan juga bahwa mentransfer data ke S3 bebas dari biaya transfer data. Anda hanya membayar harga per permintaan. Mentransfer data dari S3 ke EC2 di suatu wilayah juga bebas dari biaya transfer data. Hanya ketika Anda mentransfer S3 ke Internet, ke Cloudfront, atau ke wilayah AWS lain Anda membayar biaya transfer. Jika Anda ingin menggunakan penyimpanan redundansi pengurangan harga yang lebih rendah, s3fs mendukungnya
-o use_rrs
.Sebagai tambahan yang lucu, Anda akan selalu mendapatkan perasaan hangat yang kabur ketika Anda melihat 256 terabyte ruang kosong (dan 0 digunakan, karena perhitungan ukuran yang sebenarnya tidak praktis karena fakta bahwa S3 adalah toko objek, bukan sistem file ).
Tentu saja, Anda dapat memasang ember di mana saja. Saya kebetulan memilikinya di / srv / s3fs.
sumber
setupftpuser
yang memanggilftpasswd
utilitas ProFTPd untuk membuat pengguna, membuat direktori home, dan mengatur izin. Itu juga mencadangkan file kata sandi sebelum membuat perubahan. Jika dipanggil pada pengguna yang sudah ada, ini memberi tahu Anda bahwa pengguna sudah disediakan, dan menanyakan apakah Anda ingin mengubah kata sandi. GUI yang pada dasarnya mengelola proses yang sama, dan akan baik-baik saja jika ditulis dengan baik.Lihatlah SFTP Gateway di AWS Marketplace .
Kami mengalami masalah keandalan dengan s3fs, jadi kami mengembangkan solusi khusus untuk tujuan ini. Kami telah menggunakannya dalam produksi selama beberapa tahun tanpa masalah dan baru-baru ini merilisnya ke AWS Marketplace.
sumber
Ada dua opsi. Anda dapat menggunakan layanan SFTP yang dikelola asli yang baru-baru ini ditambahkan oleh Amazon (yang lebih mudah diatur). Atau Anda dapat memasang bucket ke sistem file di server Linux dan mengakses file menggunakan SFTP seperti file lain di server (yang memberi Anda kontrol lebih besar).
Layanan SFTP yang Dikelola
Di Konsol AWS Amazon Anda, buka AWS Transfer untuk SFTP dan buat server baru.
Di halaman server SFTP, tambahkan pengguna SFTP baru (atau pengguna).
Izin pengguna diatur oleh peran AWS terkait dalam layanan IAM (untuk memulai cepat, Anda dapat menggunakan kebijakan AmazonS3FullAccess ).
Peran tersebut harus memiliki hubungan kepercayaan
transfer.amazonaws.com
.Untuk detailnya, lihat panduan saya Menyiapkan akses SFTP ke Amazon S3 .
Mounting Bucket ke Server Linux
Seperti yang sudah dijawab @Michael, pasang saja bucket menggunakan
s3fs
sistem file (atau yang serupa) ke server Linux (Amazon EC2) dan gunakan server SFTP bawaan server untuk mengakses bucket.Ini instruksi dasar:
s3fs
access-key-id:secret-access-key
ke/etc/passwd-s3fs
Tambahkan entri pemasangan bucket ke
fstab
:Untuk detailnya, lihat panduan saya Menyiapkan akses SFTP ke Amazon S3 .
Gunakan Klien S3
Atau gunakan "FTP / SFTP client" gratis , itu juga "klien S3" , dan Anda tidak memiliki pengaturan apa pun di sisi server. Sebagai contoh, saya WinSCP atau Cyberduck .
sumber
AWS sekarang menyediakan layanan SFTP lebih dari S3 yang disebut AWS Transfer Untuk SFTP . Ini memiliki manfaat S3 (penyimpanan sangat tahan lama, tersedia, didistribusikan) dikombinasikan dengan protokol SFTP yang terkenal dan mapan.
Secara default, pengguna mengautentikasi menggunakan pasangan kunci publik / publik, dan menggunakan kebijakan IAM Anda dapat mengatur izin untuk pengguna SFTP pada bucket S3. Anda dapat menambahkan skema otentikasi dengan mengimplementasikan fungsionalitas Anda sendiri di AWS API Gateway dan AWS Lambda.
Kami telah membungkus AWS Transfer untuk SFTP dalam add-on Heroku yang disebut SFTP To Go untuk keduanya menyediakan skema otentikasi yang fleksibel dan TCO yang lebih rendah (karena titik akhir layanan memiliki biaya tetap pada AWS, tetapi dapat dibagikan oleh banyak pengguna tanpa keamanan atau kompromi kinerja.
sumber