はじめてのAWS Snowcone – (8) AWS DataSync Agentのセットアップ

2021.12.27

しばたです。

本記事ではSnowconeデバイスでAWS DataSync Agentを利用する方法について解説します。

目次

免責事項

本シリーズは実際にSnowconeを試すことで理解を深めることを目的としています。
このため執筆時点ではAWS Snowconeの仕組みや仕様について誤解している部分がある可能性があります。

記事の内容に誤りがあった場合は随時修正していく予定ですが、記事の内容が100%正しいことを保証できない点はご了承ください。

AWS SnowconeでAWS DataSync Agentを使うシナリオ

AWS Snowconeはそのリリース当初からAWS DataSyncのエージェント(仮想マシン)としての利用がサポートされており、データのオフライン転送だけではなくオンライン転送・同期にも使うことができます。

今回試している「Amazon S3へのインポート」ジョブはSnowcone内のNFSサーバーを経由してS3にデータをオフライン転送するのが主目的ですので正直DataSyncを併用するメリットは薄い気がします。
「ローカルコンピューティングとストレージのみ」ジョブの方がDataSyncを使うメリットがあると思います。

とはいえ、例えば「Amazon S3へのインポート」ジョブNFSサーバーを使い、このNFSサーバーとAWS側EFS *1をオンライン同期させS3はアーカイブ先とするといったこともできそうです。
実業務におけるDataSyncの使い方は様々でしょうが、今回は手っ取り早く検証したいのでSnowconeのNFSサーバーを転送元としてテスト用に用意したS3に同期させるまでを試そうと思います。

(検証メインなので実用性は考えていないです...)

1. DataSync Agentのセットアップ

今回はAWS OpsHubを使いDataSync Agentのセットアップを行います。
AWS OpsHubのインストールとデバイスの初期設定については以下の記事を参考にしてください。

以降の作業はAWS OpsHubにサインインした状態からはじめます。
デバイス詳細画面の「クラウドとの同期」欄を選び「開始」をクリックします。

これでエージェントの開始ダイアログが表示されVNIの指定を行います。
今回はDHCPを選び *2「エージェントを開始」をクリックします。

エージェントの作成が開始されるので完了するまで待ちます。

完了後は下図の様に「クラウドとの同期」状態が更新されます。
なお、「停止」ボタンを押すといきなりDataSync Agentを削除するので注意してください。

エージェントの作成はこれで完了です。

DataSync Agentの実体はEC2インスタンスであり「コンピューティング」欄を確認するとDataSyncという名前のEC2インスタンスが増えていることがわかります。

インスタンスタイプがsnc1.medium(2vCPU、4GBメモリ)でAMIが専用のものとなっています。
これは分かりやすいですね。

注意 : リソース不足時のエラー

DataSync Agentはインスタンスタイプがsnc1.medium(2vCPU、4GBメモリ)ですので他EC2との併用は不可です。
先にEC2を起動してる環境でDataSync Agentをセットアップしようとしても下図の様なリソース不足エラーとなるのでご注意ください。

DataSync エージェントの開始に失敗しました: Snowball has insufficient capacity to launch the instance in this request.

2. DataSync Agentのアクティベーション

次にこのDataSync Agentをアクティベートしてやる必要があります。
ここからはAWSマネジメントコンソールでの作業となります。

マネジメントコンソールからDataSync Agentの設定画面を開き、「Create Agent」をクリックします。

(AWS側の)エージェントの登録画面になりますので以下の内容を入力し「Get Key」をクリックします。

  • Hypervisor : EC2
  • Endpoint type : 利用リージョンのパブリックエンドポイント
  • Activation key : Automatically (HTTPアクセスでアクティベーションキーを取得)
  • Agent address : SnowconeのDataSync AgentのIPアドレス (今回は192.168.9.161)
    • なお、マネジメントコンソール利用環境(ブラウザ)から192.168.9.161へのリクエストが発生するのでアクセス可能にしておくこと

アクティベーションキーの取得が成功すると以下の画面になります。
エージェント名を決め「Create agent」をクリックします。

これでSnowconeデバイスのDataSync Agentのアクティベーションが完了しAWS環境と紐づけられました。

3. DataSync タスクの追加と実行

つづけて実際のデータ転送を行うタスクを作成します。
マネジメントコンソールのDataSync Agentの設定画面から「Create task」をクリックしタスクの作成ウィザードを開始します。

まずは送信元(Source)を設定します。
今回はSnowcone内のNFSサーバーにしますので以下の様に設定します。

  • Location type : NFS
  • Agents : 前節で作成したAgent
  • NFS Server : Snowcone NFSサーバーのIP (今回は192.168.9.155)
  • Mount path : NFSサーバーのマウントポイント (今回は/buckets/shibata-snowcone-test-2021を指定)
  • NFS Version : Automatic

次は送信先(Destination)を設定します。
今回はshibata-datasync-testというS3バケットとIAM Roleなどの事前に必要なものを事前に準備しています。

  • Location type : S3
  • S3 Bucket : 送信先のS3バケット (今回はshibata-datasync-testを予め準備済み)
  • S3 Storage class : 環境に応じて (今回はstandardにしている)
  • Folder : 環境に応じて
  • IAM Role : DataSyncのサービスが当該S3にアクセスできるロール (今回は適切なものを事前準備済み)

次はタスクの個別設定を行います。
NFSサーバー全部を同期すると時間がかかりそうだったため、NFSサーバー内に/datasync-test/というディレクトリを作りそこだけ同期する様にしています。

タスク名はsnowcone-nfs-taskとしています。
あまり意味はありませんが帯域幅を100MiB/sとしてみました。

データ転送設定は基本デフォルトですがIncule patternを/datasync-test/*として特定ディレクトリ配下のみを対象にしています。
また、タスクの実行スケジュールはとりあえず1時間ごとにしておきました。

タスク実行ログの設定も基本デフォルト設定のままです。

これで最終確認になりますので記載ミスが無いことを確認して「Create task」をクリックします。

タスクの作成が完了したらあとは実行されるのを待つだけです。

Snowcone側はシンプルに1ファイルだけデータを配置しておきました。

スケジュールされた時間になるとタスクが実行され、

無事完了しました。

S3を確認するとちゃんとデータが転送されています。

これでAWS SnowconeでのDataSync Agentの利用は完了です。

補足1 : EC2としてDataSync Agentを作成する

ここまでの説明でDataSync Agentの実体がEC2であることがわかりました。
EC2の作成画面から直接DataSync Agentを作成することも可能です。

EC2の作成画面でDataSync Agent用のAMISNC-DataSync-Agent-AMIを選択すると下図の様な画面でインスタンスを作れます。
他のAMIと異なりキーペアの指定ができない形となっています。

あとは普通にEC2を作って利用するだけです。

なおsnc1.mediumより低スペックのインスタンスタイプも選べるため、この様にDataSync Agent + Amazon Liunx 2 EC2の2台構成も仕組み上可能ですが、実際にDataSyncタスクを実行するとスペック不足のエラーとなるのでご注意ください。

(Snowconeの仕組み上は上図の様な構成を組めるが、実際には期待した動作をしない。)

Insufficient system memory. Minimum required is 4GiB; recommended is 16GiB

(Snowcone DataSync Agentでタスクを実行するにはメモリ4GB必要)

補足2 : DataSync Agentの内部について

AWS Snowcone以外でDataSync Agentを利用する場合はコンソール接続を前提としています。
AWS Snowconeではコンソール接続ができないのでDataSync Agent内部にログインする方法が私の知る限り存在しません。
(ドキュメントを調べましたが何も見つけることができませんでした...)

どうやらDataSync Agentのアクティベーション後はTCP 22(SSH)番ポートは空いている様なのですが、鍵もないですしパスワード認証もできない感じでした。
(コンソール接続時につかうadmin/passowrdではダメでした)

エージェント内部にログインできないので「静的IPを使用した場合のDNS設定はどうするんだろう?」としばらく悩んでいたのですが、実際に静的IPを使用してみたところ何も手を加えずともDataSyncタスクの実行まで普通にできてしまいました...
優先的に使うDNSサーバー設定が組み込まれているのかもしれません。パケットキャプチャすれば理由を推測できる気もするのですが、さすがにそこまでする気は起きませんでした。

終わりに

今回はここまでです。

これでAWS Snowconeの一通りの機能は試したのでそろそろデバイスを返却しようと思います。
次はCLIを使ったSnowconeの操作について解説する予定です。

脚注

  1. ここは別にEFSでなくても構いませんが...
  2. DataSync AgentのデフォルトがDHCP前提の様だったので...別途静的IP指定でも動作確認済みです