やりたいこと
- S3にデータがアップされたらSNSからVPC内のLambdaを起動
- 起動したLambdaにてアップされたデータをS3から取得し、内容をパース
- パースした内容を ElasticSearchにインサート
問題点
2.の手順でLambdaからS3にアクセスしようと思ったら、以下のエラーが発生
Exception (<class 'boto3.exceptions.ResourceNotExistsError'>) : The 's3' resource does not exist.
The available resources are:
確認内容
- S3へのPutイベントでSNSをPublishし、Lambdaが起動することはOK
- VPC内のLambdaから外部のサーバにアクセスできることはOK
- Lambdaにてimport boto3、import botocore もエラーなくOK
- でも、boto3のresourceなどでアクセスすると、s3 resourceは存在しないって怒られる。
確認のため、boto3で ec2 resourceをアクセスしにいったら同様に ec3 resouceは存在しないと怒られる。
boto3がおかしい?
Lambda Functionをデプロイする際、必要なパッケージをダウンロードしてzipでアップしている。この時、きちんとboto3、botocore両方とも以下のコマンドで含めている。
pip install boto3 -t .
もしかして、Lambda Function内のboto3がおかしい??
やったこと
試しに、Lambda Functionパッケージ内から boto3とbotocoreを
削除する。
削除した状態で Lmabda FunctionをDeployし、S3にファイルをアップロード。すると、SNS経由でLambdaに通知されたS3のKeyからデータを取得することに成功。
boto3をzipに含めたことが原因だったようです。。
##参考