0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DuckDB での AWS SSO での S3アクセス方法

Posted at

この記事の目的

DuckDB にて S3 上の parquet file へのアクセス方法を何度も忘れてしまうので、記録のために残す。なお v1.4.2 の挙動であることに注意されたい。(過去のversionでは違う挙動だった記憶があるため)

Disclamer

この記事の内容は、私個人の意見や見解であり、私が所属する組織の公式な立場、方針、意見を反映するものではありません。この記事の内容について、組織はいかなる責任も負いません。

実行環境

$ aws --version
aws-cli/2.32.2 Python/3.13.9 Darwin/24.6.0 source/arm64
$ duckdb --version
v1.4.2 (Andium) 68d7555f68

前準備: SSOでのログイン

my-profile-name を自分のプロファイル名として指定して AWS へ SSOログインをする。

aws sso login --profile my-profile-name

DuckDBでの方法

以下の2つの方法で実行できる

  • 方法1: 起動時に変数を渡して実行 AWS_PROFILE=... duckdb ...
  • 方法2: duckdbを起動して CREATE SECRET で明示的に指定

個人的結論として方法1を使う。

方法1

以下のようにシェル変数を渡してDuckDBを起動する。

AWS_PROFILE=my-profile-name duckdb

または環境変数として指定して起動する。

export AWS_PROFILE=my-profile-name
duckdb

最初にextensionのインストール

INSTALL aws; LOAD aws;

次に CREATE SECRET を実行する。
AWS_RESIONの環境変数を設定していない場合、 CREATE SECRET文で明示的に指定する必要がある。
(入力は ); まで)

初回の実行は数秒かかる。

CREATE OR REPLACE SECRET secret (
    TYPE s3,
    PROVIDER credential_chain,
    REGION 'ap-northeast-1'
);
100% ▕██████████████████████████████████████▏ (00:00:05.93 elapsed)     
┌─────────┐
 Success 
 boolean 
├─────────┤
 true    
└─────────┘

クエリを実行できるようになる。

D select count(*) from read_parquet('s3://your-bucket/path-to/data.parquet');
┌────────────────┐
  count_star()  
     int64      
├────────────────┤
    1234567     
 (1.23 million) 
└────────────────┘

方法2

DuckDBの起動

duckdb

方法1と同様、extensionのインストール(初回時のみ)

INSTALL aws; LOAD aws;

CHAIN ssoPROFILE 'my-profile-name' を明示的に指定する

CREATE OR REPLACE SECRET secret (
    TYPE s3,
    PROVIDER credential_chain,
    CHAIN sso,
    PROFILE 'my-profile-name',
    REGION 'ap-northeast-1'
);
┌─────────┐
 Success 
 boolean 
├─────────┤
 true    
└─────────┘

クエれる。

D select count(*) from read_parquet('s3://your-bucket/path-to/data.parquet');
┌────────────────┐
│  count_star()  │
│     int64      │
├────────────────┤
│    1234567     │
│ (1.23 million) │
└────────────────┘

なお、以下のような指定をした過去の記事が存在するが、v1.4.2の私の環境ではエラーとなる。(確かv1.3.0ぐらいまでは動いていた記憶がある)

D CREATE SECRET secret_s3 (
      TYPE S3,
      PROVIDER CREDENTIAL_CHAIN,
      CHAIN 'sso'
  );
Invalid Configuration Error:
Secret Validation Failure: during `generate` using the following:
Credential Chain: 'sso'

参考

その他

duckdb_secrets() で現在の credential 情報を確認できる。

D SELECT * FROM duckdb_secrets();
┌─────────┬─────────┬──────────────────┬────────────┬─────────┬──────────────────────┬─────────────────────────────────────────────────────────────────────────────────────────┐
  name     type        provider      persistent  storage         scope                                               secret_string                                      
 varchar  varchar      varchar        boolean    varchar       varchar[]                                                varchar                                         
├─────────┼─────────┼──────────────────┼────────────┼─────────┼──────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────┤
 secret   s3       credential_chain  false       memory   ['s3://', 's3n://'   name=secret;type=s3;provider=credential_chain;serializable=true;scope=s3://,s3n://,s3  
└─────────┴─────────┴──────────────────┴────────────┴─────────┴──────────────────────┴─────────────────────────────────────────────────────────────────────────────────────────┘
D

pythonから import duckdb しての実行についても方法1,方法2と同様の対応で問題ない。

以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?