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と使い方は全く同じで実行ボタンを押すグラフを表示してくれます。便利。



Emacs 27.1のelpy設定

emacs install後にelpyの設定を忘れてしまうのでそのメモ。

M-x package-list-packages を行うと下記のようなエラーが出る場合、必要なtoolや設定がされていないのが原因。
Could not create connection to orgmode.org:443

gnutls-cliのコマンドが失敗している場合があるのでgnutlsをインストールする必要がある。

まず、 .emacsにrepositoryを設定

(require 'package)
(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") t)
(add-to-list 'package-archives '("melpa-stable" . "http://stable.melpa.org/packages/") t)
(add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/") t)
(add-to-list 'package-archives '("ELPA" . "http://tromey.com/elpa/") t)

gnutls をインストール

homebrewで入れるのでまずhomebrewをインストール。その後、gnutlsをインストール。
https://brew.sh/index_ja

M1 macbook air で試したが、関連するpkgは既にarm版があったので非常に楽。対応早すぎ。
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
$ brew install gnutls

これで、package-list-packages時に実行される「gnutls-cli --x509cafile /etc/ssl/cert.pem -p 443 rgmode.org’ --protocols ssl3...」が正常終了するようになる。

その後は、sudo pip3 install virtualenv flake8 等で、elpy-configに必要なものを入れる。

pythonでsjisファイルutf8に変換しようとして

pythonでsjisファイル(csv)をutf8変換しようとして迷った時のメモ。

openする時に、encodingを指定すれば開けるのですが、例えばこんな感じ
fin = open('sjis_file.txt', mode='r', encoding='shift_jis')

で、エラーが出る場合は、別のコードを指定。
fin = open('sjis_file.txt', mode='r', encoding='shift_jisx0213')
とか。

ただし、これでもエラーになる場合がある。で結局、iconvでutf8に変換してからpythonで開くとうまくいった。
#!/bin/bash

iconv -c -f SJIS -t UTF-8 sjis_file.txt > utf8_file.txt

python read_file.py

みたいな感じで。nkfやdos2unixよりもiconvの方が変換できる文字が多いようで。
また、変換できないときの挙動も異常終了したりしないでの、iconvがお勧め。

これらのツールで、改行コードの変換もできるが、末尾の変換だけで、マルチラインカラム(1つのフィールドに改行コードが入ってるもの)の改行コードは変換してくれない。
なので、iconvで変換後、pythonのcsv.readerなどで読み込んでフィールド内の改行コードなどを削除。



emacsでpython、事始

久々にemacsでpythonをガリガリ書く必要が出てきたのでその設定。
emcas自体も26.1が出てたのでconfigure&make!

Elpy - Introduction を読み読み。

で、久々にやったせいか変なとこでハマる。
説明の通りに.emacsにパッケージアーカイブのリポジトリを追加するが動かず。調べたところ例示してあるhttpsでは動かない様子。
正解は、http://stable.melpa.org/packages/。そう、そうれだけ。でも気づくまでに随分時間かかった。。。
(add-to-list 'package-archives
             '("melpa-stable" . "http://stable.melpa.org/packages/"))


後は、いつもの設定もろもろ書いて、ついでにztreeでIDEっぽくして。
疲れたのでその設定はおいおい書こう。


カテゴリ

Amazon

アクセスランキング

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

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

RSSリンクの表示

ブロとも申請フォーム

Copyright © nopgm