61174


MySQL をみにいく Lambda が増えてきたので MySQL 接続までの共通コードと  
接続設定ファイルを Layer 化したいです

[code]

    /python/mysql.py
           /mysql.ini
           /pymysql
    
[/code]

という構成の Layer を作って  
mysql.py の中はこんな感じで mysql.ini を読むようにしたいのですが

[code]

    import pymysql
    
    import configparser
    config = configparser.ConfigParser()
    config.read('mysql.ini', encoding='utf-8')
    config = config['DEFAULT']
    
    def connect():
        return pymysql.connect(host    =config['db_host'],
                               user    =config['db_username'],
                               password=config['db_password'],
                               db      =config['db_name'],
                               charset =config['db_charset'])
    
[/code]

これをメインの Lambda から

[code]

    from mysql import connect
    
    def lambda_handler(event, context):
      mysql = connect()
        :
    
[/code]

という感じで読んでみたら layer 自体は呼べてるみたいなのですが layer 内で

[code]

    raise KeyError(key)
    KeyError: 'db_host'
    
[/code]

となってどうも mysql.ini の読み込みがうまくいってないみたいです  
メインの Lambda 内で同じコード同じファイルをおいたときは読めてたので  
設定ファイルが間違っているということはないはずです

layer 内においたファイルを configparser で読むことはできないのでしょうか

python は 3.7 です


CC BY-SA 4.0
2019-12-06T10:04:32.087
61168
2021-03-18T18:03:55.673
question
python aws-lambda
Lambda Layer 内の config を読む方法


Layer は AWS 上では /opt/ に配置されるみたいで  
/opt/python/mysql.ini を指定すれば読めました

ただローカルでテスト実行するときに毎回このパスを変更するか  
設定ファイルと /opt に配置しないといけなくなるので  
Layer 内での相対パスで読める方法があったら教えていただきたいです


CC BY-SA 4.0
2019-12-06T11:54:20.383
61174
2019-12-06T11:54:20.383
61168
answer