ようやくクラウドが動きました。コードのLinux化に続く難所は越えたと思います。
嵌った点は、次の2点でした。
1)SDK使用時、DefaultTimeoutを超えると同期リクエストでもリトライする。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/lambda-function-retry-timeout-sdk/
非同期は、リトライが入るのは理解できますが、同期リクエストでもリトライがDefaultでは入ります。
確かに書いてありますが、C++ については、aws-sdk-docにもそのような記述例はなく、設定方法が不明です。海外を含めてこの点を指摘している記事はないと思います。
Lambdaリソース側では、メモリ3GB、15分のタイムアウトを設定しています。それとは別にCallerがタイムアウトを設定してやらないといけません。そうしないと、C++の場合、defaultでは、10秒くらいで、タイムアウトリトライが発生するようです。リソース側の設定と同じ、15分に設定しました。
Aws::Client::ClientConfiguration clientConfig;
clientConfig.requestTimeoutMs = 15*60*1000;
2)Pythonライブラリの配置
クラウドにアップするときに、ZIPで固めます。これは、CMAKEがやってくれます。ただし、Pythonについては、コアについてはやってくれますが、Python上のソースについてはやってくれません。この辺、どこに配置されるかが判らず、以下のようなエラーが発生しました。
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
これについては、以下でDirectoryを出力させてどこに配置されるのかを調べました。
std::system("ls -l ");
で、上で調べたDirectoryを環境変数PYTHONHOMEに設定して事なきを得ました。
0 件のコメント:
コメントを投稿