Lambda から Athena の WorkGroup 指定実行で出力するエラー対処法
概要
Lambda を用いて Athena を実行しようとしたところ、下記エラーメッセージを出力しました。
[ERROR] ParamValidationError: Parameter validation failed: Unknown parameter in input: "WorkGroup", must be one of: QueryString, ClientRequestToken, QueryExecutionContext, ResultConfiguration Missing required parameter in ResultConfiguration: "OutputLocation" Traceback (most recent call last):
原因
stackoverflow に該当する投稿がありました。
The bundled version of boto3 in the Lambda execution environment is not up to date with the latest boto3 release. You can make a newer version available either by includin it in the deployment package or adding it as a Lambda Layer.
Lambda実行環境のboto3のバンドル版は、最新のboto3リリースでは最新のものではありません。 新しいバージョンを展開パッケージに含めるか、Lambda Layerとして追加することで、新しいバージョンを利用可能にすることができます。
ということで、Lambda 実行環境の boto3 が Athena の WorkGroup 指定に対応していないのが原因のようです。
クラメソすずきさんの記事として Athena の WorkGroup ではないですが、waf-regional
非対応だった時の対応記事がありました。
対処法
対処法としては 2 つあります。
- 新しいバージョンの boto3 をパッケージに含める
- Lambda Layer として追加する
新しいバージョンの boto3 をパッケージに含める
以前からある方法です。 上記、クラメソすずきさんの記事を参考にしてみてください
Lambda Layer として追加する
Qiita @hayao_k さんの記事が参考になります
おわり
Lambda Layer を利用することで複数の Lambda で共通利用するライブラリをパッケージに含めなくて済むのは便利です。 Lambda にはデプロイパッケージサイズの上限もあります。*1そのためデプロイパッケージサイズを小さくできる点でも利点がありそうです。 積極的に使っていきたいですね。