ホームページ バックエンド開発 Golang ファイル転送用の Golang を使用した AWS Transfer Family

ファイル転送用の Golang を使用した AWS Transfer Family

Dec 26, 2024 am 01:01 AM

現代のテクノロジーの世界では、多くの組織にとって安全かつ効率的なファイル転送が不可欠です。アマゾン ウェブ サービスが提供するマネージド型の安全なファイル転送ソリューションである AWS Transfer Family では、SFTP、FTPS、FTP、AS2 などの標準プロトコルを使用したファイル転送が可能です。効率性と使いやすさで知られるプログラミング言語 Golang と組み合わせると、ファイル転送を効果的に管理および自動化するための強力な組み合わせが作成されます。

この記事では、AWS Transfer Family を Golang と統合してファイル転送プロセスを最適化する方法について説明します。 AWS Transfer Family の設定から Golang を使用した SFTP クライアントの実装まで、これらのテクノロジーを最大限に活用できるようにステップバイステップでガイドします。

AWS Transfer Family とは何ですか?

AWS Transfer Family は、SFTP、AS2、FTPS、FTP などのプロトコルを使用して、Amazon S3 や Amazon EFS などの AWS ストレージ サービスとの間でファイルを転送できる、安全なフルマネージド サービスです。

主な特長

  • サポートされているプロトコル: SFTP、FTPS、FTP、AS2
  • AWS ストレージの統合: Amazon S3、Amazon EFS
  • ユースケース: データレイク、内部転送、データ分散、コンプライアンスワークフロー、サプライチェーンロジスティクス、B2B トランザクション。

利点

  • リアルタイムのスケーラビリティ。
  • インフラストラクチャ管理は必要ありません。
  • データ処理と分析にネイティブ AWS サービスを活用します。
  • フルマネージドのサーバーレス ワークフロー サービス。
  • 従量課金制の料金設定。

前提条件

  • AWS アカウント: アクティブなアマゾン ウェブ サービス アカウント。まだお持ちでない場合は、AWS ウェブサイトでサインアップできます。
  • Golang: Go (Golang) プログラミング言語に関する知識。
  • AWS の管理者権限。
  • AWS Transfer Family: AWS Transfer Family を設定および管理するための管理読み取りおよび書き込み権限。これには、転送サーバーを作成および管理する機能が含まれます。このサービスには関連費用がかかることに注意してください。
  • Amazon S3: Amazon S3 バケットの読み取りおよび書き込みを行う管理権限。
  • AWS IAM: 転送の統合とセキュリティに必要な IAM ロールとポリシーを管理する権限。

建築設計

AWS Transfer Family を Golang と統合するために提案されたアーキテクチャ設計は、以下の図に示すように、次のコンポーネントで構成されます。

AWS Transfer Family with Golang for File Transfers

この記事で提案されている API は、その基本的な機能を示す基本的な例として機能します。実際のシナリオでは、API はより複雑になり、追加機能が含まれる場合があります。その主な機能は、バックアップ目的であっても、他のシステムとの統合であっても、ファイルを AWS Transfer Family SFTP サーバーにアップロードし、S3 バケットに保存することです。ユースケースはさまざまで、各組織のニーズによって異なります。追加の使用例は次のとおりです: AWS Transfer Family の顧客

さらに、この記事で提案されている API は、AWS Elastic Beanstalk や AWS Fargate などのサービスを使用して AWS クラウドにデプロイされ、各組織の特定の要件に応じて、より優れたスケーラビリティと可用性を実現できます。

始めましょう!

実装

公開鍵と秘密鍵を生成する

AWS Transfer Family SFTP サーバーに接続するための公開キーと秘密キーのペアを生成します。これは、次のコマンドを使用してマシン上でローカルに実行できます。

$ 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]-----+
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
  • パスフレーズを入力してください (パスフレーズがない場合は空白): キーのパスワード。
  • 同じパスフレーズを再度入力します: キーのパスワードを確認します。
  • あなたの ID は /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

Transfer Family サービスの作成

AWS マネジメントコンソールにログインし、AWS Transfer Family サービスを選択してサーバーを作成します。

AWS Transfer Family with Golang for File Transfers

安全なファイル転送のために SFTP (SSH ファイル転送プロトコル) を選択し、[次へ] をクリックします。

AWS Transfer Family with Golang for File Transfers

ID プロバイダーを選択し、[管理対象サービス] を選択します。

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

「追加の詳細の構成」セクションでは、設定をデフォルト値のままにします。

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

内容を確認し、「次へ」をクリックして作成します。
作成が完了すると、次のようなものが得られます。まだユーザーがいないことがわかり、パブリック エンドポイントを介して S3 をストレージとして使用して間もなく開始されることがわかります。

AWS Transfer Family with Golang for File Transfers

ロールを作成する

AWS 転送ファミリーから s3 サービス用の新しいロールを作成します。これを行うには、IAM サービスに移動し、AWS サービス タイプの新しいロールを作成し、ユースケースで [転送して次へ] を選択します。

AWS Transfer Family with Golang for File Transfers

S3 バケットへのフルアクセスを許可するアクセス許可ポリシー、AmazonS3FullAccess。ただし、このポリシーは非常に許容されるものであり、運用環境での使用はお勧めできません。そして次です。

AWS Transfer Family with Golang for File Transfers

ロールの名前「role-example-transfer-to-s3」の割り当てに進み、確認して「ロールの作成」をクリックします。

AWS Transfer Family with Golang for File Transfers

S3バケットの作成

s3 バケットの作成に進みます。これを行うには、s3 サービスに移動して新しいバケットを作成します。

AWS Transfer Family with Golang for File Transfers

デフォルト設定のままでバケットの名前を設定し、バケットを作成します。

バケット名: "bucket-example-transfer"。

AWS Transfer Family with Golang for File Transfers

AWS Transfer Family with Golang for File Transfers

作成の最後には次のようなものになります:

AWS Transfer Family with Golang for File Transfers

S3 を使用した Transfer Family の SFTP ユーザーの構成

AWS Transfer Family サービスに移動し、前に作成したサーバーを選択します。

  • 「ユーザー」タブを選択し、「ユーザーを追加」をクリックします。
  • ユーザー名を入力してください。
  • 前に作成した IAM ロールを割り当てます。
  • 「ポリシー」をなしに設定します
  • 「ホーム ディレクトリ」フィールドに、bucket-example-transfer と入力します。これは、前に作成した S3 バケットの名前です。
  • 「ユーザーを追加」をクリックします。

AWS Transfer Family with Golang for File Transfers

この記事に従うには、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]-----+
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

これは、「SSH 公開キー」フィールドに含める必要があるキーです。サーバーへの安全なアクセスを可能にするために、キー全体をコピーしてこのフィールドに正確に貼り付けてください。

AWS Transfer Family with Golang for File Transfers

ユーザーを作成すると、以下のような確認画面が表示されます。これは、ユーザーが正常にセットアップされ、SFTP サービスを使用する準備ができていることを示します。

AWS Transfer Family with Golang for File Transfers

プロジェクトの構造

以下では、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
ログイン後にコピー

SFTP サーバーに接続するには、秘密キーと Transfer Family ユーザーの資格情報が配置されている config.go ファイルに次の資格情報を設定します。

$ go get -u github.com/gin-gonic/gin
$ go get -u github.com/pkg/sftp
ログイン後にコピー
  • ホスト: 前に取得した接続エンドポイント。
  • ポート: 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",
    }
}
ログイン後にコピー

指定された構成で新しい 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]-----+
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

次のコマンドを使用してプロジェクトを実行します:

$ go run cmd/main.go

AWS Transfer Family with Golang for File Transfers

次に、Postman を使用してファイルを SFTP サーバーにアップロードします。次に、S3 に移動して、ファイルが正しくアップロードされたことを確認します。

AWS Transfer Family with Golang for File Transfers

AWS Transfer Family with Golang for File Transfers

ファイルは問題なくアップロードされました。

お読みいただきありがとうございます。

以上がファイル転送用の Golang を使用した AWS Transfer Familyの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Golang vs. Python:パフォーマンスとスケーラビリティ Golang vs. Python:パフォーマンスとスケーラビリティ Apr 19, 2025 am 12:18 AM

Golangは、パフォーマンスとスケーラビリティの点でPythonよりも優れています。 1)Golangのコンピレーションタイプの特性と効率的な並行性モデルにより、高い並行性シナリオでうまく機能します。 2)Pythonは解釈された言語として、ゆっくりと実行されますが、Cythonなどのツールを介してパフォーマンスを最適化できます。

Golang and C:Concurrency vs. Raw Speed Golang and C:Concurrency vs. Raw Speed Apr 21, 2025 am 12:16 AM

Golangは並行性がCよりも優れていますが、Cは生の速度ではGolangよりも優れています。 1)Golangは、GoroutineとChannelを通じて効率的な並行性を達成します。これは、多数の同時タスクの処理に適しています。 2)Cコンパイラの最適化と標準ライブラリを介して、極端な最適化を必要とするアプリケーションに適したハードウェアに近い高性能を提供します。

ゴーを始めましょう:初心者のガイド ゴーを始めましょう:初心者のガイド Apr 26, 2025 am 12:21 AM

goisidealforforbeginnersandsutable forcloudnetworkservicesduetoitssimplicity、andconcurrencyfeatures.1)installgofromtheofficialwebsiteandverify with'goversion'.2)

Golang vs. C:パフォーマンスと速度の比較 Golang vs. C:パフォーマンスと速度の比較 Apr 21, 2025 am 12:13 AM

Golangは迅速な発展と同時シナリオに適しており、Cは極端なパフォーマンスと低レベルの制御が必要なシナリオに適しています。 1)Golangは、ごみ収集と並行機関のメカニズムを通じてパフォーマンスを向上させ、高配列Webサービス開発に適しています。 2)Cは、手動のメモリ管理とコンパイラの最適化を通じて究極のパフォーマンスを実現し、埋め込みシステム開発に適しています。

Golangの影響:速度、効率、シンプルさ Golangの影響:速度、効率、シンプルさ Apr 14, 2025 am 12:11 AM

speed、効率、およびシンプル性をspeedsped.1)speed:gocompilesquilesquicklyandrunseffictient、理想的なlargeprojects.2)効率:等系dribribraryreducesexexternaldedenciess、開発効果を高める3)シンプルさ:

CとGolang:パフォーマンスが重要な場合 CとGolang:パフォーマンスが重要な場合 Apr 13, 2025 am 12:11 AM

Cは、ハードウェアリソースと高性能の最適化が必要なシナリオにより適していますが、Golangは迅速な開発と高い並行性処理が必要なシナリオにより適しています。 1.Cの利点は、ハードウェア特性と高い最適化機能に近いものにあります。これは、ゲーム開発などの高性能ニーズに適しています。 2.Golangの利点は、その簡潔な構文と自然な並行性サポートにあり、これは高い並行性サービス開発に適しています。

Golang vs. Python:重要な違​​いと類似点 Golang vs. Python:重要な違​​いと類似点 Apr 17, 2025 am 12:15 AM

GolangとPythonにはそれぞれ独自の利点があります。Golangは高性能と同時プログラミングに適していますが、PythonはデータサイエンスとWeb開発に適しています。 Golangは同時性モデルと効率的なパフォーマンスで知られていますが、Pythonは簡潔な構文とリッチライブラリエコシステムで知られています。

GolangとC:パフォーマンスのトレードオフ GolangとC:パフォーマンスのトレードオフ Apr 17, 2025 am 12:18 AM

GolangとCのパフォーマンスの違いは、主にメモリ管理、コンピレーションの最適化、ランタイム効率に反映されています。 1)Golangのゴミ収集メカニズムは便利ですが、パフォーマンスに影響を与える可能性があります。

See all articles