何かやってみるブログ

興味をもったこと、趣味のこと、技術について色々書きます。

[Ruby メモ] Dockerコンテナからlambda関数を作成する時の手順とか(GUI ver)

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

f:id:s-takaya1027:20210107214440p:plain

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

f:id:s-takaya1027:20210107214555p:plain

イメージを作り直して再度アップロードする時の対処法(GUI ver)

  • Lambda関数詳細画面からDockerイメージを選択し直して更新!

f:id:s-takaya1027:20210107214612p:plain

参考資料

  • 使用したベースになる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/