0
0

More than 1 year has passed since last update.

aws lambda に docker imageを cdkでデプロイしたメモ

Last updated at Posted at 2023-03-06

概要

dockerイメージであげたことがなかったのでやってみた。
AIも使ってみたけど、結構いい感じにアドバイスしてくれる。

AIくんに聞いてみる

ちょうどNotionAIを導入したところだったので聞いてみた。
下記コードを書いてれた。賢い。Python書いたことほとんどないので助かる。
公式ベースを使う形。

cdk.ts
import * as cdk from 'aws-cdk-lib';
import * as lambda from 'aws-cdk-lib/aws-lambda';
import { DockerImageFunction } from 'aws-cdk-lib/aws-lambda-docker';

const app = new cdk.App();
const stack = new cdk.Stack(app, 'LambdaDockerStack');

const dockerImage = lambda.DockerImageCode.fromImageAsset('./', {
  cmd: ['app.handler'], // Pythonファイルのエントリーポイントを指定
});

new DockerImageFunction(stack, 'LambdaFunction', {
  code: dockerImage,
  memorySize: 512,
  timeout: cdk.Duration.seconds(30),
});
Dockerfile
FROM public.ecr.aws/lambda/python:3.8
COPY app.py ${LAMBDA_TASK_ROOT}
CMD [ "app.handler" ]
app.py
import sys
def handler(event, context):
    return 'Hello from AWS Lambda using Python' + sys.version + '!'

デプロイ

デプロイすると、Lambdaが作成される。
テスト実行で、 Helloが返ることを確認できた。

なお、デプロイでイメージはECRにアップロードされる。
image.png

代替ベースイメージからの作成

公式イメージ以外からの作成も試してみる。
ソース
フォルダはデフォルトと同じ/var/taskを使ってみた。

Dockerfile
FROM python:3

WORKDIR /var/task
COPY app.py /var/task

# lambda実行用
RUN pip install awslambdaric

ENTRYPOINT [ "/usr/local/bin/python", "-m", "awslambdaric" ]

CMD [ "app.handler" ]

参考

公式
代替ベースイメージからのイメージの作成
マルチステージビルドの利用

0
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
0
0