AWS boto3でSSOを突破したい!

プログラミング
この記事は約4分で読めます。

みなさん、こんにちは!

圧が強い。。。と言われそうですね笑

今日は、AWS s3に置いている大量のJSONファイルをローカル上にダウンロードする必要が出てきたのですが、、、
s3ってコンソールでダウンロードするのは、かなーーーーりめんどくさい。ですよね。。。

コンソール上でチェックボタンを入れて、複数選択した状態ではダウンロードできない。。。

CLIでやるのも一手間。。。

であれば、
もういっそのことひとつPythonで書いちゃいえ!

ということで、今回はサクッと書いてみました笑
みなさんの参考になれば幸いです。(参考にならなくても広めてほしいです笑)

今回のポイント

まずはターミナル上で、aws sso login –profile xxxx でSSOログインします。
・その後、Pythonの中で利用するSSO Profile名をboto3.sessionで使います
・そして、SSOログインしたものを使ってs3にアクセスする。
これだけです!

コードはこちら

import boto3

my_session = boto3.Session(profile_name='<SSOログイン名>')
s3 = my_session.client('s3')
BUCKET = "<s3 bucket name>"

param={
    "Fukuoka":"Fukuoka.json",
    "Tokyo":"Tokyo.json",
    "Osaka":"Osaka.json",
    "Chiba":"Chiba.json",
    "Shiga":"Shiga.json",
    "Saga":"Saga.json"
}
for k,v in param.items():
    if k.find("/"):
        location = k
        s3_okiba = "pref/"+v
        out_okiba = "/Users/hoge/Desktop/"+v
        s3.download_file(BUCKET,s3_okiba,out_okiba)

ssoログイン

SSOログインのところは、ここです。

my_session = boto3.Session(profile_name='<SSOログイン名>')

defaultを使っている人は、defaultでOKです。
複数使っている場合は、それぞれにあったSSOログイン名を入れてあげましょう!

s3へのアクセス

s3 = my_session.client('s3')
BUCKET = "<s3 bucket name>"

s3へのアクセスは、my_sessionで使ったSSOログインを引き継いで使いたいので、
普段だと、boto3.client(‘s3’)と書いているところは、ここでは、my_session.client(‘s3’)としています。
あとはBUCKETのところに取得したいS3バケット名を記述しましょう。

あとはそのままいつも通り。

私の場合は、パラメータを渡して回帰的に取得したいと思っていたので、このような書き方にしています。
これでぐるぐるしながらデータ取得ができると思います。
この中を書き換えれば、他にもどんどんデータ取得できちゃいますね!

まあでも、これができれば、AWS CLIを使ってやるのもありですね。

他にもこんなことができるかも。

boto3でSSOを突破すると、他にもなんでもできます。(boto3でできることが)

例えば。。。

import boto3

my_session = boto3.Session(profile_name='<profile>')
s3 = my_session.resource('s3')
bucket_name = "<backet_name>"
prefix = "<探したいパスを入れる>"

# バケット内のファイル一覧を取得
objects = s3.Bucket(bucket_name).objects.filter(Prefix=prefix)

if not list(objects):
    print("指定したプレフィックス内にファイルは存在しません。")
else:
    print("指定したプレフィックス内のファイル一覧:")
    for obj in objects:
        print(f'ファイル名: {obj.key}, サイズ: {obj.size} バイト')

こちらを実行することで、prefixに入れたディレクトリの下でlsをしてくれルような感じにもできます〜!

タイトルとURLをコピーしました