0
0

lambdaで "Runtime.ImportModuleError" の解消

Last updated at Posted at 2024-08-11

lambdaで Youtube Data APIを使おうとしたところ、 "Runtime.ImportModuleError" が発生

今までAWSにはほとんど触れずに来たのだが、仕事で知識が必要になってきたため、Lambdaを触ってみることにした。ちょうど、家でYoutubeを見ながらエクササイズに励んでいるため、Youtube Data API で、動画のIDからの再生時間を取得する処理を作ってみることにした。コードのサンプルは、ありがたいことに、Youtube Data API のページから出力できるので、それを少しだけ修正して、lambda handlerに転記した。


# Sample Python code for youtube.videos.list using API Key
# See instructions for running these code samples locally:
# https://developers.google.com/explorer-help/code-samples#python

import googleapiclient.discovery
import googleapiclient.errors

def lambda_handler(event, context):
    api_service_name = "youtube"
    api_version = "v3"
    api_key = "your api key" 

    # Create an API client
    youtube = googleapiclient.discovery.build(
        api_service_name, api_version, developerKey=api_key)

    request = youtube.videos().list(
        part="snippet,contentDetails",
        // まずはサンプルで固定値
        id="8j9L9h3ODfU" 
    )
    response = request.execute()

    print(response)

実行してみると、以下のようなエラーが発生した。

{

  "errorMessage": "Unable to import module 'lambda_function': No module named 'googleapiclient'",

  "errorType": "Runtime.ImportModuleError",

  "requestId": "b3dd46ce-4ccf-4a60-9389-215b55c04768",

  "stackTrace": []

}

lambda レイヤーにライブラリのzipをアップしてみるが直らない

ライブラリのコードをアップしていないので、それはそうだと思い、調べるとlambda レイヤーというところにアップするのが一般的だそうだ。以下を参考にzipファイルをアップしてみるも、全く直らず、途方に暮れた。
https://qiita.com/_YukiOgawa/items/66832f704be1218b09c4
lambdaレイヤーというのは、ライブラリや設定ファイルなどをアップしておける場所だそうだ。この記事の説明がわかりやすかった。

zipにするディレクトリ名が重要だった!

あれこれ調べた後に、もう一度最初の記事を読むと、 "pythonはLambdaレイヤーにアップロードするフォルダ名称と必須なので、ここは変えないようにしてください。" と記載があった!自分の場合、zipにする前のディレクトリ名を適当につけており、これが原因で失敗していた。ということで、zipにする前のディレクトリ名を "python" にしてアップロードすることで、無事解決した。

python以外のディレクトリ名

おまけ: Cloud9が使えず混乱

上記を調べる過程で、ローカル環境が干渉してしまい、うまくいかなかったという記事を見かけた。ということで、AWSのCloud9を使ってみようとするものの、アクセス権がないという画面になってしまった。AWS知識が乏しいもので、四苦八苦しながら権限を確認するものの、権限はあるように見える。
image.png
どうやら、サービスの新規利用を停止していたようだ。
https://www.itmedia.co.jp/news/articles/2407/31/news173.html
権限がないと思い込んだが、たしかによくみると、"詳細はこちら"のページに "we have made the dicision to close new customer access to AWS Cloud9" とある。lambdaレイヤーもCloud9もAWS用語の見慣れなさに惑わされて、説明をよく読んでいないことで時間を浪費することになった。気をつけなければいけない。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0