在現代科技世界中,安全且有效率的文件傳輸對許多組織來說至關重要。 AWS Transfer Family 是 Amazon Web Services 提供的託管安全文件傳輸解決方案,可使用 SFTP、FTPS、FTP 和 AS2 等標準協定進行檔案傳輸。當與 Golang 這種以其高效和易用性而聞名的程式語言結合使用時,可以創建一個強大的組合來有效地管理和自動化文件傳輸。
在本文中,我們將探討如何將 AWS Transfer Family 與 Golang 整合以最佳化您的檔案傳輸流程。從配置 AWS Transfer Family 到使用 Golang 實作 SFTP 用戶端,我將逐步指導您,以便您可以充分利用這些技術。
什麼是 AWS Transfer 系列?
AWS Transfer Family 是一項安全、完全託管的服務,可使用 SFTP、AS2、FTPS 和 FTP 等協定將檔案傳入和傳出 AWS 儲存服務(例如 Amazon S3 和 Amazon EFS)。
主要特點
- 支援的協定:SFTP、FTPS、FTP、AS2
- AWS 儲存整合:Amazon S3、Amazon EFS
- 用例:資料湖、內部傳輸、資料分發、合規工作流程、供應鏈物流、B2B 交易。
好處
- 即時可擴充性。
- 無需基礎設施管理。
- 利用原生 AWS 服務進行資料處理與分析。
- 完全託管的無伺服器工作流程服務。
- 即用即付定價。
先決條件
- AWS 帳戶:活躍的 Amazon Web Services 帳戶。如果您還沒有,您可以在 AWS 網站上註冊。
- Golang:Go (Golang) 程式語言知識。
- AWS 中的管理權限。
- AWS Transfer Family:設定與管理 AWS Transfer Family 的管理讀寫權限。這包括創建和管理傳輸伺服器的能力。請注意,此服務需要支付相關費用。
- Amazon S3:讀取和寫入 Amazon S3 儲存桶的管理權限。
- AWS IAM:管理傳輸整合和安全所需的 IAM 角色和策略的權限。
建築設計
將 AWS Transfer Family 與 Golang 整合的建議架構設計由以下元件組成,如下圖所示:
本文提出的 API 作為基本範例來示範其基本功能。在現實場景中,API 可能更複雜並包含其他功能。其主要功能是將檔案上傳到 AWS Transfer Family SFTP 伺服器並將其儲存在 S3 儲存桶中,無論是出於備份目的還是與其他系統整合。用例各不相同,取決於每個組織的需求。以下是一些其他用例範例:AWS Transfer Family Customers。
此外,本文提出的 API 可以使用 AWS Elastic Beanstalk 或 AWS Fargate 等服務部署到 AWS 雲,以實現更高的可擴展性和可用性,具體取決於每個組織的特定要求。
讓我們開始吧!
執行
產生公鑰和私鑰
產生用於連接到 AWS Transfer Family SFTP 伺服器的公鑰和私鑰對。這可以使用以下命令在我們的電腦上本地完成。
$ ssh-keygen -t rsa -b 4096 -f
- aws_example_ssh_key:金鑰名稱
- PATH:保存金鑰的目錄
- rsa:加密演算法
- 4096:金鑰大小
- f:輸出檔名
ssh-keygen -t rsa -b 4096 -f <path>/aws_example_ssh_key Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in <path>/aws_example_ssh_key Your public key has been saved in <path>/aws_example_ssh_key.pub The key fingerprint is: SHA256:P80TXbp10tjdzJLc3KAhtWP9YWQe+A181WvqUQyaTFc rodrigoquispe@0WJMD6M The key's randomart image is: +---[RSA 4096]----+ | ..oE+| | o ** +| | + O **+| | * *.^*| | S o % #| | . o + =.| | o = o | | . o | | | +----[SHA256]-----+ </path></path></path>
- 輸入密碼(無密碼則為空):金鑰的密碼。
- 再次輸入相同的密碼:確認金鑰的密碼。
- 您的識別已儲存在
/aws_example_ssh_key 中:私鑰將保存在指定路徑下的 aws_example_ssh_key 檔案中。 - 您的公鑰已儲存在
/aws_example_ssh_key.pub 中:公鑰將保存在指定路徑下的 aws_example_ssh_key.pub 檔案中。
創建轉移家庭服務
登入AWS管理主控台並選擇AWS Transfer Family服務並建立伺服器。
選擇SFTP(SSH檔案傳輸協定)進行安全檔案傳輸,然後按一下「下一步」。
選擇身分提供者並選擇「服務託管」。
在端點設定中,選擇“公開存取”,然後按一下“下一步”。
我們選擇「Amazon S3」作為儲存選項,然後按一下「下一步」。
在「配置其他詳細資料」部分中,將設定保留為預設值。
審核,按一下「下一步」並建立。
創建完成後,我們將會得到類似這樣的東西。我們可以看到我們還沒有任何用戶,它將很快透過公共端點啟動並使用 S3 作為儲存。
創建角色
為 AWS 傳輸系列到 s3 服務建立一個新角色。為此,請前往 IAM 服務並建立 AWS 服務類型的新角色,然後在用例中選擇「傳輸」和「下一步」。
權限策略,AmazonS3FullAccess 擁有對 S3 儲存桶的完全存取權。但這個策略是非常允許的,不建議在生產中使用。接下來。
我們繼續分配角色的名稱“role-example-transfer-to-s3”,我們檢查並點擊“建立角色”。
建立S3儲存桶
我們繼續建立 s3 儲存桶,為此,我們轉到 s3 服務並建立一個新儲存桶。
我們設定儲存桶的名稱,保留預設配置並建立儲存桶。
儲存桶名稱:「bucket-example-transfer」。
在創建結束時,我們將得到以下內容:
使用 S3 為 Transfer Family 設定 SFTP 用戶
前往 AWS Transfer Family 服務並選擇您先前建立的伺服器。
- 選擇「使用者」選項卡,然後按一下「新增使用者」。
- 輸入使用者名稱。
- 指派您先前建立的 IAM 角色。
- 將「政策」設定為無
- 在「主目錄」欄位中,輸入bucket-example-transfer,這是您先前建立的 S3 儲存桶的名稱。
- 點選「新增使用者」。
要閱讀本文,您需要提供在啟動 aws_example_ssh_key.pub 時產生的公鑰。
要查看公鑰的內容,請使用以下指令:
$ cat aws_example_ssh_key.pub
公鑰如下:
ssh-keygen -t rsa -b 4096 -f <path>/aws_example_ssh_key Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in <path>/aws_example_ssh_key Your public key has been saved in <path>/aws_example_ssh_key.pub The key fingerprint is: SHA256:P80TXbp10tjdzJLc3KAhtWP9YWQe+A181WvqUQyaTFc rodrigoquispe@0WJMD6M The key's randomart image is: +---[RSA 4096]----+ | ..oE+| | o ** +| | + O **+| | * *.^*| | S o % #| | . o + =.| | o = o | | . o | | | +----[SHA256]-----+ </path></path></path>
這是我們需要包含在「SSH 公鑰」欄位中的金鑰。確保將整個密鑰準確複製並貼上到此欄位中,以實現對伺服器的安全存取。
建立使用者後,您應該會看到類似下圖的確認畫面。這表示使用者已成功設定並可使用SFTP服務。
專案結構
下面,我們提供了 Golang 專案結構的詳細概述,並包含 GitHub 儲存庫的連結以供參考。此概述將幫助您了解專案的組織以及各個組件的結構和互連方式。
ssh-rsa AAAAB3NzaC1yc2EBBAADAQABAAACAQC/qNMJaCz8+I3G71bTFf8Cpe+AAAA0BBBBBBBA6C+/a8fyl9Dw4wjj0huc4ItlX2auKG3skxTYP1ZgO5/7M7xmp2Hf+AAAA0BBBBBBBA6CynWwfwkS5XEIfNtoNWCSeB6ra4anljFdLJH4ZReOM18xxBZCyz2gGA7ePprM0nfpgoQKjp8eDoz6HFcvH4Qynea06W72D+tUWjCRH6bgPBsw/cCfj+VrcqsQXif/X8nViS679+V+AAAA0BBBBBBBA6C+t/5dD3uFPyc8yJn2fNEHB4kfIB9JR5fPIo4dVqPebloPg9vKT2M+AAAA0BBBBBBBA6C/AAAA0BBBBBBBA6C+XLTJSAljgq9JQ4l3vnT4RSsKuK+DX2um5DsN/Zwk9Qwf8JRJey/AAAA0BBBBBBBA6C+/AAAA0BBBBBBBA6CNkVaeDOYSIeGkMBUmmMaeVNeaR967SBLoHNzBfodKKaIpsmW2yHvIitg/YKu2YXKe/DnYU3G8om13uL8qIOB85CugVQ== rodrigoquispe@AAAA0BBBBBBBA6C
我們將使用的依賴項是 Gin 和 SFTP。
├── cmd │ └── main.go ├── go.mod ├── go.sum └── internal ├── app │ └── service.go ├── domain │ └── models.go ├── handler │ └── sftp_handler.go └── infra ├── config.go └── sftp_client.go
在私鑰和 Transfer Family 使用者憑證所在的 config.go 檔案中設定下列憑證,以連接到 SFTP 伺服器。
$ go get -u github.com/gin-gonic/gin $ go get -u github.com/pkg/sftp
- Host:我們之前獲得的連線端點。
- 埠:22
- 使用者:我們之前建立的使用者名稱。
- PrivateKeyPath:我們先前建立的私鑰的路徑。
此外,請考慮設定上傳到 SFTP 伺服器的檔案的儲存路徑。就我而言,它是 /bucket-example-transfer/rodrigo。
// config.go func LoadConfig() *Config { return &Config{ Host: "<host>.server.transfer.us-east-1.amazonaws.com", Port: "<port>", User: "<user>", PrivateKeyPath: "<path>/aws_example_ssh_key", } } </path></user></port></host>
使用給定配置建立新的 SFTP 用戶端的函數:
// service.go func (u *Service) Upload(file *domain.File) error { return u.sftpClient.UploadFile(file, "/bucket-example-transfer/rodrigo/") }
上傳檔案到SFTP伺服器的方法。
ssh-keygen -t rsa -b 4096 -f <path>/aws_example_ssh_key Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in <path>/aws_example_ssh_key Your public key has been saved in <path>/aws_example_ssh_key.pub The key fingerprint is: SHA256:P80TXbp10tjdzJLc3KAhtWP9YWQe+A181WvqUQyaTFc rodrigoquispe@0WJMD6M The key's randomart image is: +---[RSA 4096]----+ | ..oE+| | o ** +| | + O **+| | * *.^*| | S o % #| | . o + =.| | o = o | | . o | | | +----[SHA256]-----+ </path></path></path>
使用以下指令執行專案:
$ go run cmd/main.go
現在,我們使用 Postman 將檔案上傳到 SFTP 伺服器。然後,我們導航到 S3 以驗證文件是否已正確上傳。
文件已成功上傳,沒有任何問題。
感謝您的閱讀。
以上是AWS Transfer 系列與 Golang 用於檔案傳輸的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Golangisidealforbuildingscalablesystemsduetoitsefficiencyandconcurrency,whilePythonexcelsinquickscriptinganddataanalysisduetoitssimplicityandvastecosystem.Golang'sdesignencouragesclean,readablecodeanditsgoroutinesenableefficientconcurrentoperations,t

Golang在並發性上優於C ,而C 在原始速度上優於Golang。 1)Golang通過goroutine和channel實現高效並發,適合處理大量並發任務。 2)C 通過編譯器優化和標準庫,提供接近硬件的高性能,適合需要極致優化的應用。

選擇Golang的原因包括:1)高並發性能,2)靜態類型系統,3)垃圾回收機制,4)豐富的標準庫和生態系統,這些特性使其成為開發高效、可靠軟件的理想選擇。

Golang適合快速開發和並發場景,C 適用於需要極致性能和低級控制的場景。 1)Golang通過垃圾回收和並發機制提升性能,適合高並發Web服務開發。 2)C 通過手動內存管理和編譯器優化達到極致性能,適用於嵌入式系統開發。

Golang在編譯時間和並發處理上表現更好,而C 在運行速度和內存管理上更具優勢。 1.Golang編譯速度快,適合快速開發。 2.C 運行速度快,適合性能關鍵應用。 3.Golang並發處理簡單高效,適用於並發編程。 4.C 手動內存管理提供更高性能,但增加開發複雜度。

Golang在Web服務和系統編程中的應用主要體現在其簡潔、高效和並發性上。 1)在Web服務中,Golang通過強大的HTTP庫和並發處理能力,支持創建高性能的Web應用和API。 2)在系統編程中,Golang利用接近硬件的特性和對C語言的兼容性,適用於操作系統開發和嵌入式系統。

Golang和C 在性能對比中各有優劣:1.Golang適合高並發和快速開發,但垃圾回收可能影響性能;2.C 提供更高性能和硬件控制,但開發複雜度高。選擇時需綜合考慮項目需求和團隊技能。

Golang适合高性能和并发编程场景,Python适合快速开发和数据处理。1.Golang强调简洁和高效,适用于后端服务和微服务。2.Python以简洁语法和丰富库著称,适用于数据科学和机器学习。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3漢化版
中文版,非常好用

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),