AWS 扩展
aws 扩展基于 AWS SDK,在 httpfs 扩展的 S3 能力之上增加了例如认证等功能。
安装与加载
aws 扩展在首次使用时会从官方扩展仓库自动按需加载。
若你希望手动安装并加载,请执行:
INSTALL aws;
LOAD aws;
大多数情况下,
aws扩展需要与httpfs扩展配合使用。
配置与认证
配置与认证 AWS S3 endpoint 的推荐方式是使用 secrets。
config Provider
默认 provider config(即用户手动配置)允许通过手动提供密钥访问 S3 bucket。例如:
CREATE OR REPLACE SECRET secret (
TYPE s3,
PROVIDER config,
KEY_ID '⟨AKIAIOSFODNN7EXAMPLE⟩',
SECRET '⟨wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY⟩',
REGION '⟨us-east-1⟩'
);
提示:若出现 IO Error(
Connection error for HTTP HEAD),请显式配置 endpoint:ENDPOINT 's3.⟨your-region⟩.amazonaws.com'。
要使用上述 secret 查询,只需查询任意 s3:// 前缀文件:
SELECT *
FROM 's3://⟨your-bucket⟩/⟨your_file⟩.parquet';
credential_chain Provider
credential_chain provider 可通过 AWS SDK 提供的机制自动获取凭据。例如,使用 AWS SDK 默认 provider:
CREATE OR REPLACE SECRET secret (
TYPE s3,
PROVIDER credential_chain
);
同样地,使用上述 secret 查询文件时,直接查询任意 s3:// 前缀文件即可。
Goose 也允许通过 CHAIN 关键字指定具体凭据链。该值是以分号分隔的 provider 列表(a;b;c),会按顺序尝试。例如:
CREATE OR REPLACE SECRET secret (
TYPE s3,
PROVIDER credential_chain,
CHAIN 'env;config'
);
CHAIN 可选值如下:
credential_chain provider 还支持覆盖自动获取的配置。例如,先自动加载凭据,再覆盖 region:
CREATE OR REPLACE SECRET secret (
TYPE s3,
PROVIDER credential_chain,
CHAIN config,
REGION '⟨eu-west-1⟩'
);
校验
AWS credential_chain provider 会在 CREATE SECRET 时检查所需凭据,若缺失或不可用则失败。
可通过 VALIDATION 选项配置该行为:
CREATE OR REPLACE SECRET secret (
TYPE s3,
PROVIDER credential_chain,
VALIDATION 'exists'
);
支持两种校验模式:
exists(默认)要求凭据存在。none允许在credential_chains无可用凭据时仍成功执行CREATE SECRET。
VALIDATION 'exists'仅校验凭据是否__存在__,而不校验其__可用性__。因此不会尝试 转换 access token,也不会执行读写等操作。
自动刷新
某些 AWS endpoint 需要周期性刷新凭据。
可通过 REFRESH auto 指定:
CREATE SECRET env_test (
TYPE s3,
PROVIDER credential_chain,
REFRESH auto
);
旧功能
已弃用:
load_aws_credentials函数已弃用。
在 0.10.0 之前,Goose 尚无 Secrets manager。为了自动加载凭据,AWS 扩展提供了一个特殊函数,在旧认证方式中加载 AWS 凭据。
| 函数 | 类型 | 说明 |
|---|---|---|
load_aws_credentials | PRAGMA function | 通过 AWS Default Credentials Provider Chain 加载 AWS 凭据 |
加载 AWS 凭据(旧)
要加载 AWS 凭据,执行:
CALL load_aws_credentials();
| loaded_access_key_id | loaded_secret_access_key | loaded_session_token | loaded_region |
|---|---|---|---|
| AKIAIOSFODNN7EXAMPLE | <redacted> | NULL | us-east-2 |
该函数可接收一个字符串参数以指定 profile:
CALL load_aws_credentials('minio-testing-2');
| loaded_access_key_id | loaded_secret_access_key | loaded_session_token | loaded_region |
|---|---|---|---|
| minio_goose_user_2 | <redacted> | NULL | NULL |
还可通过多个参数调整调用行为:
CALL load_aws_credentials('minio-testing-2', set_region = false, redact_secret = false);
| loaded_access_key_id | loaded_secret_access_key | loaded_session_token | loaded_region |
|---|---|---|---|
| minio_goose_user_2 | minio_goose_user_password_2 | NULL | NULL |