はじめに
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" ]
CDK
で Docker
イメージの作成
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)
最後に
もし「この方法がより良いやり方だよ」ってのがありましたらコメント頂けると幸いです。