Armadilloフォーラム

AWS S3へのデータアップロードの自動化ができない

reiji_fuji

2025年2月3日 21時26分

==========
製品型番:AGX4500-C00D0
Debian/ABOSバージョン:alpine-release:3.19.1
カーネルバージョン:5.10.218-0-at
3G/LTE モジュール情報 (Debianのみ):モジュール使用なし
その他:LTEルーター使用(ETH1)
==========

Armadilloの起動時にコンテナ起動設定ファイルからコンテナを自動で立ち上げて以下のフローでデータのアップロードを行おうとしています。
<アップロードまでのフロー>
①インターネット接続完了まで待機(120秒間、接続に失敗したら終了)
②前回取得データのファイル名にタイムスタンプ付与、別ディレクトリへ移動
③データアップロード用のPythonファイル実行
 Python:データの圧縮
 Python:AWS S3接続用セットアップ(boto3.resource, boto3.client)
 Python:データのアップロード

上記のフローで動作をするシェルスクリプトを作成し、コンテナ上で手動で実行をするとデータのアップロードまで完了するのですが、コンテナ起動設定ファイルからset_commandでスクリプトを実行すると上記フロー③のデータ圧縮までは動作しますが、AWS S3でデータ確認をするとアップロードされていない状況になっています。コンテナ上で手動でシェルスクリプトを起動するとアップロードまで完了していることから、コンテナへの権限付与は十分に行えているのではないかと考えていますが、アップロードが完了しない原因が掴めず手詰まりとなっています。なにか自動起動時にboto3で通信を行う際に気を付けるべき点などありましたら教えて頂きたいです。

追記:
・アップロード時にエラーログを残せるようにプログラムを組んだのですが特にエラー等は発生していませんでした。
・コンテナ起動設定ファイルは以下のようになっています
 set_image localhost/easy_sample:v1.3.1

 add_devices /dev/ttyUSB0 /dev/ttymxc2 /dev/gpiochip0 /dev/gpiochip2 /dev/bus
 add_volumes /var/app/volumes/Log /var/app/volumes/Easy_Sample_SoftWare
 add_volumes /sys /dev /run /opt/firmware
 add_args -itd --net=host --cap-add=NET_ADMIN --pid=host --cap-add=NET_RAW
 add_args --env=LD_LIBRARY_PATH=/opt/firmware/usr/lib/aarch64-linux-gnu
 
 # set_autostart no
 
 set_command sh /var/app/volumes/Easy_Sample_SoftWare/ShellScript/connect_chk.sh

コメント

at_shinya.koga

2025年2月4日 6時32分

アットマークテクノの古賀です。

reiji_fujiさん:
>Armadilloの起動時にコンテナ起動設定ファイルからコンテナを自動で立ち上げて以下のフローでデータのアップロードを行おうとしています。
><アップロードまでのフロー>
>①インターネット接続完了まで待機(120秒間、接続に失敗したら終了)
>②前回取得データのファイル名にタイムスタンプ付与、別ディレクトリへ移動
>③データアップロード用のPythonファイル実行
> Python:データの圧縮
> Python:AWS S3接続用セットアップ(boto3.resource, boto3.client)
> Python:データのアップロード
>
>上記のフローで動作をするシェルスクリプトを作成し、コンテナ上で手動で実行をするとデータのアップロードまで完了するのですが、コンテナ起動設定ファイルからset_commandでスクリプトを実行すると上記フロー③のデータ圧縮までは動作しますが、AWS S3でデータ確認をするとアップロードされていない状況になっています。コンテナ上で手動でシェルスクリプトを起動するとアップロードまで完了していることから、コンテナへの権限付与は十分に行えているのではないかと考えていますが、アップロードが完了しない原因が掴めず手詰まりとなっています。なにか自動起動時にboto3で通信を行う際に気を付けるべき点などありましたら教えて頂きたいです。
>
>追記:
>・アップロード時にエラーログを残せるようにプログラムを組んだのですが特にエラー等は発生していませんでした。

以下のコンテナ起動設定ファイルの内容を見ると、/var/app/volumes/Log 配下にログファイルを作り、エラーログを記録するようにしていらっしゃる、
ということのようですね。

>・コンテナ起動設定ファイルは以下のようになっています
> set_image localhost/easy_sample:v1.3.1
>
> add_devices /dev/ttyUSB0 /dev/ttymxc2 /dev/gpiochip0 /dev/gpiochip2 /dev/bus
> add_volumes /var/app/volumes/Log /var/app/volumes/Easy_Sample_SoftWare
> add_volumes /sys /dev /run /opt/firmware
> add_args -itd --net=host --cap-add=NET_ADMIN --pid=host --cap-add=NET_RAW
> add_args --env=LD_LIBRARY_PATH=/opt/firmware/usr/lib/aarch64-linux-gnu
> 
> # set_autostart no
> 
> set_command sh /var/app/volumes/Easy_Sample_SoftWare/ShellScript/connect_chk.sh

状況確認のため、いくつか教えてください:

1.) Armadillo の起動完了後、'podman logs [コンテナ名]' を実行すると、どのような内容が出力されるでしょうか?

2.) スクリプト(ShellScript/connect_chk.sh)を配置しているディレクトリ /var/app/volumes/Easy_Sample_SoftWare/ShellScript は存在しているでしょうか?(※存在しているとは思いますが、念のための確認です。)

3.) Armadillo の起動完了後、'podman_start [コンテナ名]' でコンテナを手動実行した場合も、同じ症状になるでしょうか?

4.) boto3 による S3 への接続では、AWS の IAM から事前取得して Python コード側に設定済みのアクセスキーをお使いでしょうか?あるいは、別の方法をご利用でしょうか。

> アットマークテクノの古賀です。
>
> reiji_fujiさん:
> >Armadilloの起動時にコンテナ起動設定ファイルからコンテナを自動で立ち上げて以下のフローでデータのアップロードを行おうとしています。
> ><アップロードまでのフロー>
> >①インターネット接続完了まで待機(120秒間、接続に失敗したら終了)
> >②前回取得データのファイル名にタイムスタンプ付与、別ディレクトリへ移動
> >③データアップロード用のPythonファイル実行
> > Python:データの圧縮
> > Python:AWS S3接続用セットアップ(boto3.resource, boto3.client)
> > Python:データのアップロード
> >
> >上記のフローで動作をするシェルスクリプトを作成し、コンテナ上で手動で実行をするとデータのアップロードまで完了するのですが、コンテナ起動設定ファイルからset_commandでスクリプトを実行すると上記フロー③のデータ圧縮までは動作しますが、AWS S3でデータ確認をするとアップロードされていない状況になっています。コンテナ上で手動でシェルスクリプトを起動するとアップロードまで完了していることから、コンテナへの権限付与は十分に行えているのではないかと考えていますが、アップロードが完了しない原因が掴めず手詰まりとなっています。なにか自動起動時にboto3で通信を行う際に気を付けるべき点などありましたら教えて頂きたいです。
> >
> >追記:
> >・アップロード時にエラーログを残せるようにプログラムを組んだのですが特にエラー等は発生していませんでした。
>
> 以下のコンテナ起動設定ファイルの内容を見ると、/var/app/volumes/Log 配下にログファイルを作り、エラーログを記録するようにしていらっしゃる、
> ということのようですね。
>
> >・コンテナ起動設定ファイルは以下のようになっています
> > set_image localhost/easy_sample:v1.3.1
> >
> > add_devices /dev/ttyUSB0 /dev/ttymxc2 /dev/gpiochip0 /dev/gpiochip2 /dev/bus
> > add_volumes /var/app/volumes/Log /var/app/volumes/Easy_Sample_SoftWare
> > add_volumes /sys /dev /run /opt/firmware
> > add_args -itd --net=host --cap-add=NET_ADMIN --pid=host --cap-add=NET_RAW
> > add_args --env=LD_LIBRARY_PATH=/opt/firmware/usr/lib/aarch64-linux-gnu
> > 
> > # set_autostart no
> > 
> > set_command sh /var/app/volumes/Easy_Sample_SoftWare/ShellScript/connect_chk.sh
>
> 状況確認のため、いくつか教えてください:
>
> 1.) Armadillo の起動完了後、'podman logs [コンテナ名]' を実行すると、どのような内容が出力されるでしょうか?
>
> 2.) スクリプト(ShellScript/connect_chk.sh)を配置しているディレクトリ /var/app/volumes/Easy_Sample_SoftWare/ShellScript は存在しているでしょうか?(※存在しているとは思いますが、念のための確認です。)
>
> 3.) Armadillo の起動完了後、'podman_start [コンテナ名]' でコンテナを手動実行した場合も、同じ症状になるでしょうか?
>
> 4.) boto3 による S3 への接続では、AWS の IAM から事前取得して Python コード側に設定済みのアクセスキーをお使いでしょうか?あるいは、別の方法をご利用でしょうか。

早速のご回答ありがとうございます。
ご質問頂いた内容について以下の通りとなっております。

1.) Armadillo の起動完了後、'podman logs [コンテナ名]' を実行すると以下のようなログが残っておりました。
最初は気づいていませんでしたが、AWSへのデータアップロード時のタイムアウト待ちでしばらく処理が停止しているようでした。
その後タイムアウト判定が出て、定常動作に移行をしました。

ping: google.co.jp: Temporary failure in name resolution
Internet-Disconnected...
ping: google.co.jp: Temporary failure in name resolution
Internet-Disconnected...
ping: google.co.jp: Temporary failure in name resolution
Internet-Disconnected...
ping: google.co.jp: Temporary failure in name resolution
Internet-Disconnected...
ping: google.co.jp: Temporary failure in name resolution
Internet-Disconnected...
ping: google.co.jp: Temporary failure in name resolution
Internet-Disconnected...
ping: google.co.jp: Temporary failure in name resolution
Internet-Disconnected...
ping: google.co.jp: Temporary failure in name resolution
Internet-Disconnected...
ping: google.co.jp: Temporary failure in name resolution
Internet-Disconnected...
Internet-Connected!
Make & gz comp OK! ...... Upload_start!
Upload Failed!!
・・・(以下定常動作)

2.) スクリプト(ShellScript/connect_chk.sh)を配置しているディレクトリは存在していました。

3.) Armadillo の起動完了後、'podman_start [コンテナ名]' でコンテナを手動実行した場合も同じ症状になります。

4.) boto3 による S3 への接続では、Python コード側に設定済みのアクセスキーを使っております。

上記のことからboto3でのアップロードに失敗をしていることが分かりました。
ただコンテナ上でアップロードを行った時は成功するのに、起動設定ファイルで動作させようとした時だけ失敗してしまいます。
boto3でのアップロードに失敗したときのエラーログは以下のようになります。
私の方でも調査を進めてみますが、なにかお気づきの点あれば教えて頂けると大変助かります。
よろしくお願いします。

Traceback (most recent call last):
File "/usr/local/lib/python3.9/dist-packages/urllib3/connection.py", line 174, in _new_conn
conn = connection.create_connection(
File "/usr/local/lib/python3.9/dist-packages/urllib3/util/connection.py", line 95, in create_connection
raise err
File "/usr/local/lib/python3.9/dist-packages/urllib3/util/connection.py", line 85, in create_connection
sock.connect(sa)
OSError: [Errno 101] Network is unreachable

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/local/lib/python3.9/dist-packages/urllib3/connectionpool.py", line 713, in urlopen
self._prepare_proxy(conn)
File "/usr/local/lib/python3.9/dist-packages/urllib3/connectionpool.py", line 1015, in _prepare_proxy
conn.connect()
File "/usr/local/lib/python3.9/dist-packages/urllib3/connection.py", line 363, in connect
self.sock = conn = self._new_conn()
File "/usr/local/lib/python3.9/dist-packages/urllib3/connection.py", line 186, in _new_conn
raise NewConnectionError(
urllib3.exceptions.NewConnectionError: : Failed to establish a new connection: [Errno 101] Network is unreachable

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/local/lib/python3.9/dist-packages/botocore/httpsession.py", line 464, in send
urllib_response = conn.urlopen(
File "/usr/local/lib/python3.9/dist-packages/urllib3/connectionpool.py", line 802, in urlopen
retries = retries.increment(
File "/usr/local/lib/python3.9/dist-packages/urllib3/util/retry.py", line 527, in increment
raise six.reraise(type(error), error, _stacktrace)
File "/usr/local/lib/python3.9/dist-packages/urllib3/packages/six.py", line 769, in reraise
raise value.with_traceback(tb)
File "/usr/local/lib/python3.9/dist-packages/urllib3/connectionpool.py", line 713, in urlopen
self._prepare_proxy(conn)
File "/usr/local/lib/python3.9/dist-packages/urllib3/connectionpool.py", line 1015, in _prepare_proxy
conn.connect()
File "/usr/local/lib/python3.9/dist-packages/urllib3/connection.py", line 363, in connect
self.sock = conn = self._new_conn()
File "/usr/local/lib/python3.9/dist-packages/urllib3/connection.py", line 186, in _new_conn
raise NewConnectionError(
urllib3.exceptions.ProxyError: ('Cannot connect to proxy.', NewConnectionError(': Failed to establish a new connection: [Errno 101] Network is unreachable'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/var/app/volumes/Easy_Sample_SoftWare/Python/upload_octavia.py", line 114, in main
s3_client.upload_file(files[cnt], "qubyc-sand-prd-via-car-data", up_name)
File "/usr/local/lib/python3.9/dist-packages/boto3/s3/inject.py", line 145, in upload_file
return transfer.upload_file(
File "/usr/local/lib/python3.9/dist-packages/boto3/s3/transfer.py", line 372, in upload_file
future.result()
File "/usr/local/lib/python3.9/dist-packages/s3transfer/futures.py", line 103, in result
return self._coordinator.result()
File "/usr/local/lib/python3.9/dist-packages/s3transfer/futures.py", line 264, in result
raise self._exception
File "/usr/local/lib/python3.9/dist-packages/s3transfer/tasks.py", line 135, in __call__
return self._execute_main(kwargs)
File "/usr/local/lib/python3.9/dist-packages/s3transfer/tasks.py", line 158, in _execute_main
return_value = self._main(**kwargs)
File "/usr/local/lib/python3.9/dist-packages/s3transfer/upload.py", line 796, in _main
client.put_object(Bucket=bucket, Key=key, Body=body, **extra_args)
File "/usr/local/lib/python3.9/dist-packages/botocore/client.py", line 569, in _api_call
return self._make_api_call(operation_name, kwargs)
File "/usr/local/lib/python3.9/dist-packages/botocore/client.py", line 1005, in _make_api_call
http, parsed_response = self._make_request(
File "/usr/local/lib/python3.9/dist-packages/botocore/client.py", line 1029, in _make_request
return self._endpoint.make_request(operation_model, request_dict)
File "/usr/local/lib/python3.9/dist-packages/botocore/endpoint.py", line 119, in make_request
return self._send_request(request_dict, operation_model)
File "/usr/local/lib/python3.9/dist-packages/botocore/endpoint.py", line 200, in _send_request
while self._needs_retry(
File "/usr/local/lib/python3.9/dist-packages/botocore/endpoint.py", line 360, in _needs_retry
responses = self._event_emitter.emit(
File "/usr/local/lib/python3.9/dist-packages/botocore/hooks.py", line 412, in emit
return self._emitter.emit(aliased_event_name, **kwargs)
File "/usr/local/lib/python3.9/dist-packages/botocore/hooks.py", line 256, in emit
return self._emit(event_name, kwargs)
File "/usr/local/lib/python3.9/dist-packages/botocore/hooks.py", line 239, in _emit
response = handler(**kwargs)
File "/usr/local/lib/python3.9/dist-packages/botocore/retryhandler.py", line 207, in __call__
if self._checker(**checker_kwargs):
File "/usr/local/lib/python3.9/dist-packages/botocore/retryhandler.py", line 284, in __call__
should_retry = self._should_retry(
File "/usr/local/lib/python3.9/dist-packages/botocore/retryhandler.py", line 320, in _should_retry
return self._checker(attempt_number, response, caught_exception)
File "/usr/local/lib/python3.9/dist-packages/botocore/retryhandler.py", line 363, in __call__
checker_response = checker(
File "/usr/local/lib/python3.9/dist-packages/botocore/retryhandler.py", line 247, in __call__
return self._check_caught_exception(
File "/usr/local/lib/python3.9/dist-packages/botocore/retryhandler.py", line 416, in _check_caught_exception
raise caught_exception
File "/usr/local/lib/python3.9/dist-packages/botocore/endpoint.py", line 279, in _do_get_response
http_response = self._send(request)
File "/usr/local/lib/python3.9/dist-packages/botocore/endpoint.py", line 383, in _send
return self.http_session.send(request)
File "/usr/local/lib/python3.9/dist-packages/botocore/httpsession.py", line 495, in send
raise ProxyConnectionError(
botocore.exceptions.ProxyConnectionError: Failed to connect to proxy URL: "https://10.17.33.3:8080/"
Traceback (most recent call last):
File "/usr/local/lib/python3.9/dist-packages/urllib3/connection.py", line 174, in _new_conn
conn = connection.create_connection(
File "/usr/local/lib/python3.9/dist-packages/urllib3/util/connection.py", line 95, in create_connection
raise err
File "/usr/local/lib/python3.9/dist-packages/urllib3/util/connection.py", line 85, in create_connection
sock.connect(sa)
socket.timeout: timed out

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/local/lib/python3.9/dist-packages/botocore/httpsession.py", line 464, in send
urllib_response = conn.urlopen(
File "/usr/local/lib/python3.9/dist-packages/urllib3/connectionpool.py", line 802, in urlopen
retries = retries.increment(
File "/usr/local/lib/python3.9/dist-packages/urllib3/util/retry.py", line 527, in increment
raise six.reraise(type(error), error, _stacktrace)
File "/usr/local/lib/python3.9/dist-packages/urllib3/packages/six.py", line 770, in reraise
raise value
File "/usr/local/lib/python3.9/dist-packages/urllib3/connectionpool.py", line 713, in urlopen
self._prepare_proxy(conn)
File "/usr/local/lib/python3.9/dist-packages/urllib3/connectionpool.py", line 1015, in _prepare_proxy
conn.connect()
File "/usr/local/lib/python3.9/dist-packages/urllib3/connection.py", line 363, in connect
self.sock = conn = self._new_conn()
File "/usr/local/lib/python3.9/dist-packages/urllib3/connection.py", line 179, in _new_conn
raise ConnectTimeoutError(
urllib3.exceptions.ConnectTimeoutError: (, 'Connection to 10.17.33.3 timed out. (connect timeout=50)')

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/var/app/volumes/Easy_Sample_SoftWare/Python/upload_octavia.py", line 114, in main
s3_client.upload_file(files[cnt], "qubyc-sand-prd-via-car-data", up_name)
File "/usr/local/lib/python3.9/dist-packages/boto3/s3/inject.py", line 145, in upload_file
return transfer.upload_file(
File "/usr/local/lib/python3.9/dist-packages/boto3/s3/transfer.py", line 372, in upload_file
future.result()
File "/usr/local/lib/python3.9/dist-packages/s3transfer/futures.py", line 103, in result
return self._coordinator.result()
File "/usr/local/lib/python3.9/dist-packages/s3transfer/futures.py", line 264, in result
raise self._exception
File "/usr/local/lib/python3.9/dist-packages/s3transfer/tasks.py", line 135, in __call__
return self._execute_main(kwargs)
File "/usr/local/lib/python3.9/dist-packages/s3transfer/tasks.py", line 158, in _execute_main
return_value = self._main(**kwargs)
File "/usr/local/lib/python3.9/dist-packages/s3transfer/upload.py", line 796, in _main
client.put_object(Bucket=bucket, Key=key, Body=body, **extra_args)
File "/usr/local/lib/python3.9/dist-packages/botocore/client.py", line 569, in _api_call
return self._make_api_call(operation_name, kwargs)
File "/usr/local/lib/python3.9/dist-packages/botocore/client.py", line 1005, in _make_api_call
http, parsed_response = self._make_request(
File "/usr/local/lib/python3.9/dist-packages/botocore/client.py", line 1029, in _make_request
return self._endpoint.make_request(operation_model, request_dict)
File "/usr/local/lib/python3.9/dist-packages/botocore/endpoint.py", line 119, in make_request
return self._send_request(request_dict, operation_model)
File "/usr/local/lib/python3.9/dist-packages/botocore/endpoint.py", line 200, in _send_request
while self._needs_retry(
File "/usr/local/lib/python3.9/dist-packages/botocore/endpoint.py", line 360, in _needs_retry
responses = self._event_emitter.emit(
File "/usr/local/lib/python3.9/dist-packages/botocore/hooks.py", line 412, in emit
return self._emitter.emit(aliased_event_name, **kwargs)
File "/usr/local/lib/python3.9/dist-packages/botocore/hooks.py", line 256, in emit
return self._emit(event_name, kwargs)
File "/usr/local/lib/python3.9/dist-packages/botocore/hooks.py", line 239, in _emit
response = handler(**kwargs)
File "/usr/local/lib/python3.9/dist-packages/botocore/retryhandler.py", line 207, in __call__
if self._checker(**checker_kwargs):
File "/usr/local/lib/python3.9/dist-packages/botocore/retryhandler.py", line 284, in __call__
should_retry = self._should_retry(
File "/usr/local/lib/python3.9/dist-packages/botocore/retryhandler.py", line 320, in _should_retry
return self._checker(attempt_number, response, caught_exception)
File "/usr/local/lib/python3.9/dist-packages/botocore/retryhandler.py", line 363, in __call__
checker_response = checker(
File "/usr/local/lib/python3.9/dist-packages/botocore/retryhandler.py", line 247, in __call__
return self._check_caught_exception(
File "/usr/local/lib/python3.9/dist-packages/botocore/retryhandler.py", line 416, in _check_caught_exception
raise caught_exception
File "/usr/local/lib/python3.9/dist-packages/botocore/endpoint.py", line 279, in _do_get_response
http_response = self._send(request)
File "/usr/local/lib/python3.9/dist-packages/botocore/endpoint.py", line 383, in _send
return self.http_session.send(request)
File "/usr/local/lib/python3.9/dist-packages/botocore/httpsession.py", line 499, in send
raise ConnectTimeoutError(endpoint_url=request.url, error=e)
botocore.exceptions.ConnectTimeoutError: Connect timeout on endpoint URL: "送信先のAWS-URL"

アットマークテクノの古賀です。

reiji_fujiさん:
>早速のご回答ありがとうございます。
>ご質問頂いた内容について以下の通りとなっております。

有難うございます。以下、順にコメントします。

>1.) Armadillo の起動完了後、'podman logs [コンテナ名]' を実行すると以下のようなログが残っておりました。
>最初は気づいていませんでしたが、AWSへのデータアップロード時のタイムアウト待ちでしばらく処理が停止しているようでした。
>その後タイムアウト判定が出て、定常動作に移行をしました。
>
>ping: google.co.jp: Temporary failure in name resolution
>Internet-Disconnected...
...
>ping: google.co.jp: Temporary failure in name resolution
>Internet-Disconnected...
>Internet-Connected!
>Make & gz comp OK! ...... Upload_start!
>Upload Failed!!
>・・・(以下定常動作)

boto3 によるアップロード動作は、デフォルトのタイムアウト時間が60秒くらいだったと思いますので、そこで待ちが起きていたようだ、ということですね。
ちなみに、set_command 行で実行を指定している connect_chk.sh は、上記の "Upload Failed!!" のエラーが起きた場合、動作終了するのでしょうか?

>2.) スクリプト(ShellScript/connect_chk.sh)を配置しているディレクトリは存在していました。
>
>3.) Armadillo の起動完了後、'podman_start [コンテナ名]' でコンテナを手動実行した場合も同じ症状になります。
>
>4.) boto3 による S3 への接続では、Python コード側に設定済みのアクセスキーを使っております。

了解しました。(3) の結果から、Armadillo の起動時にコンテナを実行するか起動完了後にコンテナを実行するかで、違いが出るわけではないようですね。

>上記のことからboto3でのアップロードに失敗をしていることが分かりました。
>ただコンテナ上でアップロードを行った時は成功するのに、起動設定ファイルで動作させようとした時だけ失敗してしまいます。

確認ですが、「コンテナ上でアップロードを行った時は」とおっしゃっているのは、

podman exec -it [コンテナ名] /bin/sh

でコンテナ上のシェルを対話モードで起動し、

sh /var/app/volumes/Easy_Sample_SoftWare/ShellScript/connect_chk.sh

を実行された、という認識で合っているでしょうか?

>boto3でのアップロードに失敗したときのエラーログは以下のようになります。
>私の方でも調査を進めてみますが、なにかお気づきの点あれば教えて頂けると大変助かります。
>よろしくお願いします。

いくつかの例外送出が起きていますが、例外送出されているエラーオブジェクトを見ると、S3.cllient.upload_file() で S3 サービスに接続しようとしてエラーしているようですね。

>Traceback (most recent call last):
> File "/usr/local/lib/python3.9/dist-packages/urllib3/connection.py", line 174, in _new_conn
...
> File "/usr/local/lib/python3.9/dist-packages/urllib3/connection.py", line 186, in _new_conn
> raise NewConnectionError(
>urllib3.exceptions.NewConnectionError: : Failed to establish a new connection: [Errno 101] Network is unreachable
>
>During handling of the above exception, another exception occurred:
>
>Traceback (most recent call last):
> File "/usr/local/lib/python3.9/dist-packages/botocore/httpsession.py", line 464, in send
...
> File "/usr/local/lib/python3.9/dist-packages/urllib3/connection.py", line 186, in _new_conn
> raise NewConnectionError(
>urllib3.exceptions.ProxyError: ('Cannot connect to proxy.', NewConnectionError(': Failed to establish a new connection: [Errno 101] Network is unreachable'))
>
>During handling of the above exception, another exception occurred:
>
>Traceback (most recent call last):
> File "/var/app/volumes/Easy_Sample_SoftWare/Python/upload_octavia.py", line 114, in main
...
> File "/usr/local/lib/python3.9/dist-packages/urllib3/util/connection.py", line 85, in create_connection
> sock.connect(sa)
>socket.timeout: timed out
>
>During handling of the above exception, another exception occurred:
>
>Traceback (most recent call last):
> File "/usr/local/lib/python3.9/dist-packages/botocore/httpsession.py", line 464, in send
...
> File "/usr/local/lib/python3.9/dist-packages/urllib3/connection.py", line 179, in _new_conn
> raise ConnectTimeoutError(
>urllib3.exceptions.ConnectTimeoutError: (, 'Connection to 10.17.33.3 timed out. (connect timeout=50)')
>
>During handling of the above exception, another exception occurred:
>
>Traceback (most recent call last):
> File "/var/app/volumes/Easy_Sample_SoftWare/Python/upload_octavia.py", line 114, in main
...
> File "/usr/local/lib/python3.9/dist-packages/botocore/httpsession.py", line 499, in send
> raise ConnectTimeoutError(endpoint_url=request.url, error=e)
>botocore.exceptions.ConnectTimeoutError: Connect timeout on endpoint URL: "送信先のAWS-URL"

例外送出のうち、末尾から二つまでのものを見ると、S3 サービスのエンドポイント URL("送信先のAWS-URL")のホスト名に対応する IP アドレスへの HTTP 接続がタイムアウトしているようですが、最初の方で "Network is unreachable" というエラーがあるのが気になりますね。

試しに、ですが、次のようにすると、どうなるでしょうか?

1.) コンテナ起動設定ファイルの set_command 行を、'et_command sleep infinity' に変える。
2.) 'podman_start [コンテナ名]' でコンテナを起動する。
3.) 'podman exec -it [コンテナ名] /bin/sh' でコンテナ上のシェルを対話モードで起動して、コンテナ上のシェルで 'sh/var/app/volumes/Easy_Sample_SoftWare/ShellScript/connect_chk.sh' を実行する。

> アットマークテクノの古賀です。
>
> reiji_fujiさん:
> >早速のご回答ありがとうございます。
> >ご質問頂いた内容について以下の通りとなっております。
>
> 有難うございます。以下、順にコメントします。
>
> >1.) Armadillo の起動完了後、'podman logs [コンテナ名]' を実行すると以下のようなログが残っておりました。
> >最初は気づいていませんでしたが、AWSへのデータアップロード時のタイムアウト待ちでしばらく処理が停止しているようでした。
> >その後タイムアウト判定が出て、定常動作に移行をしました。
> >
> >ping: google.co.jp: Temporary failure in name resolution
> >Internet-Disconnected...
> ...
> >ping: google.co.jp: Temporary failure in name resolution
> >Internet-Disconnected...
> >Internet-Connected!
> >Make & gz comp OK! ...... Upload_start!
> >Upload Failed!!
> >・・・(以下定常動作)
>
> boto3 によるアップロード動作は、デフォルトのタイムアウト時間が60秒くらいだったと思いますので、そこで待ちが起きていたようだ、ということですね。
> ちなみに、set_command 行で実行を指定している connect_chk.sh は、上記の "Upload Failed!!" のエラーが起きた場合、動作終了するのでしょうか?
>
> >2.) スクリプト(ShellScript/connect_chk.sh)を配置しているディレクトリは存在していました。
> >
> >3.) Armadillo の起動完了後、'podman_start [コンテナ名]' でコンテナを手動実行した場合も同じ症状になります。
> >
> >4.) boto3 による S3 への接続では、Python コード側に設定済みのアクセスキーを使っております。
>
> 了解しました。(3) の結果から、Armadillo の起動時にコンテナを実行するか起動完了後にコンテナを実行するかで、違いが出るわけではないようですね。
>
> >上記のことからboto3でのアップロードに失敗をしていることが分かりました。
> >ただコンテナ上でアップロードを行った時は成功するのに、起動設定ファイルで動作させようとした時だけ失敗してしまいます。
>
> 確認ですが、「コンテナ上でアップロードを行った時は」とおっしゃっているのは、
>

> podman exec -it [コンテナ名] /bin/sh
> 

> でコンテナ上のシェルを対話モードで起動し、
>

> sh /var/app/volumes/Easy_Sample_SoftWare/ShellScript/connect_chk.sh
> 

> を実行された、という認識で合っているでしょうか?
>
> >boto3でのアップロードに失敗したときのエラーログは以下のようになります。
> >私の方でも調査を進めてみますが、なにかお気づきの点あれば教えて頂けると大変助かります。
> >よろしくお願いします。
>
> いくつかの例外送出が起きていますが、例外送出されているエラーオブジェクトを見ると、S3.cllient.upload_file() で S3 サービスに接続しようとしてエラーしているようですね。
>
> >Traceback (most recent call last):
> > File "/usr/local/lib/python3.9/dist-packages/urllib3/connection.py", line 174, in _new_conn
> ...
> > File "/usr/local/lib/python3.9/dist-packages/urllib3/connection.py", line 186, in _new_conn
> > raise NewConnectionError(
> >urllib3.exceptions.NewConnectionError: : Failed to establish a new connection: [Errno 101] Network is unreachable
> >
> >During handling of the above exception, another exception occurred:
> >
> >Traceback (most recent call last):
> > File "/usr/local/lib/python3.9/dist-packages/botocore/httpsession.py", line 464, in send
> ...
> > File "/usr/local/lib/python3.9/dist-packages/urllib3/connection.py", line 186, in _new_conn
> > raise NewConnectionError(
> >urllib3.exceptions.ProxyError: ('Cannot connect to proxy.', NewConnectionError(': Failed to establish a new connection: [Errno 101] Network is unreachable'))
> >
> >During handling of the above exception, another exception occurred:
> >
> >Traceback (most recent call last):
> > File "/var/app/volumes/Easy_Sample_SoftWare/Python/upload_octavia.py", line 114, in main
> ...
> > File "/usr/local/lib/python3.9/dist-packages/urllib3/util/connection.py", line 85, in create_connection
> > sock.connect(sa)
> >socket.timeout: timed out
> >
> >During handling of the above exception, another exception occurred:
> >
> >Traceback (most recent call last):
> > File "/usr/local/lib/python3.9/dist-packages/botocore/httpsession.py", line 464, in send
> ...
> > File "/usr/local/lib/python3.9/dist-packages/urllib3/connection.py", line 179, in _new_conn
> > raise ConnectTimeoutError(
> >urllib3.exceptions.ConnectTimeoutError: (, 'Connection to 10.17.33.3 timed out. (connect timeout=50)')
> >
> >During handling of the above exception, another exception occurred:
> >
> >Traceback (most recent call last):
> > File "/var/app/volumes/Easy_Sample_SoftWare/Python/upload_octavia.py", line 114, in main
> ...
> > File "/usr/local/lib/python3.9/dist-packages/botocore/httpsession.py", line 499, in send
> > raise ConnectTimeoutError(endpoint_url=request.url, error=e)
> >botocore.exceptions.ConnectTimeoutError: Connect timeout on endpoint URL: "送信先のAWS-URL"
>
> 例外送出のうち、末尾から二つまでのものを見ると、S3 サービスのエンドポイント URL("送信先のAWS-URL")のホスト名に対応する IP アドレスへの HTTP 接続がタイムアウトしているようですが、最初の方で "Network is unreachable" というエラーがあるのが気になりますね。
>
> 試しに、ですが、次のようにすると、どうなるでしょうか?
>
> 1.) コンテナ起動設定ファイルの set_command 行を、'et_command sleep infinity' に変える。
> 2.) 'podman_start [コンテナ名]' でコンテナを起動する。
> 3.) 'podman exec -it [コンテナ名] /bin/sh' でコンテナ上のシェルを対話モードで起動して、コンテナ上のシェルで 'sh/var/app/volumes/Easy_Sample_SoftWare/ShellScript/connect_chk.sh' を実行する。

検討いただきありがとうございます。
あれからいろいろと試していて、問題解決できました。

原因として、社内プロキシをを突破するために過去につけたプロキシ設定がコンテナ上に残っており
アップロードの際に邪魔をしておりました。
なのでプロキシの設定をしていた環境変数をプロキシを使用しない設定に変更し、またboto3を動作させるプログラム上でも
del os.environ['http_proxy'] を行うことで完全にプロキシを使用しない設定にしたところ動作をするようになりました。
少しスッキリしないのは、この状態でコンテナ上のシェルを対話モードで起動し実行した際にはエラーが起きなかったのは何故か分からない点です。
問題自体は解決したのですが、このような現象にお心当たりあれば後学のためにご教授頂けると幸いです。
対応頂いておりありがとうございます。以上、よろしくお願いします。

アットマークテクノの古賀です。

reiji_fujiさん:
>>試しに、ですが、次のようにすると、どうなるでしょうか?
>>
>>1.) コンテナ起動設定ファイルの set_command 行を、'et_command sleep infinity' に変える。
>>2.) 'podman_start [コンテナ名]' でコンテナを起動する。
>>3.) 'podman exec -it [コンテナ名] /bin/sh' でコンテナ上のシェルを対話モードで起動して、コンテナ上のシェルで 'sh/var/app/volumes/Easy_Sample_SoftWare/ShellScript/connect_chk.sh' を実行する。
>
>検討いただきありがとうございます。
>あれからいろいろと試していて、問題解決できました。
>
>原因として、社内プロキシをを突破するために過去につけたプロキシ設定がコンテナ上に残っており
>アップロードの際に邪魔をしておりました。
>なのでプロキシの設定をしていた環境変数をプロキシを使用しない設定に変更し、またboto3を動作させるプログラム上でも
>del os.environ['http_proxy'] を行うことで完全にプロキシを使用しない設定にしたところ動作をするようになりました。

了解しました。ひとまず、解決して何よりです。

>少しスッキリしないのは、この状態でコンテナ上のシェルを対話モードで起動し実行した際にはエラーが起きなかったのは何故か分からない点です。
>問題自体は解決したのですが、このような現象にお心当たりあれば後学のためにご教授頂けると幸いです。
>対応頂いておりありがとうございます。以上、よろしくお願いします。

状況確認のため、三点教えてください:

1.) Python アプリケーション内で 'del os.environ['http_proxy']' を行うようにしないと、症状が解消しなかったという認識で合っているでしょうか?

2.) 「プロキシの設定をしていた環境変数をプロキシを使用しない設定に変更し」というのは、具体的には、どうされたのでしょうか?
  たとえば、/root/.bashrc に当該の環境変数を設定する行があり、その行の内容を変更した、ですとか、あるいは、コンテナイメージ生成用の Dockerfile の ENV 行の内容を変更した、などです。

3.) (2) で変更した設定箇所以外に、当該の環境変数を設定しているところはないでしょうか?