LoginSignup
1
2

More than 1 year has passed since last update.

AWS提供でないベースイメージからLambdaを作る

Posted at

はじめに

以前、コンテナイメージからLambdaを作りました。

ところが諸事情(Amazon Linuxでは、PowerShellが十全に動かせず、MS365の監査ログが取得できない)のため、Ubuntuをベースとしたコンテナを作ろうとした際に、わかったことややったことを記事にします。

参考

コンテナイメージを使ったLambdaの仕組みについての解説は以下になります。

Dockerfileの作り方の参考にしたのは以下です。

Lambda動作の仕組み

公式の解説に書いてある内容の自分なりの解釈です。

  • Lambda関数を実行するには、Lambdaサービスとランタイムの間で対話が必要
    • 普通のコンテナイメージそのままでは、この対話ができないのでLambdaでは動かない
    • AWSが提供するLambdaのベースイメージには、これらが実装済み
  • 自前のコンテナの場合は、AWS提供の言語ごとのRuntime Interface Client(RIC)を組み込むと楽

環境

以前と同じ、Cloud9だけになります。

やったこと

以前と同じようにディレクトリやファイルを作っていきます。

# プロジェクトディレクトリ作成
mkdir sample-ecr-lambda
cd sample-ecr-lambda

# リージョンとアカウントIDを環境変数にセット
## 記事の中では直接使いませんが、ECRを作成したりPUSHしたりする際に使います
REGION="ap-northeast-1"
ACCOUNTID=$(aws sts get-caller-identity --output text --query Account)

# ファイル作成
touch app.py
touch Dockerfile
app.py
import json

def handler(event, context):
    return {
        "statusCode": 200,
        "body": json.dumps(
            {
                "message": "hello world",
            }
        ),
    }

ベースイメージを素のUbuntuから作るので、Dockerfileは以前のものと異なります。

  • 素のUbuntuには、Pythonとpipが入っていないのでインストール
  • Python用のRICをインストール
  • エントリポイントとして、インストールしたRICを指定
Dockerfile
FROM ubuntu:20.04

RUN apt-get update && apt-get install -y python3-pip

RUN mkdir /function && \
  pip install --target /function awslambdaric
  
COPY app.py /function/

WORKDIR /function

ENTRYPOINT [ "/usr/bin/python3", "-m", "awslambdaric" ]

CMD [ "app.handler" ]

このDockerfileでイメージを作成します。

docker build -t func1 .

あとは以前と同じような流れになります。

  1. ECRリポジトリ作成
  2. イメージPUSH
  3. Lambada作成

おわりに

今回はLambdaの実行に必要なRICの話と、Ubuntuで動かす方法について記事にしました。

自前のイメージから作成する方法の情報収集の最初にRICのことが知れ、大きく時間を無駄にしなくて済んだので、自分と同じような方の参考になれば幸いです。

1
2
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
2