lambda関数からCPU依存のライブラリや各AWSサービスに接続を行う場合、lambdaが実行されるOS、Amazon Linuxからパッケージビルドを行えばトラブルが少ないです。
EC2にIAMロールの割り当て
Lamdaで使用するIAMロール同様のEC2用のIAMロールを作成しておき割り当てます。
AWSLambdaBasicExecutionRole
(CloudWatchへのアクセス)を必須として、S3FullAccessなど用途に応じたポリシーをアタッチしておく。
Python3系のインストール
Amazon Linuxには2も含めてPython3系が入ってないようなのでインストールします。尚、使用するLambdaのruntimeに応じて必要な言語の実行環境を用意します。
$ sudo yum -y groupinstall 'Development tools' $ sudo yum -y install zlib-devel openssl-devel $ sudo yum install python3 python3-devel $ sudo pip3 install virtualenv
virtualenvを利用する
$ virtualenv -p python3.7 workingName $ cd workingName
開発用仮想環境に移行
$ source bin/activate (workingName) [ec2-user@ip-172-30-0-117 workingName]
仮想環境からデタッチする
(workingName) [ec2-user@ip-172-30-0-117 workingName]$ deactivate
boto3ライブラリのインストール
virturalenvの仮想環境上で実行する。
$ source bin/activate (encryptfile) [ec2-user@ip-172-30-0-117 workingName]$ pip install boto3
lambda関数パッケージの作成
lambda_function.py
をworkingName/
に作成する。
パッケージの作成
$ zip /tmp/lambda_function.zip lambda_function.py $ cd lib64/python3.7/site-packages/ $ zip -r /tmp/lambda_function.zip *
パッケージのデプロイ
S3へのアクセルロールがあればS3経由でデプロイできる
$ aws s3 cp /tmp/lambda_function.zip s3://buketName/
アップロード後、lambdaのコントロールパネルよりS3よりzipファイルをアップロードできる。
リンク