カラクリサイクル

『輝かしい青春』なんて無かった人の雑記

AWS Lambda 用 Linux Binary を用意する時は、 lambci/lambda:build コンテナを使うと便利

と言うお得情報。


AWS Lambda の実行環境は、

という公式ドキュメントにも有るように、Amazon Linux をベースに構築されているので、 AWS Lambda 特有の制限さえ除けば、 Amazon Linux で動くバイナリをほぼなんでも動かせるっぽいのですが、 Amazon Linux の Installer ISO とかは今のところ存在しないし、また DockerHub で公開されている Amazon Linux の公式イメージも、 微妙に AWS Lambda の実行環境より新しいため、 完全に実行環境を合せた上で Amazon Linux でのバイナリを作ろうとすると、

Amazon EC2 で VM 借りるとかするしか……

となるのが普通っぽいです。

で、その辺り、自分は面倒なので色々とバイパス出来ないかなーと思って調べてみたんですが、どうも、

を使うと、色々と面倒な事なしに、下記の様な Dockerfile を用意するだけで、 様々なバイナリをローカルでコンパイルする事が出来ます:

※ ちなみにこれは fontconfig + TakaoEx Fonts の例です

FROM lambci/lambda:build

# setup build environments
ENV PKG_CONFIG_PATH /usr/lib/pkgconfig/:/usr/lib64/pkgconfig/
RUN yum -y install \
      freetype-devel \
      gperf \
      libxml2-devel \
      libxslt-devel \
      || true
RUN easy_install pip && pip install lxml

# build to fontconfig
RUN git clone https://anongit.freedesktop.org/git/fontconfig /tmp/.build \
    && cd /tmp/.build \
    && ./autogen.sh \
          --prefix=/tmp/.fontconfig/usr \
          --sysconfdir=/tmp/.fontconfig/etc \
          --mandir=/tmp/.fontconfig/usr/share/man \
          --enable-libxml2 \
    && make \
    && make install

# generates fonts.conf
RUN echo '<?xml version="1.0"?><!DOCTYPE fontconfig SYSTEM "fonts.dtd"><fontconfig><dir>/tmp/.fontconfig/usr/share/fonts</dir></fontconfig>' >/tmp/.fontconfig/etc/fonts/local.conf

# copy Japanese Fonts
COPY TakaoExGothic.ttf /tmp/.fontconfig/usr/share/fonts/
COPY TakaoExMincho.ttf /tmp/.fontconfig/usr/share/fonts/
COPY IPA_Font_License_Agreement_v1.0.txt /tmp/.fontconfig/usr/share/fonts/

# make archive
RUN  test -d /data || mkdir -p /data
RUN  tar -zcvf /data/fontconfig.tgz /tmp/.fontconfig

ENTRYPOINT [ "/bin/bash" ]

それで、

おお、これはすごい

と思って、コレのソースとかを色々見てたんですが、一箇所、微妙な所が有って、

  • lambci:lambda のベースイメージの lambci/lambda-base

は、どうも AWS Lambda の実行環境から ファイルシステムを Dump して作成したモノらしく、 まあ、その辺りのスクリプトが、

github.com

base ディレトリに詰っていたりして、

…… DockerHub に上がってるデータ、大丈夫なのかな、 ライセンス的に

と思ったんですが、とりあえず今のところは消されてないっぽいし、 また、仮に Docker Hub から削除されたとしても、AWS Lambda から実行環境を引っこ抜くスクリプト自体は、 開発者の裁量の元で自由に利用出来たりするので、まあ、その辺り心配な人は自分で引っこ抜いて自作すると良いんじゃないかな、 と僕は思います。はい。