0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWS CDKAdvent Calendar 2022

Day 21

【小ネタ】Lambda の Dockerイメージをコードから作成した話

Posted at

はじめに

Releaseタグ作成からEKSへのデプロイを自動化した話 でやった内容のうち、 Lambda に焦点を当てた内容です。

載せているコードは一部だけなので、全体を見たい方は上記の記事から辿ってください。

環境

  • Kubernetes: 1.24
  • AWS CDK for Golang: v2.56.1

やったこと

Lambda用のコードを準備

lambda ディレクトリに、必要なファイルを用意します。
Dockerfile のみ載せています。
他は、Github リポジトリを参照。

  • Dockerfile
FROM public.ecr.aws/lambda/python:3.9

COPY . ${LAMBDA_TASK_ROOT}

COPY requirements.txt  .
RUN pip install --upgrade pip && pip3 install -r requirements.txt --target "${LAMBDA_TASK_ROOT}"

CMD [ "app.lambda_handler" ]

CDKDocker イメージの作成

AssetImageCodeProps でどの OS で動かすかの設定をし、 DockerImageCode でどのコードで docker イメージを作成するかを設定しています。

current, _ := os.Getwd()
imageProps := &awslambda.AssetImageCodeProps{
    Platform: awsecrassets.Platform_LINUX_AMD64(),
}
props := &awslambda.DockerImageFunctionProps{
    Code: awslambda.DockerImageCode_FromImageAsset(
        jsii.String(path.Join(current, "../lambda")),
        imageProps,
    ),
    Environment: &map[string]*string{
        "CODEPIPELINE_NAME": jsii.String(config.Pipeline.Name),
        "BUCKET_NAME":       jsii.String(config.S3.BucketName),
        "ACCESS_TOKEN":      jsii.String(config.Github.AccessToken),
    },
    Timeout: awscdk.Duration_Seconds(jsii.Number(config.Lambda.TimeoutSec)),
    Role:    role,
}

lambdaFunction := awslambda.NewDockerImageFunction(scope, jsii.String("id-lambda"), props)

最後に

もし「この方法がより良いやり方だよ」ってのがありましたらコメント頂けると幸いです。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?