ホームページ バックエンド開発 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)

Debian OpenSSLの脆弱性は何ですか Debian OpenSSLの脆弱性は何ですか Apr 02, 2025 am 07:30 AM

OpenSSLは、安全な通信で広く使用されているオープンソースライブラリとして、暗号化アルゴリズム、キー、証明書管理機能を提供します。ただし、その歴史的バージョンにはいくつかの既知のセキュリティの脆弱性があり、その一部は非常に有害です。この記事では、Debian SystemsのOpenSSLの共通の脆弱性と対応測定に焦点を当てます。 Debianopensslの既知の脆弱性:OpenSSLは、次のようないくつかの深刻な脆弱性を経験しています。攻撃者は、この脆弱性を、暗号化キーなどを含む、サーバー上の不正な読み取りの敏感な情報に使用できます。

フロントエンドからバックエンドの開発に変身すると、JavaやGolangを学ぶことはより有望ですか? フロントエンドからバックエンドの開発に変身すると、JavaやGolangを学ぶことはより有望ですか? Apr 02, 2025 am 09:12 AM

バックエンド学習パス:フロントエンドからバックエンドへの探査の旅は、フロントエンド開発から変わるバックエンド初心者として、すでにNodeJSの基盤を持っています...

GOの浮動小数点番号操作に使用されるライブラリは何ですか? GOの浮動小数点番号操作に使用されるライブラリは何ですか? Apr 02, 2025 pm 02:06 PM

GO言語の浮動小数点数操作に使用されるライブラリは、精度を確保する方法を紹介します...

Go's Crawler Collyのキュースレッドの問題は何ですか? Go's Crawler Collyのキュースレッドの問題は何ですか? Apr 02, 2025 pm 02:09 PM

Go Crawler Collyのキュースレッドの問題は、Go言語でColly Crawler Libraryを使用する問題を調査します。 �...

Beego ormのモデルに関連付けられているデータベースを指定する方法は? Beego ormのモデルに関連付けられているデータベースを指定する方法は? Apr 02, 2025 pm 03:54 PM

Beegoormフレームワークでは、モデルに関連付けられているデータベースを指定する方法は?多くのBEEGOプロジェクトでは、複数のデータベースを同時に操作する必要があります。 Beegoを使用する場合...

Goでは、Printlnとstring()関数を備えた文字列を印刷すると、なぜ異なる効果があるのですか? Goでは、Printlnとstring()関数を備えた文字列を印刷すると、なぜ異なる効果があるのですか? Apr 02, 2025 pm 02:03 PM

Go言語での文字列印刷の違い:printlnとstring()関数を使用する効果の違いはGOにあります...

Redisストリームを使用してGO言語でメッセージキューを実装する場合、user_idタイプの変換の問題を解決する方法は? Redisストリームを使用してGO言語でメッセージキューを実装する場合、user_idタイプの変換の問題を解決する方法は? Apr 02, 2025 pm 04:54 PM

redisstreamを使用してGo言語でメッセージキューを実装する問題は、GO言語とRedisを使用することです...

Golandのカスタム構造ラベルが表示されない場合はどうすればよいですか? Golandのカスタム構造ラベルが表示されない場合はどうすればよいですか? Apr 02, 2025 pm 05:09 PM

Golandのカスタム構造ラベルが表示されない場合はどうすればよいですか?ゴーランドを使用するためにGolandを使用する場合、多くの開発者はカスタム構造タグに遭遇します...

See all articles