起こったこと。
aws-sam-cliからbuildコマンドを呼び出すとエラーが出た
エラー内容
内容は
$ sam build
Traceback (most recent call last):
File "/opt/homebrew/bin/sam", line 8, in <module>
sys.exit(cli())
^^^^^
File "/opt/homebrew/Cellar/aws-sam-cli/1.70.0/libexec/lib/python3.11/site-packages/click/core.py", line 1130, in __call__
return self.main(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/Cellar/aws-sam-cli/1.70.0/libexec/lib/python3.11/site-packages/click/core.py", line 1055, in main
rv = self.invoke(ctx)
^^^^^^^^^^^^^^^^
File "/opt/homebrew/Cellar/aws-sam-cli/1.70.0/libexec/lib/python3.11/site-packages/click/core.py", line 1657, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/Cellar/aws-sam-cli/1.70.0/libexec/lib/python3.11/site-packages/click/core.py", line 1404, in invoke
return ctx.invoke(self.callback, **ctx.params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/Cellar/aws-sam-cli/1.70.0/libexec/lib/python3.11/site-packages/click/core.py", line 760, in invoke
return __callback(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/Cellar/aws-sam-cli/1.70.0/libexec/lib/python3.11/site-packages/click/decorators.py", line 84, in new_func
return ctx.invoke(f, obj, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/Cellar/aws-sam-cli/1.70.0/libexec/lib/python3.11/site-packages/click/core.py", line 760, in invoke
return __callback(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/Cellar/aws-sam-cli/1.70.0/libexec/lib/python3.11/site-packages/samcli/lib/telemetry/metric.py", line 175, in wrapped
raise exception # pylint: disable=raising-bad-type
^^^^^^^^^^^^^^^
File "/opt/homebrew/Cellar/aws-sam-cli/1.70.0/libexec/lib/python3.11/site-packages/samcli/lib/telemetry/metric.py", line 150, in wrapped
return_value = func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/Cellar/aws-sam-cli/1.70.0/libexec/lib/python3.11/site-packages/samcli/lib/utils/version_checker.py", line 41, in wrapped
actual_result = func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/Cellar/aws-sam-cli/1.70.0/libexec/lib/python3.11/site-packages/samcli/cli/main.py", line 92, in wrapper
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/Cellar/aws-sam-cli/1.70.0/libexec/lib/python3.11/site-packages/samcli/commands/build/command.py", line 186, in cli
do_cli(
File "/opt/homebrew/Cellar/aws-sam-cli/1.70.0/libexec/lib/python3.11/site-packages/samcli/commands/build/command.py", line 276, in do_cli
ctx.run()
File "/opt/homebrew/Cellar/aws-sam-cli/1.70.0/libexec/lib/python3.11/site-packages/samcli/commands/build/build_context.py", line 234, in run
builder = ApplicationBuilder(
^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/Cellar/aws-sam-cli/1.70.0/libexec/lib/python3.11/site-packages/samcli/lib/build/app_builder.py", line 157, in __init__
self._docker_client = docker_client if docker_client else docker.from_env()
^^^^^^^^^^^^^^^^^
File "/opt/homebrew/Cellar/aws-sam-cli/1.70.0/libexec/lib/python3.11/site-packages/docker/client.py", line 84, in from_env
return cls(
^^^^
File "/opt/homebrew/Cellar/aws-sam-cli/1.70.0/libexec/lib/python3.11/site-packages/docker/client.py", line 40, in __init__
self.api = APIClient(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/Cellar/aws-sam-cli/1.70.0/libexec/lib/python3.11/site-packages/docker/api/client.py", line 165, in __init__
self._custom_adapter = SSHHTTPAdapter(
^^^^^^^^^^^^^^^
File "/opt/homebrew/Cellar/aws-sam-cli/1.70.0/libexec/lib/python3.11/site-packages/docker/transport/sshconn.py", line 111, in __init__
self._connect()
File "/opt/homebrew/Cellar/aws-sam-cli/1.70.0/libexec/lib/python3.11/site-packages/docker/transport/sshconn.py", line 119, in _connect
self.ssh_client.connect(**self.ssh_params)
File "/opt/homebrew/lib/python3.11/site-packages/paramiko/client.py", line 450, in connect
self._auth(
File "/opt/homebrew/lib/python3.11/site-packages/paramiko/client.py", line 782, in _auth
raise SSHException("No authentication methods available")
このような内容で、SSHへの接続でどうやらコケている。
(なお、起こるエラーはAuthentication failed.だったりもした)
ソース周りを調べる
トレースみながら、Pychamでブレークしたりして追った。
Paramikoのあたりでホスト、ユーザー、などは渡っているが、証明書が渡っていない。
次はDocker-pyのソースを調べる。
該当箇所はどうやら
https://github.com/docker/docker-py/blob/4.4.4-release/docker/transport/sshconn.py#L202
このあたり、ssh_configをパースして渡していっているがIdentity file
は渡っていない様子。
なお、5.0.1以降は修正されていた。
https://github.com/docker/docker-py/blob/5.0.1-release/docker/transport/sshconn.py#L209
解決:docker-pyのバージョンを上げればOK
ちゃんとつながって、dockerのinfoも取れた
import docker
client = docker.from_env().info()
>>>>> ......