11.3.1 外部サーバを定義する方法
外部表を定義する前に,外部サーバを定義しておく必要があります。外部サーバを定義するには,定義系SQLのCREATE SERVER文を実行します。CREATE SERVER文を実行するには,CONNECT権限とDBA権限が必要です。
- 重要
-
外部データがオブジェクトストレージに格納されている場合は,外部サーバを定義する必要があります。外部データがファイルストレージに格納されている場合は,外部サーバを定義する必要はありません。
外部サーバの定義例を次に示します。
- (例)
-
外部サーバ(FOREIGNSERVER1)を定義します。
CREATE SERVER "FOREIGNSERVER1" ...1 OPTIONS(ACCESS_KEY '6yTZJwzVjl6nYTjKICop' ...2 ,SECRET_KEY 'Bs6E43CgrwXYyX9jvVJpPgH8rOdTafeuVNrwGJf' ...3 ,ENDPOINT 'https://xxxx-yyz99:1234') ...4[説明]
-
定義する外部サーバの名称を指定します。
-
外部のオブジェクトストレージに接続する際の認証で使用するアクセスキーを指定します。
-
外部のオブジェクトストレージに接続する際の認証で使用するシークレットキーを指定します。
-
エンドポイントを使用する場合,URI形式のエンドポイントを指定します。
-
AWS環境でアクセスキーおよびシークレットキーを隠蔽したい場合は,ACCESS_KEYオプションとSECRET_KEYオプションを省略してください。その場合,認証情報を設定する必要があります。認証情報の設定方法には,IAMロールを使用する方法と,認証情報ファイルを使用する方法の2つがあります。両方の設定をした場合,認証情報ファイルを使用する方法が優先されます。それぞれの方法を以降で説明します。
- メモ
-
-
AWSでは,IAMロールを使用した認証情報の設定を推奨しています。
-
パブリックアクセスが許可されている認証情報を必要としないS3バケットの利用にセキュリティ上の問題がない場合は,認証情報の設定を省略できます。
-
- IAMロールを使用した認証情報の設定方法
-
S3バケットへのアクセスを許可するように設定したIAMロールを作成し,HADBサーバをインストールしたインスタンスにアタッチします。作成するIAMロールには,次のアクションを許可するIAMポリシーを関連づけてください。
-
S3オブジェクトの情報を取得するときに必要なアクション
s3:ListBucket*
-
S3オブジェクトを取得するときに必要なアクション
s3:GetObject*
-
ディレクトリバケットへのアクセスに必要なアクション
s3express:CreateSession
S3バケットとしてディレクトリバケットを使用する場合に必要なアクションです。
Amazon S3のアクセス制御の設定方法については,AWSのドキュメントのAmazon S3でのIdentity and Access ManagementまたはS3 Express One Zone 向け AWS Identity and Access Management (IAM)を参照してください。
インスタンスへのIAMロールのアタッチについては,AWSのドキュメントのAmazon EC2のIAMロールを参照してください。
-
- 認証情報ファイルを使用した認証情報の設定方法
-
HADBサーバをインストールしたインスタンスで,次の手順で認証情報ファイルを設定してください。
手順
-
AWS CLIをインストールする
AWS CLIを使用してAmazon S3に関する情報を取得するために,HADBサーバをインストールしたインスタンスにAWS CLIをインストールしてください。HADBサーバは,AWS CLIを次のどちらかで実行します。そのため,AWS CLIをインストールする際は,次のどちらかでawsコマンドが実行できるようにインストールパスを指定してください。
-
/usr/local/bin/aws
-
/usr/bin/aws
-
-
IAMポリシーを設定する
HADBサーバの運用で使用するIAMユーザに対して,IAMロールを使用した認証情報の設定方法でIAMロールに関連づけているものと同じIAMポリシーを設定してください。
-
HADB 管理者ユーザ(adbmanager)で次のAWS CLIのコマンドを実行する
aws configure
-
アクセスキーIDとシークレットアクセスキーを入力する
アクセスキーID(AWS Access Key ID)とシークレットアクセスキー(AWS Secret Access Key)の入力を求められます。入力例を次に示します。
$ aws configure AWS Access Key ID [None]: ARLYAHKBV4BD8GQEJRWJ AWS Secret Access Key [None]: N8jZZhCzETd5yCexhKsu2EXJbuhAH7gyZjHBzeQs Default region name [None]: ap-northeast-1 Default output format [None]: json
手順の2.でIAMポリシーを設定したIAMユーザのアクセスキーIDとシークレットアクセスキーを入力してください。
リージョン名(Default region name)と出力形式(Default output format)には,任意のリージョン名と任意の出力形式を指定してください。
aws configureコマンドの詳細については,AWSのドキュメントを参照してください。
-
認証情報ファイルの内容を確認する
adbmanagerのホームディレクトリ下にある.awsディレクトリ下に,認証情報ファイル(ファイル名:credentials)が作成されます。同名のファイルが存在する場合は,そのファイルの内容が更新されます。作成または更新された認証情報ファイルの内容を確認してください。
認証情報ファイル(/home/adbmanager/.aws/credentials)の例を次に示します。
[default] aws_access_key_id=ARLYAHKBV4BD8GQEJRWJ aws_secret_access_key=N8jZZhCzETd5yCexhKsu2EXJbuhAH7gyZjHBzeQs
認証情報ファイル中のdefaultプロファイルのaws_access_key_idとaws_secret_access_keyに,手順の2.でIAMポリシーを設定したIAMユーザのアクセスキーIDとシークレットアクセスキーが指定されていることを確認してください。
-
- 重要
-
AWS環境以外からAmazon S3またはAmazon S3と互換性のあるストレージにアクセスする場合,IMDS認証情報プロバイダーに対して不要な通信が発生し,それが原因でHADBサーバの実行性能が低下するおそれがあります。IMDS認証情報プロバイダーへの通信を無効化するために,環境変数AWS_EC2_METADATA_DISABLEDにtrueを設定することを推奨します。詳細については,AWSのドキュメントのIMDS認証情報プロバイダーを参照してください。