AWS

【AWS Lambda】[ERROR] TypeError: can only concatenate str (not "OSError") to strを解決する

はじめに

React.jsで作られたウェブページをCI/CDでデプロイしている際、デプロイエラー([ERROR] TypeError: can only concatenate str (not "OSError") to str)が出るようになりました。

CI/CDの簡単な構成は下記です。

AWS構成図

CI/CDの方法は下記で紹介しています。

今回は、[ERROR] TypeError: can only concatenate str (not "OSError") to strのエラーを解決する方法を紹介します。

Lambdaのエラー内容

エラー状況を切り分けていくと、

・前日までは正常に動作していた

・backlogのwebhookで失敗している、ログは出ない

・API Gatewayは動いてはいる

・Lambdaでエラーが出ている

・S3(CI/CD)は更新されていない

・CodePipelineは動いていない

ということが分かりました。

backlog~API Gateway~Lambda間でエラーが出ており、LambdaのエラーログをCloudwatchで確認すると、下記エラーで止まっていました。

[ERROR] TypeError: can only concatenate str (not "OSError") to str

Traceback (most recent call last):

  File "/var/task/lambda_function.py", line 123, in lambda_handler

    print("ERROR" +  e)

調査

[ERROR] TypeError: can only concatenate str (not "xxxx") to str

この部分のエラーについて調べてみると、「文字列と数値の結合時のエラー」と出ています。

前日まで動いていたのに文字列と数値の結合エラーとは?となってました。

次に(not "OSError")の部分を調べます。

OSerrorというのは、Pythonの例外エラーの中で、システム関数エラーというもののようです。

また、エラーが出ている行はshuti.make_archivelというファイルをzip化する箇所でのエラーでした。

色々ページを漁ると、tmpフォルダが無い場合や一杯になっている場合にも出るエラーという事が分かりました。

Lambdaですので、tmpフォルダが無いということや、古いデータが溜まっているということは考えられません。

結論

Lambdaのエフェメラルストレージ容量の問題でした。

容量を大きくすることでエラーを解消することができました。

対応として、512Mから2048Mと4倍ほど引き上げました。

今回のエラーはTypeErrorで出るため切り分けが難しいエラーとなります。

shutilのエラーがOSErrorで出力されて、TypeerrorとしてOSErrorが渡されている状態のようです。

AWSの効果的な学習方法は?

aws study

最後に、AWSの効果的な学習方法をご紹介します。

自学自習はUdemy講座

オンラインプラットフォームであるUdemyは安価で手軽にAWSの学習が可能です。

しかし、上記で紹介したような実際のAWSエンジニアが実施している構築スキルまでは教えてくれません。初心者~中級者向けの講座が多くなっています。

大きなチャンスのためのビッグセール.

私も受講した、初心者向けAWS講座を下記記事でまとめています。ご参考ください。

1人で学習が難しい場合はオンラインレッスン

1人で学習が難しい場合はオンラインレッスンがおすすめです。

最近では、AWS講座を提供するオンラインレッスンも増えてきました。

料金は高くなりますが、現役エンジニアからAWSについて学ぶことができます。

本ブログ執筆者のメンタリングも受付中

本ブログを執筆している[KAITech]もメンタリングを受け付けています。
オンラインレッスンは高くて手が出せないという方は私までお気軽にご相談ください。
下記から承っております。

  • この記事を書いた人

KAITech

大企業/中小企業/ベンチャー企業を経験
AWS/ネットワークのエンジニア
記事執筆やメンタリング等、仕事の依頼はコチラから
https://www.kaitech-media.biz/work/

-AWS