ヤマムギ

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認定クラウドプラクティショナー 改訂第2版」という本を書きました。

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

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

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

 - AWS , ,

ad

ad

  関連記事

AWS EC2 インスタンスステータスのチェックで失敗して起動しなくなり復旧

EC2のインスタンスに接続出来なくなったので、AMIから作成してElastic …

プライベートサブネットのEC2でセッションマネージャを使うようVPCエンドポイントを構成する

インターネットゲートウェイへのルートがないルートテーブルに関連付けられたプライベ …

AWSのアカウントを新規作成と、最低限やっておいた方がいいMFAの設定

AWSのアカウントを新規作成する手順を書き出しておきます。 ※2017年8月6日 …

boto3(Python SDK) s3 get_object でバイト範囲を指定する

S3のGetObjectアクションでバイト範囲を指定することができます。 それに …

CloudFormation Lambda-backedカスタムリソースチュートリアルをやりました

チュートリアル: Amazon マシンイメージ ID を参照するの手順に従ってや …

S3バケットにWebフォントをアップロードしてCORSを設定する

Webフォントファイルは、モジワク研究さんのマメロンを使用させていただきました。 …

iPad ProのWorking CopyでAWS CodeCommitのリポジトリを使う

iPad Proを導入しましたので、原稿執筆や校正でフル活用しようと思いまして。 …

AWSクイックスタートのActive Directory Domain Services on AWS

オンプレミスに見立てたActive Directory環境がほしかったので、AW …

EC2ハードウェア専有インスタンス(Dedicated Instances)を起動して請求書を確認してみました

EC2ハードウェア専有インスタンスのサイトには、次の料金と表記されています。 * …

AWS認定ソリューションアーキテクトアソシエイトのサンプル問題

AWS認定ソリューションアーキテクトアソシエイトのサンプル問題の解説を会社のブロ …