現代のテクノロジーの世界では、多くの組織にとって安全かつ効率的なファイル転送が不可欠です。アマゾン ウェブ サービスが提供するマネージド型の安全なファイル転送ソリューションである 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]-----+ </path></path></path>
- パスフレーズを入力してください (パスフレーズがない場合は空白): キーのパスワード。
- 同じパスフレーズを再度入力します: キーのパスワードを確認します。
- あなたの 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]-----+ </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
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", } } </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 に移動して、ファイルが正しくアップロードされたことを確認します。
ファイルは問題なくアップロードされました。
お読みいただきありがとうございます。
以上がファイル転送用の Golang を使用した AWS Transfer Familyの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

GolangisidealforBuildingsCalables Systemsduetoitsefficiency andConcurrency、Whilepythonexcelsinquickscriptinganddataanalysisduetoitssimplicityand vastecosystem.golang'ssignencouragesclean、readisinediteNeditinesinedinediseNabletinedinedinedisedisedioncourase

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マニュアルメモリ管理により、パフォーマンスが高くなりますが、開発の複雑さが向上します。

WebサービスとシステムプログラミングへのGolangのアプリケーションは、主にそのシンプルさ、効率性、並行性に反映されています。 1)Webサービスでは、Golangは、強力なHTTPライブラリと同時処理機能を介して、高性能WebアプリケーションとAPIの作成をサポートしています。 2)システムプログラミングでは、Golangはハードウェアに近い機能とC言語との互換性を使用して、オペレーティングシステムの開発と組み込みシステムに適しています。

GolangとCには、パフォーマンスの比較に独自の利点と欠点があります。1。ゴーランは、高い並行性と迅速な発展に適していますが、ごみ収集はパフォーマンスに影響を与える可能性があります。 2.Cは、パフォーマンスとハードウェア制御を高くしますが、開発の複雑さが高くなります。選択を行うときは、プロジェクトの要件とチームのスキルを包括的な方法で考慮する必要があります。

Golangは、高性能および同時プログラミングシナリオに適していますが、Pythonは迅速な開発とデータ処理に適しています。 1.Golangは、シンプルさと効率性を強調し、バックエンドサービスとマイクロサービスに適しています。 2。Pythonは、データサイエンスと機械学習に適した簡潔な構文とリッチライブラリで知られています。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

WebStorm Mac版
便利なJavaScript開発ツール

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

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

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。
