July 17, 2015

AWS の API を叩くとき Proxy を通したい

AWS の API を叩くとき、Proxy を通したいという要望。大概の場合、HTTP_PROXY, HTTPS_PROXY で渡してあげれば良いんだけど、それで通らないケースが結構ある。主に Java で書かれてるやつ。というか AWS API に限らず Java を使う人なら常識なのかもしれないけど。

こんな感じで渡してやれば良い。

export EC2_JVM_ARGS="-Dhttp.proxySet=true -Dhttp.proxyHost=proxy.example.com -Dhttp.proxyPort=8080 -Dhttps.proxySet=true -Dhttps.proxyHost=proxy.example.com -Dhttps.proxyPort=8080"
export SERVICE_JVM_ARGS=${EC2_JVM_ARGS}

あと番外編、CloudWatch Logs Agent を使っていて同様に Proxy 経由でデータを流し込みたい時。 何となく筋が悪いというか行儀悪い気がするけど、 /var/awslogs/bin/awslogs-agent-launcher.sh を次の様にしてやるととりあえず動く。

#!/bin/sh
# Version: 1.x.x
echo -n $$ > /var/awslogs/state/awslogs.pid
#/usr/bin/env -i AWS_CONFIG_FILE=/var/awslogs/etc/aws.conf HOME=/root /bin/nice -n 4 /var/awslogs/bin/aws logs push --config-file /var/awslogs/etc/awslogs.conf >> /var/log/awslogs.log 2>&1
/usr/bin/env -i AWS_CONFIG_FILE=/var/awslogs/etc/aws.conf HOME=/root no_proxy=169.254.169.254 http_proxy=http://proxy.example.com:8080 https_proxy=http://proxy.example.com:8080 /bin/nice -n 4 /var/awslogs/bin/aws logs push --config-file /var/awslogs/etc/awslogs.conf >> /var/log/awslogs.log 2>&1

no_proxy=169.254.169.254 してるのがミソかな。メタデータサーバは VPC から直でいける。 あんまりないと思うんだけど、VPN や DirectConnect を使っていて、インスタンスのデフォゲが Proxy ありな社内に向いてる時に使える。

© Kazuhisa Hara 2014-2018