AWS Lambda(Python3.7)でPandocを実行する際にCSSもLayerから読み込む
目次
Pandocで必要そうなオプションを確認しておく
先日の「AWS Lambda(Python3.7)でPandocを実行する」でLambda Python3.7を実行環境として、Layerから呼び出したPandocを実行して、マークダウンからEPUBへの単純な変換は確認できました。
電子書籍を本格的に作成するためには、Pandocの他のオプションもデザインも必須になります。
他のコンテンツとしては、マークダウンだけでなくCSSとtitle.txt、画像も必要です。
Pandocの各オプションが正常に動作するかを確認しておきたいと思います。
構成
構成は上記の構成で、変換元のマークダウンファイル、画像、title.txtなどの更新対象のコンテンツはS3バケットへアップロードします。
pandoc実行ファイルは前述の通り、Lambda Layersへ。
そして、CSSもLayersから読み込みました。
マークダウンの各オプションやCSSはこちらの「Markdown + Pandoc でお手軽に電子書籍を書く」を参考にさせていただきました。
ものすごくわかりやすかったです!
ありがとうございます!!
CSS on Lambda Layers
LambdaのLayersのメニューで新規作成して、cssをzipで圧縮したファイルをアップロードしました。
ファイル構成は、css/style.css にしました。
style.css
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 30 31 |
h1 { border-left: 8px ridge #000000; border-bottom: 4px ridge #000000; padding-left: 1px; } h2 { border-left: 6px solid #000000; padding-left: 1px; } h3 { border-left: 6px double #000000; padding-left: 1px; } img { width: 500px; } table { border-collapse: collapse; border: solid 2px black; } table th{ border: solid 1px black; } table td { border: solid 1px black; } |
参考にさせていただいたサンプルに、見出しのpaddingと画像サイズの指定を追加しました。
テストしたLambdaのコード
ランタイムはPython 3.7です。
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
import subprocess, boto3, os def lambda_handler(event, context): s3 = boto3.client('s3') list=s3.list_objects( Bucket='bucket', Prefix='input/' )['Contents'] for obj in list: if obj['Size'] > 0: print(obj['Key']) s3.download_file( 'bucket', obj['Key'], '/tmp/' + obj['Key'].replace('input/', '') ) args = [ '/opt/bin/pandoc', '-f', 'markdown', '-t', 'epub3', '/tmp/input.md', '/tmp/title.txt', '-o', '/tmp/output.epub', '--css', '/opt/css/style.css', '--toc', '--toc-depth=2' ] response = subprocess.check_output(args) s3.upload_file( '/tmp/output.epub', 'bucket', 'output/output.epub' ) |
S3 の input/ プレフィックスのオブジェクトをすべて Lambda の /tmp/ ディレクトリにダウンロードしてます。
ダウンロードが終わると、lambdaのローカルは次の構成になっています。
tmp
|-input.md
|-title.txt
|-lambda-layers.png
opt
|-bin/pandoc
|-css/style.css
argsがコマンドと引数です。
コマンド形式にすると、下記です。
1 2 3 4 5 6 |
/opt/bin/pandoc -f markdown -t epub3 \ /tmp/input.md /tmp/title.txt \ -o /tmp/output.epub \ --css /opt/css/style.css \ --toc --toc-depth=2 |
実行することにより、output.epubが生成されるので、それをS3にアップロードしています。
input.md
1 2 3 4 5 6 7 8 9 10 11 12 |
# Sample ## Module1 test ![サンプル画像](/tmp/lambda-layers.png "サンプル画像") 列1|列2 :--|:-- 値1|値2 |
タイトル、画像の挿入、スタイルの適用、問題なく実行されました。
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。
「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。
「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
「AWSではじめるLinux入門ガイド」という本を書きました。
開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
API Gatewayから直接 DynamoDBに書き込む
やりたいこと WebページでOやXを押したときに、どっちを押したかをDynamo …
-
GoogleフォームからAPI Gatewayで作成したREST APIにPOSTリクエストする
「API GatewayからLambdaを介さずにSNSトピックへ送信」の続きで …
-
Rocket.ChatにAPIで投稿するテスト(Postman)
トレーニング期間中で一時利用するチャットが欲しいなあと思い、Rocket.Cha …
-
S3バケットのデフォルト暗号化はデフォルトだったことを確認しました
S3バケットのデフォルト暗号化は名前のとおりだとデフォルトなので、暗号化を指定し …
-
AWSアカウント ルートユーザーのMFAが使えなくなったので復旧
AWSのルートユーザーどころか、MFAが使えるログインすべてが使えなくなって焦り …
-
Projectタグを強制するSCPでアクションやリソースを限定しないとき成り立つのか
ふと疑問に思ったので試しました。 予想は、拒否されてしまう、です。 [crayo …
-
ヤマムギvol.23 Amazon RDS for MySQLとAmazon Aurora Serverlessの起動のデモをしました
ゴールデンウィーク毎朝デモ勉強会は終わったのですが、土曜日にやれるときがあれば、 …
-
AWS Expert Online at JAWS-UG首都圏エリアに参加して「Amazon EC2 スポットインスタンス再入門」を聞いてきた
AWS Expert Onlineという勉強会がありまして、AWS ソリューショ …
-
IAMアイデンティティセンター(IIC)のList Assignment APIを確認しました
やりたいことは、IAMアイデンティティセンター(IIC)のユーザー名をキーにして …
-
AWS Organizationsからメンバーアカウントを直接「閉じる」ことができるようになりました
これまでは、メンバーアカウントはOrganizations組織から「除外」して独 …