まーぽんって誰がつけたの?

iOS→Scala→インフラなおじさん技術メモ

dockerを何かを生成したり実行したりするツールとして使うという選択肢

dockerはサーバー動かすやつでしょ?

dockerといえばサーバーみたいなものに使うものだと思っていました。転職してきた当時、こんな風に使えるんや!と自分の中でパラダイムシフトが起きたのを覚えています(大袈裟)

cloudfrontの署名URLを作るperlのスクリプトを動かしたい

Perl を使用して URL 署名を作成する

This sample was built using Perl 5.8.0. The following Perl modules, which you can download from CPAN:

perl?俺のmacのperlって何が入ってるんだろう?cpan?やったことないしな。なんかmacだと動く動かないとか面倒だなーどうしようとなる。

そこでdockerです

f:id:masato47744:20180125003612p:plain

dockerは自分の環境を汚さずにコマンド実行くんとして使える

たったこれだけでできる

FROM perl:latest

RUN cpan install MIME::Base64 URI

RUN curl http://d1nqj4pxyrfw2.cloudfront.net/cfsign.pl -o /usr/local/bin/cfsign.pl
RUN chmod +x /usr/local/bin/cfsign.pl

ENTRYPOINT [ "perl", "/usr/local/bin/cfsign.pl" ]

Dockerfileの解説

  • perlのバージョン??perlが動く環境??
    • perl:latestでおk
  • 必要なCPANはどれ??
    • dockerなので好きなだけtry & error
  • コマンドに引数でオプション渡したいんだけど・・
    • ENTRYPOINTをつかおう!
  • コマンドに外部ファイルを渡したいんだけど・・
    • -v で実行時に渡そう

ということで、上記のdockerイメージを作って、こんな感じで実行してあげれば自分の環境を汚さずにコマンドが実行できます。-vで秘密鍵を渡したりもできます。

$ KEY_PATH=private.pem
$ KEY_PAIR_ID=APKEXAMPLEID
$ CLOUDFRONT_RESOURCE_URL=https://yourdomain/sample.png
$ docker run -v $(dirname ${KEY_PATH}):/work cfsign \
  --action encode \
  --url ${CLOUDFRONT_RESOURCE_URL} \
  --expires $(date -v +1d +%s) \
  --private-key /work/$(basename ${KEY_PATH}) \
  --key-pair-id ${KEY_PAIR_ID}
Encoded URL:
https://yourdomain/sample.png?Expires=xxx&Signature=xAK***Uwc~kX-cA__&Key-Pair-Id=APKEXAMPLEID

ほかにも

サーバーにログインして自己証明書を生成するとか、なんかサーバー上でやらないといけないみたいな手順書みたいになってるものはdocker化できます。もし、そういうものを見かけたときは思い出してあげてください