LoginSignup
1
0

More than 3 years have passed since last update.

AWS LambdaでGraphvizを動かす

Posted at

初投稿。メモも兼ねて

必要なもの

  • Docker version 18.03.0-ce
  • Python 3.7.3
  • graphviz version 2.40.1
  • AWS Lambda
  • AWS S3

環境構築

1.Lambdaの環境に合わせてビルドするためにコンテナを用意する


$ docker run -v "{$PWD}":/var/task -it amazonlinux:2 /bin/bash

2.ビルドツールとかpython3をインストール

$ yum groupinstall "Development tools"
$ yum install -y cairo-devel pango-devel wget python3

3.Graphvizをビルド

$ wget https://graphviz.gitlab.io/pub/graphviz/stable/SOURCES/graphviz.tar.gz
$ tar -xvf graphviz.tar.gz
$ cd graphviz-2.40.1
$ ./configure --prefix=/var/task
$ make
$ make install

4.確認

$ /var/task/bin/dot -V
dot - graphviz version 2.40.1 (20161225.0304)

Lambda上でPythonから動かす

1.Lambdaで起動するスクリプトを書いとく

def lambda_handler(event,context):
    # パスを通しておく
    os.environ["PATH"]+=":/var/task/bin"
    # SVG形式を指定。PNGとPDFはだめだった。
    G = Digraph(format='svg')
    G.attr('node', shape='circle')

    N = 15
    for i in range(N):
        G.node(str(i), str(i))

    for i in range(N):
        if (i - 1) // 2 >= 0:
            G.edge(str((i - 1) // 2), str(i))

    print(G)
    G.render('/tmp/tree')

    # 描画できているか確認するためにS3にアップロード
    bucket_name = "my-bucket-name"
    s3 = boto3.resource('s3')
    s3.Bucket(bucket_name).upload_file('/tmp/tree.svg', 'tree.svg')
    return "OK"

2.S3にアップロードするdeploy_package.zipを作成

$ pip3 install -t /var/task graphviz
$ zip -r9 deploy_package.zip

3.deploy_package.zipをS3にアップロードしてLambdaを作成。ロールにS3アップロード権限付けること。

結果

LambdaをテストするとS3バケットに「tree.svg」があるはず。

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f36343130302f33323462633038392d656564632d653963372d323631612d3337633438346331656366392e706e67.png

参考

参考にさせて頂きました。
Deploying Graphviz on AWS Lambda
graphvizを使ってPython3で木構造を描く

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0