ヤマムギ

growing hard days.

*

AWS Lambda(Python3.7)でPandocを実行する

      2019/05/04

昨日まで(AWS Batch)

昨日までは、Pandocを実行して、S3バケットにアップロードされたマークダウンをEPUBに変換するのに、AWS Batchを使おうと想ってました。

構成はこのような構成で、以下のブログに検証結果を書き残しました。

今日から(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です。

テストしたコードは下記です。

LayerはLambdaのoptディレクトリに展開されるので、lsコマンドで内容を確認してみてます。
arn提供元のReadmeに書いてたとおり、bin/pandocの構成になっているはずなのでとりあえずバージョンを確認してみます。

出力は以下でした。

予定どおりです。
Pythonでも問題なくPandocが動きそうです。

自アカウントのLayerで構築する

でも提供元のLayerがなくなったらその時点で終わりです。
なのでやっぱり自前のLayerが欲しいです。
調べれば作ることはできそうです。
でもたった今動きが確認できたものが、Lambdaのoptディレクトリ以下にあります。

せっかくなので、LambdaからPandoc実行ファイルをS3バケットへアップロードして、それをローカルへダウンロードしてbinディレクトリを作ってzipにしました。
これをLayerにアップロードして自前のLayer完成です。
提供元の方、ありがとうございます!

PandocでマークダウンからEPUBに変換してみる。

次のコードでテストしてみました。

無事に変換されたEPUBができてました。
これでS3にマークダウンが置かれたことをトリガーに自動化できそうです。


最後までお読みいただきましてありがとうございました!

「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。

「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。

「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。

「AWSではじめるLinux入門ガイド」という本を書きました。

 - AWS , ,

ad

ad

  関連記事

VyOSでssm-userからvyosユーザーに切り替える

EC2 VyOSで/etc/resolv.confを設定しました VyOSにSS …

サイトのHTTPステータスを5分おきにチェックして200以外ならSlackに通知する

すいません。ここ最近出費が重なりまして、某監視サービスのプランを有料プランからF …

Amazon Becrock Nova Pro, Liteを校正目的で比較モードを試しました

書籍執筆の誤字脱字チェックと校正をしてもらうためにNovaを検討しています。 N …

AWS Service Catalogチュートリアル

AWS Service Catalog 開始方法のチュートリアルにそってみました …

AWS DeepLens開封の儀

去年(2019年)7月にamazon.co.jpでDeepLens買えますやんっ …

Lambda関数からAWS Systems Managerパラメータストアの値を取得して更新する

Lambda関数で自分自身の環境変数を更新する だと、Lambdaのエイリアスと …

AWS CloudShellでboto3(SDK for Python)使うならpython3

本の執筆をしていて、ちょっとAWS CLIやSDKのふるまいを確認したいことがあ …

テキストをAmazon PollyでMP3に変換してS3に格納(AWS Lambda Python)

Google Calendar Twilio ReminderのテキストをAma …

Amazon Route 53 Resolverを設定確認

Route 53 Resolverを設定しました。 東京リージョンのVPCをオン …

AWSマネジメントコンソールのマルチセッションサポート

AWSマネジメントコンソールにマルチセッションサポートが追加されましたので使いま …