ファイル転送用の Golang を使用した AWS Transfer Family
現代のテクノロジーの世界では、多くの組織にとって安全かつ効率的なファイル転送が不可欠です。アマゾン ウェブ サービスが提供するマネージド型の安全なファイル転送ソリューションである 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 と統合するために提案されたアーキテクチャ設計は、以下の図に示すように、次のコンポーネントで構成されます。
この記事で提案されている 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: キー名
- 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 ファイルに保存されます。
Transfer Family サービスの作成
AWS マネジメントコンソールにログインし、AWS Transfer Family サービスを選択してサーバーを作成します。
安全なファイル転送のために SFTP (SSH ファイル転送プロトコル) を選択し、[次へ] をクリックします。
ID プロバイダーを選択し、[管理対象サービス] を選択します。
エンドポイント構成で、「パブリックにアクセス可能」を選択し、「次へ」をクリックします。
ストレージ オプションとして「Amazon S3」を選択し、[次へ] をクリックします。
「追加の詳細の構成」セクションでは、設定をデフォルト値のままにします。
内容を確認し、「次へ」をクリックして作成します。
作成が完了すると、次のようなものが得られます。まだユーザーがいないことがわかり、パブリック エンドポイントを介して S3 をストレージとして使用して間もなく開始されることがわかります。
ロールを作成する
AWS 転送ファミリーから s3 サービス用の新しいロールを作成します。これを行うには、IAM サービスに移動し、AWS サービス タイプの新しいロールを作成し、ユースケースで [転送して次へ] を選択します。
S3 バケットへのフルアクセスを許可するアクセス許可ポリシー、AmazonS3FullAccess。ただし、このポリシーは非常に許容されるものであり、運用環境での使用はお勧めできません。そして次です。
ロールの名前「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]-----+
これは、「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
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
次に、Postman を使用してファイルを SFTP サーバーにアップロードします。次に、S3 に移動して、ファイルが正しくアップロードされたことを確認します。
ファイルは問題なくアップロードされました。
お読みいただきありがとうございます。
以上がファイル転送用の Golang を使用した AWS Transfer Familyの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











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

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

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

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

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

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

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