AWS Lambda(Python3.7)でPandocを実行する
2019/05/04
目次
昨日まで(AWS Batch)
昨日までは、Pandocを実行して、S3バケットにアップロードされたマークダウンをEPUBに変換するのに、AWS Batchを使おうと想ってました。
構成はこのような構成で、以下のブログに検証結果を書き残しました。
- Pandocサーバーのコンテナイメージを作成する
- ECR(Amazon Elastic Container Registry)にコンテナイメージをアップロードする
- AWS BatchでPandocコンテナイメージを実行する
今日から(AWS Lambda)
もともとAWS Lambdaでやりたかったのですが、Node.jsの手順はこちらのHOW TO RUN PANDOC IN AWS LAMBDAにあるのですが、Pythonでやるために調べるのが面倒だなあと思ってまして。。。。。
serverlesspub/pandoc-aws-lambda-binaryのReadmeを改めて読んでると、Lambda Layersでarn:aws:lambda:us-east-1:145266761615:layer:pandoc:1を直接指定したら使えるよ、と。
ソースにあるCloudFormationのテンプレートを見るとランタイムにPythonも入っているから大丈夫そうだなと。
ここで「ん?」と思って調べたのですが、Layerへのアクセス権はCLIで設定するようです。
aws lambda add-layer-version-permissionで設定できるようです。
アクセス許可されていないLayerのarnを指定してみたら、次のような表示になってちゃんと拒否されました。
ARNを指定してLayerを追加してPandocを試してみる
Lambda関数にレイヤーを追加するときに「レイヤーバージョンARNを提供」を選択して追加しました。
LambdaのIAMロールは「AWSLambdaExecute」をアタッチしたロールを設定しました。
ランタイムはPython3.7です。
テストしたコードは下記です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import json, subprocess, boto3 def lambda_handler(event, context): args = ['ls', '/opt'] response = subprocess.check_output(args) print(response) args = ['ls', '/opt/bin'] response = subprocess.check_output(args) print(response) args = ['/opt/bin/pandoc', '--version'] response = subprocess.check_output(args) print(response) |
LayerはLambdaのoptディレクトリに展開されるので、lsコマンドで内容を確認してみてます。
arn提供元のReadmeに書いてたとおり、bin/pandocの構成になっているはずなのでとりあえずバージョンを確認してみます。
出力は以下でした。
|
1 2 3 4 |
b'bin\n' b'pandoc\n' b'pandoc 2.2.1\nCompiled with pandoc-types 1.17.4.2, texmath 0.11.0.1, skylighting 0.7.1\nDefault user data directory: \nCopyright (C) 2006-2018 John MacFarlane\nWeb: http://pandoc.org\nThis is free software; see the source for copying conditions.\nThere is no warranty, not even for merchantability or fitness\nfor a particular purpose.\n' |
予定どおりです。
Pythonでも問題なくPandocが動きそうです。
自アカウントのLayerで構築する
でも提供元のLayerがなくなったらその時点で終わりです。
なのでやっぱり自前のLayerが欲しいです。
調べれば作ることはできそうです。
でもたった今動きが確認できたものが、Lambdaのoptディレクトリ以下にあります。
せっかくなので、LambdaからPandoc実行ファイルをS3バケットへアップロードして、それをローカルへダウンロードしてbinディレクトリを作ってzipにしました。
これをLayerにアップロードして自前のLayer完成です。
提供元の方、ありがとうございます!
PandocでマークダウンからEPUBに変換してみる。
次のコードでテストしてみました。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
import subprocess, boto3 def lambda_handler(event, context): s3 = boto3.resource('s3') s3.meta.client.download_file( 'bucket', 'input/input.md', '/tmp/input.md' ) args = [ '/opt/bin/pandoc', '-f', 'markdown', '/tmp/input.md', '-o', '/tmp/output.epub' ] response = subprocess.check_output(args) s3.meta.client.upload_file( '/tmp/output.epub', 'bucket', '/output/output.epub' ) |
無事に変換されたEPUBができてました。
これでS3にマークダウンが置かれたことをトリガーに自動化できそうです。
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。
「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。
「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
「AWSではじめるLinux入門ガイド」という本を書きました。
開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
LMA(amazon-transcribe-live-meeting-assistant)を海外とのインタビューミーティングで使ってみました
amazon-transcribe-live-meeting-assistant …
-
-
AWS Cost Explorerの設定で「EC2リソースの推奨事項を受け取る」を有効にしました
「EC2リソースの推奨事項を受け取る」という機能がAWS Cost Explor …
-
-
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト – プロフェッショナル」を執筆しました
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテク …
-
-
Amazon Linux2(EC2)にEC-CUBE 4をインストール
こちらのHOMEお知らせ・コラムAmazon Linux2にEC-CUBE4.0 …
-
-
RDSのスナップショットをS3へエクスポートが日本語マネジメントコンソールでもできるようになってました
RDSスナップショットをS3にエクスポートする新機能を試そうかと思ったのときは、 …
-
-
Organizations対応のAWS CloudTrailのAthenaテーブルでPartition Projectionを使用しました
パーティション向けのAlterテーブルの定期実行が面倒だと思っていたら、Part …
-
-
Systems Manager パブリックパラメータCLIでAWSのサービス数を出力してみました(2020/5/26)
先日のAWSのサービス数を数えてみました(2020/5/23)を見られて、お師匠 …
-
-
AWS LambdaのSQSへの自前ポーリングをやめてSQSイベントソーストリガーに変更した
以前は、LambdaがSQSからメッセージを受信するには、キューをポーリングして …
-
-
AWSアカウント内のCloudWatchアラームを削除する
やりたいこと 特定アカウント特定リージョン内のCloudWatdchアラームを全 …
-
-
Organizations組織でAWS SSOを有効にする
先日AWS Control Towerで環境を作ったら、自動でAWS SSOがで …




