趣味の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/