AWS CLI・SDKがコールするAPIのリクエスト・レスポンスを見る方法。
AWS CLI v2
方法1. --debugオプション
aws s3 ls --debug
とするとリクエスト・レスポンスが表示される(DEBUG - Sending http request:
とDEBUG - Response body:
の部分)。
方法2. mitmproxyを使う
mitmproxy -p 8888
で起動済みとする。
export HTTPS_PROXY=http://127.0.0.1:8888
aws s3 ls --no-verify-ssl
または
export HTTPS_PROXY=http://127.0.0.1:8888
aws s3 ls --ca-bundle ~/.mitmproxy/mitmproxy-ca-cert.pem
~/.mitmproxy/mitmproxy-ca-cert.pem
が見つからない場合は、
curl -x 127.0.0.1:8888 'http://mitm.it/cert/pem' > mitmproxy-ca-cert.pem
で入手できるはず。
AWS SDK
方法1. デバッグログを有効にする(AWS SDK for JavaScript v2)
const AWS = require("aws-sdk");
AWS.config.update({
logger: console,
});
// AWS.config.updateの後でnewしないとダメ。あるいはこのコンストラクタの引数にlogger:consoleを含めても良い
const lambda = new AWS.Lambda({ region: "ap-northeast-1" });
async function main() {
await lambda.listFunctions({ MaxItems: 10 }).promise();
}
main();
上記コードを実行すると以下のようなログが表示される。
[AWS lambda 200 0.363s 0 retries] listFunctions({ MaxItems: 10 })
このログはメソッドが終了する直前に出されるらしく、リトライ中にプロセスが死んだりした場合には何も出力されない。
https://docs.aws.amazon.com/ja_jp/sdk-for-javascript/v2/developer-guide/logging-sdk-calls.html
方法2. mitmproxyを使う(AWS SDK for JavaScript v2)
公式ドキュメントNode.js 用のプロキシの設定 - AWS SDK for JavaScriptの通り。
$ npm install proxy-agent
const AWS = require("aws-sdk");
const proxy = require("proxy-agent");
AWS.config.update({
httpOptions: { agent: proxy("http://127.0.0.1:8888") }, // プロキシを指定
sslEnabled: false, // SSLをオフにする。公式エンドポイントリストにHTTPSしか載っていなくてもHTTPで通るようだ(DynamoDBで実験済み)
});
sslEnabled: false
にしないと
(node:37757) UnhandledPromiseRejectionWarning: Error: self signed certificate in certificate chain
というエラーになってしまった。