Amazon S3 データをMySQL にレプリケーションするPowerShell スクリプト

詳細情報をご希望ですか?

無償トライアル:

ダウンロードへ

製品の詳細情報へ:

Amazon S3 Cmdlets

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



PowerShell でシンプルなスクリプトを記述し、Amazon S3 data をMySQL データベースにレプリケーション(複製)。

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

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

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

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

アクセスキーの取得

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

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

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

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

AWS ロールとして認証

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

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

SSO 認証

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

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

Notes

  • 一度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 のデータから、カラム、接続およびテーブルを除外する方がいいでしょう。これらのデータは、CData cmdlet からデータを移動する際にのみ必要なものだからです。:

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