国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 后端開發(fā) Golang AWS Transfer 系列與 Golang 用于文件傳輸

AWS Transfer 系列與 Golang 用于文件傳輸

Dec 26, 2024 am 01:01 AM

在現(xiàn)代技術(shù)世界中,安全高效的文件傳輸對于許多組織來說至關(guān)重要。 AWS Transfer Family 是 Amazon Web Services 提供的托管安全文件傳輸解決方案,允許使用 SFTP、FTPS、FTP 和 AS2 等標準協(xié)議進行文件傳輸。當(dāng)與 Golang 這種以其高效和易用性而聞名的編程語言結(jié)合使用時,可以創(chuàng)建一個強大的組合來有效地管理和自動化文件傳輸。

在本文中,我們將探討如何將 AWS Transfer Family 與 Golang 集成以優(yōu)化您的文件傳輸流程。從配置 AWS Transfer Family 到使用 Golang 實施 SFTP 客戶端,我將逐步指導(dǎo)您,以便您可以充分利用這些技術(shù)。

什么是 AWS Transfer 系列?

AWS Transfer Family 是一項安全、完全托管的服務(wù),允許使用 SFTP、AS2、FTPS 和 FTP 等協(xié)議將文件傳入和傳出 AWS 存儲服務(wù)(例如 Amazon S3 和 Amazon EFS)。

主要特點

  • 支持的協(xié)議:SFTP、FTPS、FTP、AS2
  • AWS 存儲集成:Amazon S3、Amazon EFS
  • 用例:數(shù)據(jù)湖、內(nèi)部傳輸、數(shù)據(jù)分發(fā)、合規(guī)工作流程、供應(yīng)鏈物流、B2B 交易。

好處

  • 實時可擴展性。
  • 無需基礎(chǔ)設(shè)施管理。
  • 利用原生 AWS 服務(wù)進行數(shù)據(jù)處理和分析。
  • 完全托管的無服務(wù)器工作流程服務(wù)。
  • 即用即付定價。

先決條件

  • AWS 賬戶:活躍的 Amazon Web Services 賬戶。如果您還沒有,您可以在 AWS 網(wǎng)站上注冊。
  • Golang:Go (Golang) 編程語言知識。
  • AWS 中的管理權(quán)限。
  • AWS Transfer Family:配置和管理 AWS Transfer Family 的管理讀寫權(quán)限。這包括創(chuàng)建和管理傳輸服務(wù)器的能力。請注意,此服務(wù)需要支付相關(guān)費用。
  • Amazon S3:讀取和寫入 Amazon S3 存儲桶的管理權(quán)限。
  • AWS IAM:管理傳輸集成和安全所需的 IAM 角色和策略的權(quán)限。

建筑設(shè)計

將 AWS Transfer Family 與 Golang 集成的擬議架構(gòu)設(shè)計由以下組件組成,如下圖所示:

AWS Transfer Family with Golang for File Transfers

本文提出的 API 作為基本示例來演示其基本功能。在現(xiàn)實場景中,API 可能更復(fù)雜并包含其他功能。其主要功能是將文件上傳到 AWS Transfer Family SFTP 服務(wù)器并將其存儲在 S3 存儲桶中,無論是出于備份目的還是與其他系統(tǒng)集成。用例各不相同,取決??于每個組織的需求。以下是一些其他用例示例:AWS Transfer Family Customers。

此外,本文提出的 API 可以使用 AWS Elastic Beanstalk 或 AWS Fargate 等服務(wù)部署到 AWS 云,以實現(xiàn)更高的可擴展性和可用性,具體取決于每個組織的具體要求。

讓我們開始吧!

執(zhí)行

生成公鑰和私鑰

生成用于連接到 AWS Transfer Family SFTP 服務(wù)器的公鑰和私鑰對。這可以使用以下命令在我們的計算機上本地完成。

$ ssh-keygen -t rsa -b 4096 -f /aws_example_ssh_key

  • 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]-----+
  • 輸入密碼(無密碼則為空):密鑰的密碼。
  • 再次輸入相同的密碼:確認密鑰的密碼。
  • 您的標識已保存在 /aws_example_ssh_key 中:私鑰將保存在指定路徑下的 aws_example_ssh_key 文件中。
  • 您的公鑰已保存在 /aws_example_ssh_key.pub 中:公鑰將保存在指定路徑下的 aws_example_ssh_key.pub 文件中。

AWS Transfer Family with Golang for File Transfers

創(chuàng)建轉(zhuǎn)移家庭服務(wù)

登錄AWS管理控制臺并選擇AWS Transfer Family服務(wù)并創(chuàng)建服務(wù)器。

AWS Transfer Family with Golang for File Transfers

選擇SFTP(SSH文件傳輸協(xié)議)進行安全文件傳輸,然后單擊“下一步”。

AWS Transfer Family with Golang for File Transfers

選擇身份提供商并選擇“服務(wù)托管”。

AWS Transfer Family with Golang for File Transfers

在端點配置中,選擇“公開訪問”,然后單擊“下一步”。

AWS Transfer Family with Golang for File Transfers

我們選擇“Amazon S3”作為存儲選項,然后單擊“下一步”。

AWS Transfer Family with Golang for File Transfers

在“配置其他詳細信息”部分中,將設(shè)置保留為默認值。

AWS Transfer Family with Golang for File Transfers
AWS Transfer Family with Golang for File Transfers

AWS Transfer Family with Golang for File Transfers

AWS Transfer Family with Golang for File Transfers

審核,單擊“下一步”并創(chuàng)建。
創(chuàng)建完成后,我們將會得到類似這樣的東西。我們可以看到我們還沒有任何用戶,它將很快通過公共端點啟動并使用 S3 作為存儲。

AWS Transfer Family with Golang for File Transfers

創(chuàng)建角色

為 AWS 傳輸系列到 s3 服務(wù)創(chuàng)建一個新角色。為此,請轉(zhuǎn)到 IAM 服務(wù)并創(chuàng)建 AWS 服務(wù)類型的新角色,然后在用例中選擇“傳輸”和“下一步”。

AWS Transfer Family with Golang for File Transfers

權(quán)限策略,AmazonS3FullAccess 擁有對 S3 存儲桶的完全訪問權(quán)限。但這個策略是非常允許的,不建議在生產(chǎn)中使用。接下來。

AWS Transfer Family with Golang for File Transfers

我們繼續(xù)分配角色的名稱“role-example-transfer-to-s3”,我們檢查并單擊“創(chuàng)建角色”。

AWS Transfer Family with Golang for File Transfers

創(chuàng)建S3存儲桶

我們繼續(xù)創(chuàng)建 s3 存儲桶,為此,我們轉(zhuǎn)到 s3 服務(wù)并創(chuàng)建一個新存儲桶。

AWS Transfer Family with Golang for File Transfers

我們設(shè)置存儲桶的名稱,保留默認配置并創(chuàng)建存儲桶。

存儲桶名稱:“bucket-example-transfer”。

AWS Transfer Family with Golang for File Transfers

AWS Transfer Family with Golang for File Transfers

在創(chuàng)建結(jié)束時,我們將得到如下內(nèi)容:

AWS Transfer Family with Golang for File Transfers

使用 S3 為 Transfer Family 配置 SFTP 用戶

轉(zhuǎn)到 AWS Transfer Family 服務(wù)并選擇您之前創(chuàng)建的服務(wù)器。

  • 選擇“用戶”選項卡,然后單擊“添加用戶”。
  • 輸入用戶名。
  • 分配您之前創(chuàng)建的 IAM 角色。
  • 將“政策”設(shè)置為無
  • 在“主目錄”字段中,輸入bucket-example-transfer,這是您之前創(chuàng)建的 S3 存儲桶的名稱。
  • 點擊“添加用戶”。

AWS Transfer Family with Golang for File Transfers

要閱讀本文,您需要提供在啟動 aws_example_ssh_key.pub 時生成的公鑰。

要查看公鑰的內(nèi)容,請使用以下命令:

$ 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]-----+

這是我們需要包含在“SSH 公鑰”字段中的密鑰。確保將整個密鑰準確復(fù)制并粘貼到此字段中,以實現(xiàn)對服務(wù)器的安全訪問。

AWS Transfer Family with Golang for File Transfers

創(chuàng)建用戶后,您應(yīng)該會看到類似于下圖的確認屏幕。這表明用戶已成功設(shè)置并可以使用SFTP服務(wù)。

AWS Transfer Family with Golang for File Transfers

項目結(jié)構(gòu)

下面,我們提供了 Golang 項目結(jié)構(gòu)的詳細概述,并包含 GitHub 存儲庫的鏈接以供參考。此概述將幫助您了解項目的組織以及各個組件的結(jié)構(gòu)和互連方式。

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 用戶憑據(jù)所在的 config.go 文件中設(shè)置以下憑據(jù),以連接到 SFTP 服務(wù)器。

$ go get -u github.com/gin-gonic/gin
$ go get -u github.com/pkg/sftp
  • Host:我們之前獲得的連接端點。
  • 端口:22
  • 用戶:我們之前創(chuàng)建的用戶名。
  • PrivateKeyPath:我們之前創(chuàng)建的私鑰的路徑。

此外,請考慮設(shè)置上傳到 SFTP 服務(wù)器的文件的保存路徑。就我而言,它是 /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",
    }
}

使用給定配置創(chuàng)建新的 SFTP 客戶端的函數(shù):

// service.go

func (u *Service) Upload(file *domain.File) error {
    return u.sftpClient.UploadFile(file, "/bucket-example-transfer/rodrigo/")
}

上傳文件到SFTP服務(wù)器的方法。

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]-----+

使用以下命令運行項目:

$ go run cmd/main.go

AWS Transfer Family with Golang for File Transfers

現(xiàn)在,我們使用 Postman 將文件上傳到 SFTP 服務(wù)器。然后,我們導(dǎo)航到 S3 以驗證文件是否已正確上傳。

AWS Transfer Family with Golang for File Transfers

AWS Transfer Family with Golang for File Transfers

文件已成功上傳,沒有任何問題。

感謝您的閱讀。

以上是AWS Transfer 系列與 Golang 用于文件傳輸?shù)脑敿殐?nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

默認情況下,GO靜態(tài)鏈接的含義是什么? 默認情況下,GO靜態(tài)鏈接的含義是什么? Jun 19, 2025 am 01:08 AM

Go默認將程序編譯為獨立二進制文件,主要原因是靜態(tài)鏈接。1.部署更簡單:無需額外安裝依賴庫,可直接跨Linux發(fā)行版運行;2.二進制體積更大:包含所有依賴導(dǎo)致文件尺寸增加,但可通過構(gòu)建標志或壓縮工具優(yōu)化;3.更高的可預(yù)測性與安全性:避免外部庫版本變化帶來的風(fēng)險,增強穩(wěn)定性;4.運行靈活性受限:無法熱更新共享庫,需重新編譯部署以修復(fù)依賴漏洞。這些特性使Go適用于CLI工具、微服務(wù)等場景,但在存儲受限或依賴集中管理的環(huán)境中需權(quán)衡取舍。

如何在GO中創(chuàng)建緩沖頻道? (例如,make(chan int,10)) 如何在GO中創(chuàng)建緩沖頻道? (例如,make(chan int,10)) Jun 20, 2025 am 01:07 AM

在Go中創(chuàng)建緩沖通道只需在make函數(shù)中指定容量參數(shù)即可。緩沖通道允許發(fā)送操作在沒有接收者時暫存數(shù)據(jù),只要未超過指定容量,例如ch:=make(chanint,10)創(chuàng)建了一個可存儲最多10個整型值的緩沖通道;與無緩沖通道不同,發(fā)送數(shù)據(jù)時不會立即阻塞,而是將數(shù)據(jù)暫存于緩沖區(qū)中,直到被接收者取走;使用時需注意:1.容量設(shè)置應(yīng)合理以避免內(nèi)存浪費或頻繁阻塞;2.需防止緩沖區(qū)無限堆積數(shù)據(jù)導(dǎo)致內(nèi)存問題;3.可用chanstruct{}類型傳遞信號以節(jié)省資源;常見場景包括控制并發(fā)數(shù)量、生產(chǎn)者-消費者模型及異

在沒有C中的手動內(nèi)存管理的情況下,如何確保內(nèi)存安全性? 在沒有C中的手動內(nèi)存管理的情況下,如何確保內(nèi)存安全性? Jun 19, 2025 am 01:11 AM

Goensuresmemorysafetywithoutmanualmanagementthroughautomaticgarbagecollection,nopointerarithmetic,safeconcurrency,andruntimechecks.First,Go’sgarbagecollectorautomaticallyreclaimsunusedmemory,preventingleaksanddanglingpointers.Second,itdisallowspointe

如何使用GO進行系統(tǒng)編程任務(wù)? 如何使用GO進行系統(tǒng)編程任務(wù)? Jun 19, 2025 am 01:10 AM

Go是系統(tǒng)編程的理想選擇,因為它結(jié)合了C等編譯型語言的性能與現(xiàn)代語言的易用性和安全性。1.文件與目錄操作方面,Go的os包支持創(chuàng)建、刪除、重命名及檢查文件和目錄是否存在,使用os.ReadFile可一行代碼讀取整個文件,適用于編寫備份腳本或日志處理工具;2.進程管理方面,通過os/exec包的exec.Command函數(shù)可執(zhí)行外部命令、捕獲輸出、設(shè)置環(huán)境變量、重定向輸入輸出流以及控制進程生命周期,適合用于自動化工具和部署腳本;3.網(wǎng)絡(luò)與并發(fā)方面,net包支持TCP/UDP編程、DNS查詢及原始套

如何在GO中的結(jié)構(gòu)實例上調(diào)用方法? 如何在GO中的結(jié)構(gòu)實例上調(diào)用方法? Jun 24, 2025 pm 03:17 PM

在Go語言中,調(diào)用結(jié)構(gòu)體方法需先定義結(jié)構(gòu)體和綁定接收者的方法,使用點號訪問。定義結(jié)構(gòu)體Rectangle后,可通過值接收者或指針接收者聲明方法;1.使用值接收者如func(rRectangle)Area()int,通過rect.Area()直接調(diào)用;2.若需修改結(jié)構(gòu)體,應(yīng)使用指針接收者如func(r*Rectangle)SetWidth(...),Go會自動處理指針與值的轉(zhuǎn)換;3.嵌入結(jié)構(gòu)體時,內(nèi)嵌結(jié)構(gòu)體的方法會被提升,可直接通過外層結(jié)構(gòu)體調(diào)用;4.Go無需強制使用getter/setter,字

GO中的接口是什么?如何定義它們? GO中的接口是什么?如何定義它們? Jun 22, 2025 pm 03:41 PM

在Go語言中,接口是一種定義行為而不指定實現(xiàn)方式的類型。接口由方法簽名組成,任何實現(xiàn)這些方法的類型都自動滿足該接口。例如,定義一個Speaker接口包含Speak()方法,則所有實現(xiàn)該方法的類型均可視為Speaker。接口適用于編寫通用函數(shù)、抽象實現(xiàn)細節(jié)和測試中使用mock對象。定義接口使用interface關(guān)鍵字并列出方法簽名,無需顯式聲明類型實現(xiàn)了接口。常見用例包括日志、格式化、不同數(shù)據(jù)庫或服務(wù)的抽象,以及通知系統(tǒng)等。例如,Dog和Robot類型均可實現(xiàn)Speak方法,并傳遞給同一個Anno

如何在GO中使用字符串軟件包中的字符串函數(shù)? (例如len(),strings.contains(),strings.index(),strings.replaceall()) 如何在GO中使用字符串軟件包中的字符串函數(shù)? (例如len(),strings.contains(),strings.index(),strings.replaceall()) Jun 20, 2025 am 01:06 AM

在Go語言中,字符串操作主要通過strings包和內(nèi)置函數(shù)實現(xiàn)。1.strings.Contains()用于判斷字符串是否包含子串,返回布爾值;2.strings.Index()可查找子串首次出現(xiàn)的位置,若不存在則返回-1;3.strings.ReplaceAll()能替換所有匹配的子串,還可通過strings.Replace()控制替換次數(shù);4.len()函數(shù)用于獲取字符串字節(jié)數(shù)長度,但處理Unicode時需注意字符與字節(jié)的區(qū)別。這些功能常用于數(shù)據(jù)過濾、文本解析及字符串處理等場景。

如何使用IO軟件包在GO中使用輸入和輸出流? 如何使用IO軟件包在GO中使用輸入和輸出流? Jun 20, 2025 am 11:25 AM

TheGoiopackageprovidesinterfaceslikeReaderandWritertohandleI/Ooperationsuniformlyacrosssources.1.io.Reader'sReadmethodenablesreadingfromvarioussourcessuchasfilesorHTTPresponses.2.io.Writer'sWritemethodfacilitateswritingtodestinationslikestandardoutpu

See all articles