趣味のSlack Bot(Lambda)をコンテナから作ってみた時のメモです。。
実装
Gemfileを使って bundle installする時、 --path vendor/bundleとしないとライブラリが読み込まれないところが注意点。
ちなみに --path vendor/bundleはbundlerのバージョンによって非推奨になるらしい。詳しく調べてない。。。
- Dcokerfile
FROM amazon/aws-lambda-ruby:2.7
RUN yum -y update
RUN yum -y install gcc-c++ lstdc++ make
COPY Gemfile ${LAMBDA_TASK_ROOT}
COPY Gemfile.lock ${LAMBDA_TASK_ROOT}
RUN bundle install --path vendor/bundle
COPY app.rb ${LAMBDA_TASK_ROOT}
CMD [ "app.handler" ]
- 関数
def handler(event:, context:) # ここで実装 end
デプロイ手順(ECRにDockerイメージをデプロイ)
- Dockerfileをビルドしてイメージを作成
docker build -t purelaba .
- ECRにリポジトリ作成(初回デプロイ時のみ)
aws ecr create-repository --repository-name purelaba --image-scanning-configuration scanOnPush=true
上記コマンドを打つとECRに作成されたリポジトリ情報が返ってくる。
{
"repository": {
"repositoryArn": "arn:aws:ecr:us-west-2:00000000000:repository/purelaba",
"registryId": "00000000000",
"repositoryName": "purelaba",
"repositoryUri": "00000000000.dkr.ecr.us-west-2.amazonaws.com/purelaba",
"createdAt": 1609931239.0,
"imageTagMutability": "MUTABLE",
"imageScanningConfiguration": {
"scanOnPush": true
}
}
}
- 作成したDcoekr Imageにタグをつける
docker tag purelaba:latest 00000000000.dkr.ecr.us-west-2.amazonaws.com/purelaba:latest
- Docker ログイン(初回のみ)
aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin https://00000000000.dkr.ecr.us-west-2.amazonaws.com
- ECRにimageをpushする
docker push 00000000000.dkr.ecr.us-west-2.amazonaws.com/purelaba:latest
Lambda関数の作成(GUI ver)
- Lambda関数一覧からLambda作成ボタンを押して作成 Start

- Lambda関数の設定 Lambda関数の元になるイメージをECRのリポジトリに置いてあるイメージから選択したり、その他いろいろ設定をして作成をクリック。

イメージを作り直して再度アップロードする時の対処法(GUI ver)
- Lambda関数詳細画面からDockerイメージを選択し直して更新!

参考資料
- 使用したベースになるDockeイメージ
https://hub.docker.com/r/amazon/aws-lambda-ruby
- AWS Web Servicesブログ
https://aws.amazon.com/jp/blogs/news/new-for-aws-lambda-container-image-support/