Level10

とあるSEの備忘録

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 に該当する投稿がありました。

stackoverflow.com

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 非対応だった時の対応記事がありました。

dev.classmethod.jp

対処法

対処法としては 2 つあります。

  1. 新しいバージョンの boto3 をパッケージに含める
  2. Lambda Layer として追加する

新しいバージョンの boto3 をパッケージに含める

以前からある方法です。 上記、クラメソすずきさんの記事を参考にしてみてください

Lambda Layer として追加する

Qiita @hayao_k さんの記事が参考になります

qiita.com

おわり

Lambda Layer を利用することで複数の Lambda で共通利用するライブラリをパッケージに含めなくて済むのは便利です。 Lambda にはデプロイパッケージサイズの上限もあります。*1そのためデプロイパッケージサイズを小さくできる点でも利点がありそうです。 積極的に使っていきたいですね。