はじめに
aws lambda publish-layer-version
コマンドを実行すると、
「Failed to connect to proxy URL: "http://{PROXY-URL}:80"」
となり、プロキシは正しく設定されているが、なぜかコマンドが通らずに三日程原因が特定できませんでした。同じようなエラーで困っている方に向けて情報を共有したいと思います。
結論
タイムアウトによりエラーが発生していました。--cli-connect-timeout 6000
オプションをつけることでタイムアウトエラーを回避できます。
aws lambda publish-layer-version --cli-connect-timeout 6000
デフォルトのタイムアウト時間は60秒で設定されているため、通信が良くない環境で重いファイルをアップロードする際には同じエラーが発生する可能性があります。
https://botocore.amazonaws.com/v1/documentation/api/latest/reference/config.html
試したこと
プロキシが正しく設定されていることを確認する
こちらのコマンドで現在のプロキシに設定されている環境変数を確認します。
printenv | grep proxy
環境変数が設定されていなければ、こちらのコマンドでプロキシを設定してください
export http_proxy=http://proxy-url:80
export https_proxy=http://proxy-url:80
設定ファイルと認証ファイルを確認する
.aws
ディレクトリにあるconfig
とcredentials
ファイルを確認して、複数の設定がある場合には、環境変数として設定したい設定ファイルと認証ファイルが指定されている必要があります。設定ファイルはcat .aws/config
で、認証ファイルはcat .aws/credentials
で確認できます。
configの確認
cat .aws/config
[default]
region = ap-northeast-1
output = json
[profile sample1]
region = ap-northeast-1
output = json
[profile sample2]
region = ap-northeast-1
output = json
credentialsの確認
cat .aws/credentials
[sample1]
aws_access_key_id = sample1xxxxxxx
aws_secret_access_key = sample1xxxxxxxxxxxxxxxxxxxx
[sample2]
aws_access_key_id = sample2xxxxxxx
aws_secret_access_key = sample2xxxxxxxxxxxxxxxxxxxx
sample2をクレデンシャルとして環境変数に設定する場合は下記のコマンドを実行します。
export AWS_PROFILE=sample2
リージョンを確認する
Lambdaはリージョンごとのサービスのため、環境変数もしくはオプションでリージョンを正しく指定する必要があります。
環境変数で設定
export AWS_REGION=ap-northeast-1
オプションで設定
--region us-east-1
感想
プロキシエラーと表示されるため、プロキシの設定を何度も確認しましたが、一向にエラーが回避されず困り果てていました。偶然こちらの記事を見つけ、--cli-connect-timeout 6000
を指定して実行したら上手くいきました。
aws lambda publish-layer-version
のようなアップロードサイズが大きい処理をCLIで実行すると、タイムアウトエラーとなる可能性があるため、参考になれば幸いです。