製品をチェック

Amazon S3 Cmdlets の30日間無償トライアルをダウンロード

 30日間の無償トライアルへ

製品の詳細

Amazon S3 アイコン Amazon S3 Cmdlets 相談したい

Amazon S3 データにリアルタイム連携を実現するPowerShell Cmdlets。Cmdlets を使って、SQL Server と同感覚で多様なデータにリアルタイムアクセス。

Amazon S3 データをPowerShell でMySQL にレプリケーションする方法

PowerShell のシンプルなスクリプトで、Amazon S3 データ をMySQL データベースにレプリケーション(複製)する方法を紹介します。

古川えりか
コンテンツスペシャリスト

最終更新日:2023-09-26
amazons3 ロゴ

CData

powershell ロゴ画像
MySQL ロゴ

こんにちは!ドライバー周りのヘルプドキュメントを担当している古川です。

CData Cmdlets for AmazonS3 を使えば、PowerShell からAmazon S3 データ データにリアルタイムで連携できます。データ同期などのタスクの連携にぴったりの製品です。 本記事では、PowerShell からCData Cmdlets for AmazonS3 およびCData Cmdlets for MySQL を使って、同期スクリプトを作成して実行します。

まずは、PowerShell でAmazon S3 への接続を行います。レプリケーションは4つのステップがあります。

Amazon S3 リクエストを認可するには、管理者アカウントまたはカスタム権限を持つIAM ユーザーの認証情報を入力します。AccessKey をアクセスキーID に設定します。SecretKey をシークレットアクセスキーに設定します。

Note: AWS アカウント管理者として接続できますが、AWS サービスにアクセスするにはIAM ユーザー認証情報を使用することをお勧めします。

尚、CData 製品はAmazon S3 のファイルの一覧表示やユーザー管理情報の取得用です。S3 に保管されているExcel、CSV、JSON などのファイル内のデータを読み込みたい場合には、Excel DriverCSV DriverJSON Driver をご利用ください。

アクセスキーの取得

IAM ユーザーの資格情報を取得するには:

  1. IAM コンソールにサインインします。
  2. ナビゲーションペインで「ユーザー」を選択します。
  3. ユーザーのアクセスキーを作成または管理するには、ユーザーを選択してから「セキュリティ認証情報」タブを選択します。

AWS ルートアカウントの資格情報を取得するには:

  1. ルートアカウントの資格情報を使用してAWS 管理コンソールにサインインします。
  2. アカウント名または番号を選択し、表示されたメニューで「My Security Credentials」を選択します。
  3. 「Continue to Security Credentials」をクリックし、「Access Keys」セクションを展開して、ルートアカウントのアクセスキーを管理または作成します。

AWS ロールとして認証

多くの場合、認証にはAWS ルートユーザーのダイレクトなセキュリティ認証情報ではなく、IAM ロールを使用することをお勧めします。RoleARN を指定することでAWS ロールを代わりに使用できます。これにより、CData 製品は指定されたロールの資格情報を取得しようと試みます。

(すでにEC2 インスタンスなどで接続されているのではなく)AWS に接続している場合は、ロールを引き受けるIAM ユーザーのAccessKey とSecretKey を追加で指定する必要があります。AWS ルートユーザーのAccessKey および SecretKey を指定する場合、ロールは使用できません。

SSO 認証

SSO 認証を必要とするユーザーおよびロールには、RoleARN およびPrincipalArn 接続プロパティを指定してください。各Identity Provider に固有のSSOProperties を指定し、AccessKey とSecretKey を空のままにする必要があります。これにより、CData 製品は一時的な認証資格情報を取得するために、リクエストでSSO 認証情報を送信します。

Amazon S3 データの取得

  1. モジュールのインストール:

    Install-Module AmazonS3Cmdlets
  2. Amazon S3 への接続:

    $amazons3 = Connect-AmazonS3 -AccessKey $AccessKey -SecretKey $SecretKey
  3. 取得ターゲットのリソースの取得:

    $data = Select-AmazonS3 -Connection $amazons3 -Table "ObjectsACL"

    Invoke-AmazonS3 cmdlet を使って、SQL-92 クエリを使用することもできます:

    $data = Invoke-AmazonS3 -Connection $amazons3 -Query 'SELECT * FROM ObjectsACL WHERE Name = @Name' -Params @{'@Name'='TestBucket'}
  4. 戻り値からカラム名のリストを保存します。

    $columns = ($data | Get-Member -MemberType NoteProperty | Select-Object -Property Name).Name

Amazon S3 データをMySQL データベースにレプリケーション

カラム名を指定できるようにして、データをMySQL データベースにレプリケーションします。

  1. モジュールのインストール:

    Install-Module MySQLCmdlets
  2. MySQL DB に、MySQL Server 名、ユーザー、パスワード、レプリケーション先のデータベース名を指定して、接続します:

    $mysql = Connect-MySQL -User $User -Password $Password -Database $Database -Server $Server -Port $Port
  3. Amazon S3、保存された値、そしてAdd-MySQL Cmdlet を使って、MySQL にデータを1レコードずつ挿入します。この例では、MySQL 側のテーブルは、Amazon S3 のリソース(ObjectsACL)と同じテーブル名を持っている必要があります。

    $data | % { $row = $_ $values = @() $columns | % { $col = $_ $values += $row.$($col) } Add-MySQL -Connection $mysql -Table "ObjectsACL" -Columns $columns -Values $values }

次回以降のレプリケーションをシンプルに実現

  • 一度PowerShell でAmazon S3 とMySQL に接続したら、次からは1行のコマンドでレプリケーションを実施できます:

    Select-AmazonS3 -Connection $amazons3 -Table "ObjectsACL" | % { $row = $_ $values = @() $columns | % { $col = $_ $values += $row.$($col) } Add-MySQL -Connection $mysql -Table "ObjectsACL" -Columns $columns -Values $values }
  • 別のPowerShell モジュールで、Amazon S3 を別のデータベースに複製する場合、Select-AmazonS3 cmdlet のデータから、カラム、接続およびテーブルを除外しておきましょう。これらのデータはデータ移動のときだけ必要となるためです。

    $columns = ($data | Get-Member -MemberType NoteProperty | Select-Object -Property Name).Name | ? {$_ -NotIn @('Columns','Connection','Table')}

おわりに

これで、Amazon S3 データをMySQL に複製できました。分析、BI などでAmazon S3 データをMySQL から使うことができるようになります。

関連コンテンツ

トライアル・お問い合わせ

30日間無償トライアルで、CData のリアルタイムデータ連携をフルにお試しいただけます。記事や製品についてのご質問があればお気軽にお問い合わせください。