Amazon Web Services ブログ
AWS Snowball Edge 上の Amazon S3 互換ストレージと AWS DataSync を使用してオブジェクトをレプリケートする
このブログは 2024 年 3 月 13 日に Brad Beaulieu(Booz Allen 社)、Christopher Smith(Principal Solutions Architect)、Dru Grote(Booz Allen Hamilton 社)によって執筆された内容を日本語化したものです。原文はこちらを参照してください。
2015 年の AWS Snowball デバイスの発表以来、ユーザーは Amazon Web Services(AWS)Snow Family を用いて、オンプレミスと AWS リージョン間でペタバイトのデータを転送することに成功しています。ユーザーは、AWS Snow Family を用いてデータを移行するだけではありません。AWS Snowball Edge Compute Optimized デバイスを使用して、ネットワーク接続が拒否される、中断する、断続的になる、制限される環境(DDIL = Denied, Disrupted, Intermittent or Limited)でデータの処理が必要なアプリケーションをホストすることが増えています。エッジでのデータ処理により、より迅速にインサイトを得ることができますが、長期保存のためにユーザーはエッジで取得したデータをアーカイブしてエンタープライズデータレイクに保存することがよくあります。データを AWS に送る最も簡単な方法は、インポートジョブプロセスの一部として AWS Snowball デバイスを返却することです。しかし、インポートジョブはオンプレミスから AWS への 1 回限りのデータ移動ソリューションであり、返送、集荷、データ取り込みに関する時間の遅れが発生します。
インポートジョブは、事業継続計画やレガシーデータの移行に関連する大規模なオフラインデータのクラウドへのバックアップには最適です。しかし、一回のインポートジョブでは、継続的にデータを選別し転送することが必要な機械学習(ML)モデルの再トレーニングや企業データに対するビジネスインテリジェンスレポーティングなどのユースケースが求めるニアリアルタイムのデータ転送パイプラインの要件を満たすことはできません。
2023 年の AWS Snowball Edge Compute Optimized デバイス上の Amazon Simle Storage Service (S3) 互換ストレージと、AWS Snowball デバイス上の Amazon S3 互換ストレージ向け AWS DataSync の提供開始により、データのライフサイクル要件を満たしながら、エッジを含めたあらゆる場所でデータを処理し保存することができます。
この記事では、AWS DataSync エージェントを Amazon Elastic Compute Cloud(Amazon EC2)互換のコンピュートインスタンスとして AWS Snowball Edge デバイスにロードする手順を説明します。また、AWS Snowball Edge の Amazon S3 互換ストレージバケットと AWS リージョンの Amazon S3 バケット間でオブジェクトを比較して転送するように AWS DataSync を設定します。この方法では、ネットワークが断続的な場合に組み込みのリトライとネットワーク回復メカニズムが機能します。さらに、AWS DataSync タスクはネットワーク接続が制限される場面でも最大帯域幅を指定することができます。どちらの機能も遠隔の通信環境や過酷な通信環境では必要とされるものです。
ソリューションの概要
このシナリオでは、カメラを用いて高解像度の非圧縮ビデオを AWS Snowball Edge デバイス上の Amazon S3 バケットに保存します。AWS Snowball Edge 上の Amazon EC2 互換のコンピュートインスタンス上で人工知能(AI)アプリケーションがビデオを処理して興味のある物体を特定します。分析後、生の映像はダウンサンプリングされ、人が確認できるようにアーカイブされる必要があります。
このソリューションには、以下の AWS サービスと機能が含まれています:
- AWS Snowball Edge Compute Optimized デバイスは、ローカルコンピューティングとストレージのみのジョブから作成します。
- データ用と Amazon Machine Images (AMI) 用の 2 つのバケットを用意した AWS Snowball Edge デバイス上の Amazon S3 互換ストレージ
- AWS リージョンの Amazon S3 バケットへオブジェクトをレプリケートするように設定された Amazon EC2 上で稼動する AWS DataSync エージェント
- AWS リージョンの Amazon S3 バケット
- AWS DataSync
図 1. AWS Snowball Edge、Amazon S3、AWS DataSync のアーキテクチャ
前提条件
この記事に従うには、以下の前提条件が必要です:
- 少なくとも 1 つの AWS リージョン(この例では、us-east-1 リージョンを使用)の管理者権限を持つ AWS アカウントが必要です。スタンドアロンの AWS アカウントを作成します。
- Amazon S3 互換のストレージがある AWS Snowball Edge、ロック解除コードとマニフェストファイルへのアクセス、インターネットへの接続環境が必要です。詳細については、「AWS Snowball Edge の開始方法」を参照してください。
- 電源とネットワークケーブル、および AWS Snowball Edge デバイスとワークステーションとインターネットを相互接続するためのネットワークデバイスなどの、AWS Snowball Edge およびワークステーションに関する追加の機材が必要です。
- 90 ギガバイト(GB)の空きストレージと AWS Snowball Edge へのネットワーク接続、および以下のソフトウェアがインストールされた Windows または Mac のワークステーションが必要です:
- AWS Command Line Interface (AWS CLI) >= 2.11.15
- AWS Snowball Edge Client (SBE CLI) >= 1.2.0
- AWS OpsHub for Snow Family >= 1.15.11
- Terraform >= 1.5.0
ウォークスルー
AWS Snowball Edge デバイス上の Amazon S3 互換ストレージから AWS リージョンの Amazon S3 バケットにオブジェクトをレプリケートするには、以下の手順を実行します:
- AWS Snowball Edge デバイスで Amazon S3 互換ストレージサービスを開始
- AWS Snowball Edge 上の Amazon S3 Control(バケット)と Amazon S3 API(オブジェクト)のエンドポイントと通信するように AWS CLI を設定
- AWS Snowball Edge 上に、2 つの Amazon S3 互換ストレージのバケットを作成
- AWS Snowball Edge デバイス上で VM Import/Export (VMIE) サービスを有効にするために、AWS Identity and Access Management (IAM) ロールとポリシーを作成
- Amazon EC2 インスタンスから AWS DataSync AMI を作成し、オンプレミス環境にエクスポート
- AWS Snowball Edge デバイス上に Amazon EC2 互換のコンピュートインスタンスとして AWS DataSync エージェントをインポートして起動
- Infrastructure-as-Code (IaC) をデプロイしてエージェントをアクティベートし、AWS DataSync タスクとロケーションを作成して、ユーザー定義のスケジュールで AWS Snowball Edge デバイスから AWS リージョンの Amazon S3 バケットにレプリケート
- AWS DataSync レプリケーションタスクを検証し実行
Step 1: AWS Snowball Edge デバイスで Amazon S3 互換ストレージサービスを開始
AWS Snowball Edge デバイスの注文、受け取り、インストール、ネットワーク接続の確立が完了した後、このステップではデバイスへの接続、設定、Amazon S3 互換サービスの起動を行います。デバイス上では S3-snow サービスと表現され、以下では S3-snow として参照します。
SBE CLI を使用して S3-snow サービスのロックを解除し、起動してください。または、AWS OpsHub for Snow Family を使用して、GUI でのワークフローを使用することもできます。
- AWS Snow Family Management Console からマニフェストファイルをダウンロードし、ロック解除コードをメモします。AWS Snowball Edge デバイスがお客様の施設にある間、不正アクセスを防ぐために、ロック解除コードとマニフェストファイルを別々の場所に保管することをお勧めします。
- ワークステーションで SBE CLI を使用して、AWS Snowball Edge の認証情報を持つプロファイルとして “snowsbe” を設定します:
snowballEdge configure --profile snowsbe
マニフェストファイルへのパス、ロック解除コード、および AWS Snowball Edge のエンドポイントを https://<IP ADDRESS> という形式で入力するよう求められます。
- 次のコマンドを使用して、AWS Snowball Edge デバイスのロックを解除します:
snowballEdge unlock-device --profile snowsbe
- 次のコマンドを実行して、デバイスのロックを解除したことを確認します:
snowballEdge describe-device --profile snowsbe
デバイスのロックが解除されたら、AWS Snowball Edge 上で Amazon S3 互換ストレージを設定する必要があります。このサービスには 2 つの Virtual Network Interfaces (VNI) が必要です。1 つは Amazon S3 API(オブジェクト)エンドポイント用で、もう 1 つは Amazon S3 Control(バケット)エンドポイント用です。エッジデバイスと AWS リージョン間でバケットを同期するタスクを実行するために、AWS DataSync エージェントが通信する Amazon S3 エンドポイントのホスト名またはインターネットプロトコル(IP)アドレスを指す Terraform 変数値を後で設定します。2 つの異なるエンドポイントを区別する最も簡単な方法は、バケットとオブジェクトのどちらに対してアクションを実行しているかを確認することです。Amazon S3 Control エンドポイントはバケット操作用で、Amazon S3 API エンドポイントはオブジェクト操作用です。
- 次のコマンドを実行して、デバイスの物理ネットワークインターフェース ID を取得します:
snowballEdge describe-device --profile snowsbe
- AWS Snowball Edge デバイスと同じサブネット上で利用可能な IP アドレスを 2 つ特定します。次のコマンドを実行して VNI を作成し、“VirtualNetworkingInterfaceArn” の値を取得します。これを 2 回 — Amazon S3 エンドポイントごとに 1 回ずつ(各 IP アドレスは別々に入力する必要があります)実行する必要があります:
snowballEdge create-virtual-network-interface --ip-address-assignment static --physical-network-interface-id "<PHYSICAL_INT_ID>" --static-ip-address-configuration IpAddress=<IP_ADDRESS>,NetMask=<NETMASK> --profile snowsbe
- S3-snow サービスを開始し、先程作成した IP アドレスの VNI Amazon Resource Names (ARN) を指定します(指定する順番によって、Control かオブジェクトエンドポイントかが決まります):
snowballEdge start-service --service-id s3-snow --device-ip-addresses <SNOWBALL_IP> --virtual-network-interface-arns <S3_CONTROL_VNI_ARN> <S3_OBJECT_VNI_ARN> --profile snowsbe
オプション: 次のコマンドを実行して、サービスがアクティブであることを確認します:
snowballEdge describe-service --service-id s3-snow --profile snowsbe
Step 2: AWS Snowball Edge 上の Amazon S3 Control(バケット)と Amazon S3 API(オブジェクト)のエンドポイントと通信するように AWS CLI を設定
AWS Snowball Edge 上で Amazon S3 互換のストレージサービスが有効になったので、Amazon S3 Control と Amazon S3 API コマンドを使用するために AWS CLI の認証情報を設定する必要があります。
1. 次のコマンドを実行して、SBE CLI からアクセスキーを取得します:
snowballEdge list-access-keys --profile snowsbe
2. アクセスキーを使って、対応するシークレットアクセスキーを取得します:
snowballEdge get-secret-access-key --access-key-id <ACCESS_KEY_ID> --profile snowsbe
3. AWS Snowball Edge の証明書とそれぞれの ARN をリストします:
snowballEdge list-certificates --profile snowsbe
4. 前述の証明書の ARN 値を使用して、AWS Snowball Edge の証明書をダウンロードしてローカルに保存します。出力された証明書を拡張子「.pem」のファイルに保存します:
snowballEdge get-certificate --certificate-arn <CERT_ARN> --profile snowsbe > ~/.aws/snowsbe_cert.pem
5. .pem ファイルの権限を読み取り専用に設定し、システム上の他のユーザーがアクセスできないようにします:
a. Linux の場合: chmod 400 ~/.aws/snowsbe_cert.pem
b. Windows の場合: ファイルを右クリック > プロパティ > 読み取り専用に切り替える
6. ~/.aws/config ファイルを編集し、この AWS Snowball Edge デバイス用のプロファイルを作成します:
Step 3: AWS Snowball Edge 上に、2 つの Amazon S3 互換ストレージのバケットを作成
AWS Snowball Edge デバイスの AWS CLI プロファイルを設定した後、AWS CLI から Amazon S3 Control API にアクセスして Amazon S3 バケットを作成できます。
- ダウンサンプリングした動画を保存するバケットを AWS Snowball Edge 上に作成します:
aws s3control create-bucket --bucket <downsampled-bucket-video> --profile snowsbe --endpoint-url https://<S3_CONTROL_IP>
- 次に、AWS DataSync エージェントを AMI として保存するバケットを作成します:
aws s3control create-bucket --bucket <ami-bucket> --profile snowsbe --endpoint-url https://<S3_CONTROL_IP>
Step 4: AWS Snowball Edge デバイス上で VM Import/Export (VMIE) サービスを有効にするために、AWS Identity and Access Management (IAM) ロールとポリシーを作成
AWS DataSync エージェントを AWS Snowball Edge 上の Amazon EC2 互換のコンピュートインスタンスとしてインポートするには、VMIE サービスを使用します。AWS Snowball Edge へと VMIE サービスを適用するには、インポート処理に必要な権限を与えられた AWS IAM ロールと AWS IAM ポリシーが必要です。
この例では、AWS CLI を使用して AWS IAM ポリシーと AWS IAM ロールを作成し、AWS IAM ポリシーを AWS IAM ロールにアタッチして、AWS Snowball Edge 上の VMIE サービスが AWS IAM ロールを引き受けるための AWS IAM 信頼ポリシーを作成します。AWS OpsHub の GUI を使用した AWS IAM ポリシーの設定に関するウォークスルーは、この Amazon Storage Blog の Step 3 を参照してください。
- AWS IAM 信頼ポリシーファイルをローカルにダウンロードし、”trust-policy.json” と名付けます:
- 参照した trust-policy.json を使用して AWS IAM ロールを作成します:
aws iam create-role --role-name vmimport --assume-role-policy-document file://trust-policy.json --profile snowsbe --endpoint https://<SNOWBALL_IP>:6089
- AWS IAM ポリシーファイルをローカルにダウンロードし、”iam-policy.json” と名前を付けます。AWS アカウント ID、AWS Snowball Edge のジョブ ID、Step 3.2 で作成した <ami-bucket> を反映するようにファイルを編集します。
- iam-policy.json ファイルを使用して、AWS Snowball Edge で AWS IAM ポリシーを作成します:
aws iam create-policy --policy-name vmimport-resource-policy --policy-document file://iam-policy.json --profile snowsbe --endpoint https://<SNOWBALL_IP>:6089
- 前のステップの AWS IAM ポリシーの ARN を使用して、AWS IAM ポリシーの vmimport-resource-policy を AWS IAM ロールである vmimport にアタッチします:
aws iam attach-role-policy --role-name vmimport --policy-arn arn:aws:iam::<ACCOUNT-ID>:policy/vmimport-resource-policy --profile snowsbe --endpoint https://<SNOWBALL_IP>:6089
Step 5: Amazon EC2 インスタンスから AWS DataSync AMI を作成し、オンプレミス環境にエクスポート
AWS DataSync を設定する最初のステップは、AWS DataSync エージェントをデプロイすることです。AWS DataSync エージェントをデプロイする場所を選択する場合は、できるだけ AWS Snowball Edge に近い場所にデプロイしレイテンシを削減し、AWS DataSync のインライン圧縮を使用し転送時間とネットワーク転送コストを削減します。この例では、AWS DataSync エージェントを AWS SnowBall Edge 上に直接デプロイし、Amazon S3 互換ストレージサービスへのレイテンシを低減すると同時に、ローカルコンピューティング機能を使用します。
Amazon EC2 インスタンスに最新の AWS DataSync エージェントをデプロイして、AWS リージョンにプライベートの AWS DataSync エージェント AMI を作成します。この方法では、以下の手順で AWS Snowball Edge 上で AWS DataSync エージェントを実行する際に、SSH 経由でローカルコンソールにアクセスすることができます:
1. AWS Snowball Edge 上の VMIE サービスに関する Step 4 のガイダンスと同様に、AWS リージョンタイプの VMIE サービスに必要な前準備を完了して、AWS DataSync エージェントのイメージを Amazon S3 にエクスポートする準備をします:
a. AWS DataSync サービスと同じ AWS リージョンに、イメージを保存するための Amazon S3 バケットを作成 します。
b. 適切な権限を持つ VMIE サービス用の AWS IAM ロールを作成します。
2. 以下のガイダンスに従って、AWS DataSync エージェントを Amazon EC2 インスタンスとしてデプロイします:
a. AWS DataSync AMI には、AWS DataSync サービスおよび Amazon S3 バケットと同じ AWS リージョンを使用します。
b. 以下の設定でインスタンスを起動します:
i. c4.xl インスタンスを使用します。これは前世代の xen ハイパーバイザーで実行され、AWS Snowball Edge にインポートする前に、必要なネットワークとストレージのドライバーがインストールされていることを確認します。
ii. 後でローカルにおいて AWS Snowball Edge デバイス上でキーペアを作成できるため、ログイン用のキーペアを作成せずに進めます。
iii.リージョンのデフォルト Amazon VPC サブネットを選択します。
iv. パブリック接続は不要なので、パブリック IP の自動割り当てを無効にします。
v. 既存のデフォルトセキュリティグループを選択して、インバウンド接続を制限します。
vi. ブロックデバイスマッピングで、暗号化された Amazon Elastic Block Store(Amazon EBS)スナップショットを含むイメージをエクスポートできないため、Amazon EBS ボリュームは暗号化しません。AWS リージョンがデフォルトで Amazon EBS ボリュームを暗号化しないことを確認します。
3. インスタンスを数分間実行後、インスタンスを停止して AMI を作成する準備をします。
4. 停止した AWS DataSync 用の Amazon EC2 インスタンスから AMI を作成します。
5. VMIE サービスを使用して AMI をエクスポートします。
a. Step 5.4 の ami-id を使用します。
b. RAW の disk-image-format を使用します。
c. Step 5.1 の Amazon S3 バケット名 “S3Bucket=<name>” を使用します。
d. デフォルトの Amazon S3 プレフィックス値 “S3Prefix=export/” を使用します。
6. AWS DataSync エージェント用の Amazon EC2 インスタンスを終了します。
7. Step 5.5 で作成した Amazon S3 バケットから、.raw イメージファイルをローカルマシンにダウンロードします。 AWS Management Console を使用することもできますが、AWS CLI は大きなデータの転送に最適化されています。ファイルサイズが ~80 GB あるので、高速なインターネット接続の使用を推奨します:
aws s3 cp s3://<export bucket name>/export/<image-name>.raw <path for local object storage>/datasync-agent.raw
Step 6: AWS Snowball Edge デバイス上に Amazon EC2 互換のコンピュートインスタンスとして AWS DataSync エージェントをインポートして起動
AWS DataSync エージェントイメージを AWS Snowball Edge にサイドロードする準備ができました。エージェント登録キーの取得やトラブルシューティング時のサポートのために AWS DataSync エージェントのローカルコンソールにアクセスする必要がある場合は、必ずローカルの AWS SnowBall Edge キーペアを作成し、そのキーを関連付けた Amazon EC2 互換のコンピュートインスタンスを起動してください。
この例では、以下の手順で Terraform を使用して AWS DataSync エージェントをアクティベートしたため、関連する SSH キーペアなしで AWS DataSync エージェントを AWS Snowball Edge デバイスにデプロイしました:
1. AWS DataSync エージェントのイメージをアップロードして、AWS SnowBall Edge 上で Amazon EC2 互換のコンピュートインスタンスとして実行します:
a. datasync-agent.raw イメージファイルを S3-snow における ami-bucket(Step 3.2 で作成)へとアップロードします。.raw ファイルは約 85 GB なので、デバイスにローカル接続されていない場合は、高帯域幅のネットワークを介してアップロードすることをお勧めします。
aws s3 cp datasync-agent.raw s3://<ami-bucket>/datasync-agent --profile snowsbe --endpoint-url https://<S3_OBJECT_IP>
b. アップロードされた datasync-agent.raw イメージをスナップショット <SNAPSHOT_ID> としてインポートします:
aws ec2 import-snapshot --disk-container "Format=RAW,UserBucket={S3Bucket=<ami-bucket>,S3Key=datasync-agent}" --description "DataSync Image" --profile snowsbe --endpoint https://<SNOWBALL_IP>:8243
c. .raw ファイルからスナップショットへのインポートが完了したことを判断するには、ステータスが “Pending” から “Completed” に変わったことを確認します:
aws ec2 describe-import-snapshot-tasks --profile snowsbe --endpoint https://<SNOWBALL_IP>:8243
d. スナップショットを AMI として登録します。前のステップで SnapshotID をキャプチャし、Mac または Windows ターミナルを使用して以下を更新してください:
aws ec2 register-image --name DataSync --description "DataSync agent" --block-device-mappings "[{\"DeviceName\": \"/dev/sda1\",\"Ebs\":{\"Encrypted\":false,\"DeleteOnTermination\":false,\"SnapshotId\":\"<SNAPSHOTID>\",\"VolumeSize\":80}}]" --root-device-name /dev/sda1 --profile snowsbe --endpoint https://<SNOWBALL_IP>:8243
2. AWS DataSync エージェントのセキュリティグループを作成します。デフォルトの AWS Snowball Edge セキュリティグループは、インバウンドとアウトバウンドのすべてのトラフィックを許可します。AWS Snow Family でのセキュリティグループの詳細については、「AWS Snowball Edge デバイスでのセキュリティグループの使用と管理」を参照してください。ユースケースの要件に合わせて AWS DataSync ネットワーク要件を確認します。以下の手順に従って、AWS DataSync エージェントのテストとアクティベーションのために、インバウンドのネットワーク接続を制限しました:
a. ‘datasync-agent’ という新しいセキュリティグループを作成します:
aws ec2 create-security-group --group-name datasync-agent --description "Security group for the DataSync agent operating as EC2-compatible compute instance" --profile snowsbe --endpoint https://<SNOWBALL_IP>:8243
b. 前のコマンドの group-ID 値と LAN のサブネットを使用して、接続テスト用に ICMP を許可するインバウンドルールエントリーを作成します:
aws ec2 authorize-security-group-ingress --group-id <s.sg-id> --ip-permissions '[{"IpProtocol": "icmp", "FromPort": -1, "ToPort": -1, "IpRanges": [{"CidrIp": "<Local Area Network Subnet/CIDR >", "Description": "ICMP inbound from local area network"}]}]' --profile snowsbe --endpoint https://<SNOWBALL_IP>:8243
c. Terraform ワークステーション(例えばローカルワークステーション)から Amazon EC2 DataSync エージェントをアクティベートするために、HTTP (TCP/80) を許可するインバウンドルールエントリーを作成します。このルールは、Amazon EC2 互換のコンピュートインスタンスのローカルコンソールから SSH 経由で AWS DataSync エージェントのアクティベーションキーを取得しない場合に必要です:
オプション: ワークステーションの IP から AWS DataSync エージェントへのローカルコンソールアクセス用に SSH 接続を許可するインバウンドルールエントリーを作成します。
aws ec2 authorize-security-group-ingress --group-id <s.sg-id> --protocol tcp --port 22 --cidr <local workstation IP/32> --profile snowsbe --endpoint https://<SNOWBALL_IP>:8243
d. セキュリティグループルールの構成を検証します:
aws ec2 describe-security-groups --group-id <s.sg-id> --profile snowsbe --endpoint https://<SNOWBALL_IP>:8243
3. AWS DataSync エージェントを AWS Snowball Edge 上の Amazon EC2 互換コンピュートインスタンスとして起動します:
a. AWS DataSync エージェント AMI を起動します:
aws ec2 run-instances --image-id <IMAGE_ID> --instance-type sbe-c.2xlarge --profile snowsbe --endpoint https://<SNOWBALL_IP>:8243
b. 状態の “Name” が Running に変わるまで状態を確認します:
aws ec2 describe-instances --profile snowsbe --endpoint https://<SNOWBALL_IP>:8243
c. インスタンスが Running 状態になったら、SBE CLI を使用して AWS DataSync エージェント用の Amazon EC2 互換のコンピュートインスタンスに IP アドレスを割り当てます。物理インターフェース ID は、前の Step 1.5 で確認できます。インスタンスの LAN サブネットで使用可能な IP を選択します:
snowballEdge create-virtual-network-interface --physical-network-interface-id <PHYSICAL_INT_ID> --ip-address-assignment STATIC --static-ip-address-configuration IpAddress=<IP_ADDRESS>,Netmask=<NETMASK> --profile snowsbe
d. VNI をインスタンスに関連付けます:
aws ec2 associate-address --public-ip <IP_ADDRESS> --instance-id <DATASYNC_INSTANCE_ID> --profile snowsbe --endpoint https://<SNOWBALL_IP>:8243
e. 新しいセキュリティグループ datasync-agent をインスタンスに割り当て、デフォルトのセキュリティグループを置き換えます:
aws ec2 modify-instance-attribute --instance-id <datasync instance ID> --groups <s.sg-id> --profile snowsbe --endpoint https://<SNOWBALL_IP>:8243
f. 以下の 2 つのステップのいずれかで、AWS DataSync エージェントをアクティベートします:
i. Terraform ワークステーションから AWS DataSync エージェントにアクセスできる場合は、Terraform の datasync_agent_ip_address 変数に AWS DataSync エージェントの IP アドレスを入力します。以下の Terraform を適用すると、エージェントは自動的にアクティベートします。
ii. Terraform から AWS DataSync エージェントにアクセスできない場合(AWS Management Console にアクセスするワークステーションが http://<AGENT_ADDRESS> の AWS DataSync エージェントにアクセスできることを確認してください)、AWS Management Console からアクティベーションキーを取得します:
1. AWS Management Console で AWS DataSync サービス を開き、エージェントを選択します。リージョンが AWS Snowball Edge と同じであることを確認します。
2. エージェントの作成を選択します。
3. Activation key セクションで、エージェントのアドレス欄に AWS DataSync エージェントの IP アドレスを入力し、キーを取得するを選択します。
4. アクティベーションキーをコピーし、Terraform の datasync_agent_activation_key 変数に入力します:
Step 7: Infrastructure-as-Code (IaC) をデプロイしてエージェントをアクティベートし、AWS DataSync タスクとロケーションを作成して、ユーザー定義のスケジュールで AWS Snowball Edge デバイスから AWS リージョンの Amazon S3 バケットにレプリケート
AWS DataSync エージェントがデプロイされたので、Terraform を使ってこれらのタスクを実行します:
- エージェントをアクティベートします。
- Amazon S3 バケットと Amazon CloudWatch ロググループを暗号化するために、2 つの AWS Key Management Service (AWS KMS) キーを作成します。
- 暗号化された Amazon S3 バケットを作成し、AWS DataSync タスクからダウンサンプリングされた動画を受け取ります。
- AWS DataSync タスクの実行ログを保存するために、暗号化された Amazon CloudWatch ロググループを作成します。
- エージェントが実行する AWS DataSync タスクを作成します。AWS Management Console の代わりに、このチュートリアルガイドを使用することができます。
- AWS DataSync タスクのソースバケットと宛先バケットを設定します。
- AWS DataSync タスクを毎晩実行するようにスケジュールします。
設定した AWS DataSync タスク構成では、ソースバケットと宛先バケット間で変更されたデータまたは異なるデータのみを転送することで、時間とコストを節約しています。S3-snow バケット内のダウンサンプリングされた動画ファイルは、外部アプリケーションによって定期的に自動的に削除されるため、宛先バケットからも削除されないように、削除されたファイルを保持する設定(デフォルト)を適用しています。
また、Amazon S3 バケットライフサイクルルールを用いて、一定期間が経過したファイルを自動的に削除することもできます。 Amazon CloudWatch Logs 上の AWS DataSync 実行ログは、コスト最適化のため 30 日間しか保持しないことに注意してください。ログ保持のニーズに合わせて更新してください。
a. provider.tf ファイルをローカルにダウンロードし、Terraform の作業ディレクトリにロードします。
b. variables.tf ファイルをローカルにダウンロードし、Terraform の作業ディレクトリにロードします。
c. main.tf ファイルをローカルにダウンロードし、Terraform の作業ディレクトリにロードします。
erraform.tfvars のようなファイル内の変数は環境に応じて設定してください。また、使用する前に以下の variables.tf の変数も修正してください:
- local_storage_hostname -クォーテーションで囲まれた文字列である <S3_OBJECT_IP>
- local_storage_bucket -クォーテーションで囲まれた文字列である <downsampled-bucket-video>
- local_storage_certificate -Step 2.6 で設定したパスとオブジェクト名
- aws_region -us-east-1 を使用していない場合は変更
- datasync_agent_ip_address または datasync_agent_activation_key -Step 6.3 f で選択したアクティベート方法に対して null をクォーテーションで囲んだ文字列型に置き換えて設定
さらに、以下のシェル変数をそれぞれ AWS SnowballEdge デバイスのアクセスキーとシークレットアクセスキーに設定します:
export TF_VAR_local_storage_ak="SNOWBALLEDGE_ACCESS_KEY_ID"
export TF_VAR_local_storage_sk="SNOWBALLEDGE_SECRET_ACCESS_KEY"
または、Terraform の適用中にプロンプトが表示されたら、キー情報を入力することもできます。
Terraform ファイルを含む作業ディレクトリに移動し、マニフェストを適用します:
terraform init
terraform apply
Step 8: AWS DataSync レプリケーションタスクを検証し実行
全ての設定が適切であることを確認するには、S3-snow バケット <downsampled-bucket-video> にファイルをアップロードし、手動で AWS DataSync タスクを実行します:
- テストファイルを S3-snow バケットにアップロードします:
aws s3 cp <testvideo.mpg> s3://<downsampled-bucket-video>/<testfile.mpg> --profile snowsbe --endpoint-url https://<S3_OBJECT_IP>
- AWS DataSync タスクを実行します。<DATASYNC_TASK_ARN> は terraform apply の出力の最終行、またはコンソールの AWS DataSync サービスページの タスク にあります:
aws datasync start-task-execution --task-arn <DATASYNC_TASK_ARN>
- 前のステップの出力で表示されたタスク実行 ARN から、タスクのステータスをチェックします:
aws datasync describe-task-execution --task-execution-arn <TASK_EXECUTION_ARN>
タスクが “Success” を返した場合、テストファイル (testvideo.mpg) は Amazon S3 の宛先バケットで利用可能になっているはずです。タスクが “Success” 以外のステータスで終了した場合、Amazon CloudWatch 上のタスク実行に関するログを確認することでトラブルシュートできます。“/aws/datasync/” に続くランダムな 12 文字のプレフィックスを持った Amazon CloudWatch のロググループをチェックしてください。
タスクのステータスを監視し、失敗した際に通知を作成するために、Amazon EventBridge ルールを設定することもできます。また、監査目的で Amazon CloudWatch 上のログの保持期間を 30 日以上に設定したり、コスト最適化のために Amazon S3 バケットキーを有効にすることもできます。
2,000 万以上のファイル、オブジェクト、およびディレクトリをレプリケートするには、AWS DataSync エージェントに用いるインスタンスタイプを sbe-c.2xlarge から sbe-c.4xlarge に変更し、必要要件である 64 GB のメモリを確保してください。
最後に、AWS DataSync がこれらのリクエストをどのように使用し、Amazon S3 のコストにどのような影響を与えるかをよりよく理解するために、AWS DataSync を使用する際の Amazon S3 のリクエストコストを調べることをお勧めします。
クリーンアップ
Terraform でデプロイしたインフラストラクチャを破棄するには、まず AWS リージョンの Amazon S3 バケットに保存されているオブジェクトをすべて完全に削除します。また、新しく作成した Amazon S3 バケットの削除防止を解除するために、main.tfコードの 77 行目をコメントアウトまたは削除する必要があります。
最後に、ターミナルウィンドウから以下を実行します:
terraform destroy
まとめ
この記事では、AWS DataSync を設定してエッジから AWS リージョンにデータを自動的かつ効率的に移行する方法を紹介しました。AWS Snowball Edge デバイス上の Amazon S3 互換ストレージを設定するために必要な手順を詳しく説明し、AMI とアプリケーションデータ用に 2 つのバケットを作成しました。AWS Snowball Edge に AWS DataSync エージェントをデプロイし、AWS Snowball Edge の Amazon S3 互換バケットから Amazon S3 バケットに変更されたデータを定期的に自動移行する AWS DataSync タスクをプログラムで構成する方法を説明しました。
このソリューションの全部または一部を使用することで、現場の AWS Snowball Edge デバイスとお客様のご希望の AWS リージョン間のあらゆるメディアデータの同期に関連するタイムラグを簡素化および削減し、機械学習の運用パイプラインやエンタープライズデータレイクへの保存などのユースケースを実現することができます。