質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

0回答

2339閲覧

AWS Lambda(Cloud9使用)でpopplerを使用する方法

uma9626

総合スコア42

Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

1クリップ

投稿2020/04/04 16:42

編集2020/04/13 13:30

前提・実現したいこと

AWS lambdaでslackのslashコマンドを作成しようとしています。
slashコマンドの処理内容は、「インターネットからPDFをダウンロードし、それを画像に変換してslackに投稿する」です。
PDFを画像に変換するためにpdf2imageというモジュールを使用したいと思っているのですが、lambdaでpdf2imageが使える環境を構築する段階で躓いています。

環境

・ソースコード

python

1# lambda_function.py 2from pdf2image import convert_from_path 3 4# 略 ここまででPDFをダウンロードし、/tmp/menu.pdf に保存 5 poppler_dir = '/home/ec2-user/environment/FunctionName/FunctionName/poppler/bin' 6 os.environ["PATH"] += os.pathsep + poppler_dir 7 8 pdf_path = "/tmp/menu.pdf" 9 pages = convert_from_path(pdf_path, 150) 10# 略 ここからPDFを画像にしslackに投稿

・ディレクトリ構造

/home/ec2-user/environment ├ FunctionName | ├ FunctionName | | ├ poppler | | | ├ bin | | | └ ... | | └ lambda_function.py | ├ pdf2image | ├ Pillow | ├ PIL | ├ venv | ├ __init__.py | ├ requirements.txt | └ template.yaml └ README.md

発生している問題・エラーメッセージ

pdf2imageのconvert_from_pathを使用したところ、以下エラーが発生しました。

{ "errorType": "PDFInfoNotInstalledError", "errorMessage": "Unable to get page count. Is poppler installed and in PATH?", "stackTrace": [ " File \"/var/task/FunctionName/lambda_function.py\", line 32, in lambda_handler\n pages = convert_from_path(pdf_path, 150)\n", " File \"/var/task/pdf2image/pdf2image.py\", line 89, in convert_from_path\n page_count = pdfinfo_from_path(pdf_path, userpw, poppler_path=poppler_path)[\"Pages\"]\n", " File \"/var/task/pdf2image/pdf2image.py\", line 431, in pdfinfo_from_path\n \"Unable to get page count. Is poppler installed and in PATH?\"\n" ] }

os.environ["PATH"] += os.pathsep + poppler_dirで、poppler/binへのパスは通っているハズなんですが...

試したこと

1. エラーを見るに、環境変数PATHにpoppler/binが通せてないように見えたので、こちらを参考に以下を試してみました。

export PATH=$PATH:/home/ec2-user/environment/FunctionName/FunctionName/poppler/bin

が、解決しませんでした。

2. こちらも見つけたので試してみました。

#template.yaml Resources: FunctionName: Type: 'AWS::Serverless::Function' Properties: # 中略 Environment: Variables: path: '/home/ec2-user/environment/FunctionName/FunctionName/poppler/bin'

が、こちらでも解決しませんでした。

3.こちらこちらを参考に、ソースコードのpoppler_dirを以下のように変えてみました。

poppler_dir = Path(__file__).parent.absolute() / "poppler/bin" poppler_dir = os.path.join(os.getcwd(), "poppler", "bin") print(str(poppler_dir)) # /var/task/poppler/bin

が、これでも解決しませんでした。

質問内容

cloud9でlambda関数を編集しているのですが、環境変数にパスを通す方法を教えて頂けますと大変助かります。
もしくは、環境変数を設定しない方法でpdf2imageを使用する方法や、pdf2image以外でPDFを画像に変換するモジュール等あればそちらでも大変ありがたいです。

追記

その後も調べたところ、Lambdaに上げたpopplerはWindows用ということが判明しました。
なのでLinux用のpopplerをインストールしようとしましたが、cmakeのバージョンが低い、freetypeが無い、fontconfigが無い等々、問題が続出し...
英語のドキュメントを騙し騙し読むのも疲れてしまったので、LambdaからEC2起動→EC2で処理(動作確認済)→LambdaでEC2停止という構成にしようと思います。
完成したら自己解決とします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問