如何从查询中确定 account_id 和区域?

How to determine account_id and region from a query?

我有从多个账户中的多个 Amazon RDS 服务器提取的数据集,我真的很希望能够让 SQL 服务器实例告诉我哪个账户拥有它以及它位于哪个区域英寸

例如,这在动态构建 ARN 时非常理想:

SELECT id, 'arn:aws:quicksight:' + rdsadmin.dbo.get_region() +
    ':' + rdsadmin.dbo.get_account_id() + ':group/default/admin' AS groupArn
FROM my_rules_table

我查看了所有内容,但没有找到推断此信息的方法。我可以在每个具有静态值的服务器上创建这些 UDF 的唯一版本,但我真的更愿意动态获取实际值。

编辑: 考虑我的请求的另一种方式是,我想在 Amazon RDS 中执行我在所有其他 EC2 实例中可以执行的操作:

read -r account_id region <<< $(curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -r '. | "\(.accountId) \(.region)"')
echo "arn:aws:quicksight:$region:$account_id:group/default/admin"

这只是一种解决方法,因为 Amazon QuickSight 对用于获取数据的受支持 SQL 功能有特定要求。

我无法找到从 Amazon RDS for Microsoft® SQL Server® 公开的信息,因此我创建了一个 table 来在每个 RDS 实例中保存此信息:

CREATE TABLE rds_instance (
    id UNIQUEIDENTIFIER NOT NULL DEFAULT(NEWID()),
    account_id VARCHAR(20) NOT NULL,
    environment VARCHAR(20) NOT NULL,
    region VARCHAR(20) NOT NULL,
    active BIT NOT NULL DEFAULT(0),
    PRIMARY KEY (id)
);

account_idenvironmentregion 的值可以插入并在需要时使用。可以通过编程方式修改复制的数据库以用于其新位置:

UPDATE rds_instance SET active = 0;
INSERT INTO rds_instance (account_id, environment, region, active)
VALUES ('12341234123', 'stage', 'us-southwest-7', 1);

实例信息可用于在查询中生成 ARN,如下所示:

SELECT u.fkid, 'arn:aws:quicksight:' + ri.region + ':' + ri.account_id +
    ':user/' + ri.environment + '_ns/' + u.username AS userArn
FROM users AS u
    JOIN rds_instance AS ri ON (ri.active = 1)