はじめに
AWSのデータを可視化するサービスQuickSight。
Redshiftなどのデータソースと連携して、そのデータを可視化するのですが、
パスワードを変更したなどなどの理由により、データソースへの認証情報だけを変更したい。ということが発生します。
QuickSightのWebコンソール画面上で変更しようとすると、
認証情報だけを変更したいのに使用しているテーブルは何か?などを選択しなければならなくなり、
それをいちいち調べるのも面倒です。
AWSCLIから変更することでスムーズに対応できたので、その記録を残しておきます。
今回はデータソースがRedshiftの場合のを記載していますが、
別のタイプのデータソースであっても同じように対応できると思います。
手順
AWSCLIを実行する環境は、CloudShellを使って作業しています。
namespaceはdefaultなので省略しています。
データセットから追っていって、データソースを特定し更新する手順となってます。
データセットIDを求める
list-data-sets でデータセットの一覧が取得できるので、その中からjqコマンドで目的のデータセットを探します。
[cloudshell-user@ip-10-10-10-10 ~]$ aws quicksight list-data-sets --aws-account-id 111111111111 | jq '.DataSetSummaries[] | select(.Name == "データセット名") | {"Name": .Name, "DataSetId": .DataSetId}'
{
"Name": "データセット名",
"DataSetId": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
}
[cloudshell-user@ip-10-10-10-10 ~]$
データソースIDを求める
describe-data-setでデータセットの詳細を見られるので、そこからデータセットに含まれるデータソースのデータソースIDを求めます
[cloudshell-user@ip-10-10-10-10 ~]$ aws quicksight describe-data-set --aws-account-id 111111111111 --data-set-id aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa | jq '.DataSet.PhysicalTableMap[].RelationalTable | {"DataSourceArn": .DataSourceArn, "Name": .Name}'
{
"DataSourceArn": "arn:aws:quicksight:ap-northeast-1:111111111111:datasource/bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb",
"Name": "データソース名"
}
[cloudshell-user@ip-10-10-10-10 ~]$
DataSourceArnの後半bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbbがデータソースIDです。
データソース詳細
データソースの更新に使うので、describe-data-sourceで詳細情報を確認します。
Name、DataSourceParametersの部分を更新時に使うのでメモっておきます。
[cloudshell-user@ip-10-10-10-10 ~]$ aws quicksight describe-data-source --aws-account-id 111111111111 --data-source-id bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb
{
"Status": 200,
"DataSource": {
"Arn": "arn:aws:quicksight:ap-northeast-1:111111111111:datasource/bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb",
"DataSourceId": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb",
"Name": "データソース名",
"Type": "REDSHIFT",
"Status": "UPDATE_SUCCESSFUL",
"CreatedTime": "2021-01-01T00:00:00.000000+00:00",
"LastUpdatedTime": "2021-01-01T00:00:00.000000+00:00",
"DataSourceParameters": {
"RedshiftParameters": {
"Host": "xxx.xxxx.ap-northeast-1.redshift.amazonaws.com",
"Port": 5439,
"Database": "データベース名",
"ClusterId": "クラスターID"
}
},
"SslProperties": {
"DisableSsl": false
}
},
"RequestId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
[cloudshell-user@ip-10-10-10-10 ~]$
接続情報の準備
データソースの更新に使う認証情報のテンプレートファイルを用意します。
update-data-source をgenerate-cli-skeletonオプションをつけて実行するとテンプレートが出力されます。
aws quicksight update-data-source --generate-cli-skeleton > cred.txt
出力されたcred.txtがこちら。長いので折りたたんでいます
{
"AwsAccountId": "",
"DataSourceId": "",
"Name": "",
"DataSourceParameters": {
"AmazonElasticsearchParameters": {
"Domain": ""
},
"AthenaParameters": {
"WorkGroup": ""
},
"AuroraParameters": {
"Host": "",
"Port": 0,
"Database": ""
},
"AuroraPostgreSqlParameters": {
"Host": "",
"Port": 0,
"Database": ""
},
"AwsIotAnalyticsParameters": {
"DataSetName": ""
},
"JiraParameters": {
"SiteBaseUrl": ""
},
"MariaDbParameters": {
"Host": "",
"Port": 0,
"Database": ""
},
"MySqlParameters": {
"Host": "",
"Port": 0,
"Database": ""
},
"OracleParameters": {
"Host": "",
"Port": 0,
"Database": ""
},
"PostgreSqlParameters": {
"Host": "",
"Port": 0,
"Database": ""
},
"PrestoParameters": {
"Host": "",
"Port": 0,
"Catalog": ""
},
"RdsParameters": {
"InstanceId": "",
"Database": ""
},
"RedshiftParameters": {
"Host": "",
"Port": 0,
"Database": "",
"ClusterId": ""
},
"S3Parameters": {
"ManifestFileLocation": {
"Bucket": "",
"Key": ""
}
},
"ServiceNowParameters": {
"SiteBaseUrl": ""
},
"SnowflakeParameters": {
"Host": "",
"Database": "",
"Warehouse": ""
},
"SparkParameters": {
"Host": "",
"Port": 0
},
"SqlServerParameters": {
"Host": "",
"Port": 0,
"Database": ""
},
"TeradataParameters": {
"Host": "",
"Port": 0,
"Database": ""
},
"TwitterParameters": {
"Query": "",
"MaxRows": 0
}
},
"Credentials": {
"CredentialPair": {
"Username": "",
"Password": "",
"AlternateDataSourceParameters": [
{
"AmazonElasticsearchParameters": {
"Domain": ""
},
"AthenaParameters": {
"WorkGroup": ""
},
"AuroraParameters": {
"Host": "",
"Port": 0,
"Database": ""
},
"AuroraPostgreSqlParameters": {
"Host": "",
"Port": 0,
"Database": ""
},
"AwsIotAnalyticsParameters": {
"DataSetName": ""
},
"JiraParameters": {
"SiteBaseUrl": ""
},
"MariaDbParameters": {
"Host": "",
"Port": 0,
"Database": ""
},
"MySqlParameters": {
"Host": "",
"Port": 0,
"Database": ""
},
"OracleParameters": {
"Host": "",
"Port": 0,
"Database": ""
},
"PostgreSqlParameters": {
"Host": "",
"Port": 0,
"Database": ""
},
"PrestoParameters": {
"Host": "",
"Port": 0,
"Catalog": ""
},
"RdsParameters": {
"InstanceId": "",
"Database": ""
},
"RedshiftParameters": {
"Host": "",
"Port": 0,
"Database": "",
"ClusterId": ""
},
"S3Parameters": {
"ManifestFileLocation": {
"Bucket": "",
"Key": ""
}
},
"ServiceNowParameters": {
"SiteBaseUrl": ""
},
"SnowflakeParameters": {
"Host": "",
"Database": "",
"Warehouse": ""
},
"SparkParameters": {
"Host": "",
"Port": 0
},
"SqlServerParameters": {
"Host": "",
"Port": 0,
"Database": ""
},
"TeradataParameters": {
"Host": "",
"Port": 0,
"Database": ""
},
"TwitterParameters": {
"Query": "",
"MaxRows": 0
}
}
]
},
"CopySourceArn": ""
},
"VpcConnectionProperties": {
"VpcConnectionArn": ""
},
"SslProperties": {
"DisableSsl": true
}
}
これを編集してRedshiftの認証情報だけにします。
先程のDataSourceParametersの値をもとに埋めます。
CredentialPairに新しいユーザーID/パスワードを記入します。
{
"DataSourceParameters": {
"RedshiftParameters": {
"Host": "xxx.xxxx.ap-northeast-1.redshift.amazonaws.com",
"Port": 5439,
"Database": "データベース名",
"ClusterId": "クラスターID"
}
},
"Credentials": {
"CredentialPair": {
"Username": "ユーザーID",
"Password": "パスワード"
}
}
}
更新
update-data-source でデータソースの認証情報を更新するのですが、
認証情報は先ほどのjsonファイル(cred.txt)を読み込ませることで更新します。
nameオプションは必須オプションなので元と同じデータソース名を指定しておきましょう。
[cloudshell-user@ip-10-10-10-10 ~]$ aws quicksight update-data-source --aws-account-id 111111111111 --data-source-id bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb --name データソース名 --cli-input-json file:///home/cloudshell-user/cred.txt
{
"Status": 202,
"Arn": "arn:aws:quicksight:ap-northeast-1:111111111111:datasource/bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb",
"DataSourceId": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb",
"UpdateStatus": "UPDATE_IN_PROGRESS",
"RequestId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
[cloudshell-user@ip-10-10-10-10 ~]$
しばらくしてWebコンソールで確認すると、認証が正常に行われ、更新が正常終了したことが確認できます。