aws apiをcallする時はkwargsを使う

aws apiをcallしているサンプルをネット調べるとif ~ else ~ で関数本体を切り分けてるものがあります。
方法としてはあまり良くないので実際には公式のBoto3 documentationにあるようにkwargsを使うようにします。

具体的には、複数件の結果を取得するlistやgetなんかでnexttoken(次ページみたいなもの)がある場合。

ネットでよくある例

https://qiita.com/chii-08/items/8912a312e83666912809
コードとしては分かりやすい。
if next_token is not None and next_token != '':
    response = client.describe_log_groups(
        limit=50,
        nextToken=next_token
    )
else:
    response = client.describe_log_groups(limit=50)

kwargsを使う例

次ページ取得は、APIによってNextTokenやMarkerの場合など異なるのでややこしい。
list_rolesは、Markerを使用。
kwargs = {"PathPrefix": "/"}
if marker:
    kwargs["Marker"] = marker

roles = client.list_roles(**kwargs)

「python 可変長引数」等で検索するといろいろ出てくる。



Jupyter notebook on VSCodeでAthenaに接続

本職はアナリストではないでのすが、たまにJupyter notebookを使う場合、notebook自体のエディターは使いにくいのでVisual studio Codeでなんとかならないかと思ったら出来たのでメモ。

ついでにAWS Athenaへクエリーを投げる。やり方はいろいろありましたが、awswranglerを使うと簡単だったのでこれを利用。
awslabs/aws-data-wrangler - https://github.com/awslabs/aws-data-wrangler

VSCodeにPython/JupyterのExtensionをインストール

Python (ms-python.python Microsoft)
Jupyter (ms-toolsai.jupyter Microsoft)
Python自体は3.8をインストールしています。もちろん、awswranglerもインストール。


notebookファイルを作成

VSCodeでファイルを作成・保存する時に拡張子を「.ipynb」にすると自動でJupyter notebookのUIと同じものがVSCode上に表示されます。

やってることは簡単で、Athenaへクエリーを投げてその結果をpandasでplotしてるだけ。
サンプルのコード:
import sys, os, array, time

import awswrangler as wr
import numpy as np
import pandas as pd

wg = 'primary'
db = 'test'
query = "SELECT ymd, count FROM test.tbl_test01"

df = wr.athena.read_sql_query(
    query,
    database=db,
    workgroup=wg)
df.plot(figsize=(5,2), kind='bar', legend=False, title="", x='ymd')

実行してみる

今回はAWSに接続しているので、$HOME/.aws/credentials を準備しておく。
後は通常のnotebookと使い方は全く同じで実行ボタンを押すグラフを表示してくれます。便利。



bashでforループ

たまにbashのコマンドラインで複数ファイルを、なんやかんやでワンライナーforループで処理させたい場合がありますが、たまにやるので ;(セミコロン)の位置を忘れたりするのでメモ。

適当にファイルを作成。
$ touch a.txt b.txt c.txt a.log
$ ll
total 0
drwxr-xr-x 1 user01 user01 4096 Jan 18 15:51 .
drwxr-xr-x 1 user01 user01 4096 Jan 18 15:50 ..
-rw-r--r-- 1 user01 user01    0 Jan 18 15:51 a.log
-rw-r--r-- 1 user01 user01    0 Jan 18 15:51 a.txt
-rw-r--r-- 1 user01 user01    0 Jan 18 15:51 b.txt
-rw-r--r-- 1 user01 user01    0 Jan 18 15:51 c.txt
$ 

で、ワンライナーのサンプル。
$ for FILE in `ls *.txt`; do echo "FILE=$FILE"; done
FILE=a.txt
FILE=b.txt
FILE=c.txt
$ 


カテゴリ

Amazon

アクセスランキング

[ジャンルランキング]
コンピュータ
249位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
38位
アクセスランキングを見る>>

RSSリンクの表示

ブロとも申請フォーム

Copyright © nopgm