状況

terraform-aws-modules/terraform-aws-lambda で APIのAuthorizerをデプロイしようとして、pyjwt[crypto] でID Tokenを検証しようとしたら、そもそもpyjwtのインポートでエラーが発生。

[ERROR] Runtime.ImportModuleError: Unable to import module 'authorizer': /lib64/libc.so.6: version `GLIBC_2.28' not found (required by /var/task/cryptography/hazmat/bindings/_rust.abi3.so)

コード構成

├── code
│   ├── authorizer.py
│   ├── poetry.lock
│   └── pyproject.toml
└── main.tf
module "authorizer_lambda" {
  source  = "terraform-aws-modules/lambda/aws"
  version = "6.0.1"

  function_name = local.function_name
  handler       = "authorizer.handler"
  runtime       = local.runtime

  source_path = [
    "${path.module}/code",
  ]
}

原因

エラーメッセージの通り、 GLIBC_2.28 が存在しない。もっと言えば /var/task/cryptography/hazmat/bindings/_rust.abi3.so があればいけそう。

対応

# _rust.abi3.soを含んだパッケージを取得
$ pip install --platform manylinux2014_x86_64 --implementation cp  --only-binary=:all: --upgrade --target temp/ cryptography

# 該当のディレクトリを作成
$ mkdir -p cryptography/hazmat/bindings

# pipで準備した_rust.abi3.soをコピー
$ cp -ai temp/cryptography/hazmat/bindings/_rust.abi3.so cryptography/hazmat/bindings/

# pipのパッケージは不要なので削除
$ rm -fR ./temp

# cryptography/hazmat/bindings/_rust.abi3.soが準備できました
$ tree cryptography/
cryptography/
└── hazmat
    └── bindings
        └── _rust.abi3.so

あとはTerraform Applyをすれば、pyjwt[crypto] でID Tokenを検証ができるようになっています。

广告
将在 10 秒后关闭
bannerAds