Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS_Lambdaのデプロイ手順

 AWS_Lambdaのデプロイ手順

2022.06.30 LT会 古家さん発表資料

More Decks by PharmaX(旧YOJO Technologies)開発チーム

Other Decks in Technology

Transcript

  1. AWS Lambda
    のデプロイ⼿順 1
    AWS Lambda
    のデプロイ⼿順
    ⽤途
    Line
    のWebhook
    の受信をトリガーにALB
    の受け先としてLambda
    を利⽤
    責務はline
    からresponse
    加⼯してSQS
    に詰めるだけ
    SQS+Lamba
    の構成で⼤量のリクエストを捌ける
    短い実⾏タスクなら軽量なLambda
    でアプリケーションと責務を分けて可⽤性を⾼める
    15
    分以上かかるような⼤規模処理は向いていない。
    他サービスとの連携が⽤意
    ALB
    の特定のパスにアクセスあったらLambda
    を実⾏するみたいなことが⽤意
    Fargate
    でこれやるなら、前段でLambda
    を挟む必要ある。

    View Slide

  2. AWS Lambda
    のデプロイ⼿順 2
    https://d1.awsstatic.com/webinars/jp/pdf/services/202107_AWS_Black_Belt_Container350-Container_and_Serverless.pdf
    AWS
    でバッチ処理を実装する際の選択肢とサービス⽐較
    以前、 SaaS
    系スタートアップのリアルなAWS
    アーキテクチャ設計 という記事で弊社のAWS
    アーキテクチ
    ャを紹介した。記事執筆時から時が経ち、バッチ処理を本格化する必要が⽣じたためAWS
    でバッチ処理を
    設計・実装しようとしたが、組み合わせが多くて辟易した。 ⾃分たちのサービスにあった⽅法を⾒つけよ
    https://zenn.dev/faycute/articles/fb310e3ccd783f
    デプロイ⽅法
    AWS Lambda
    のデプロイはコンテナイメージと.zip
    ファイルアップロードの2
    種類があります。
    2020
    年の12
    ⽉にサポートされた。
    .zip
    ファイルアーカイブで Ruby Lambda
    関数をデプロイする
    AWS Lambda
    関数のコードは、スクリプトまたはコンパイルされたプログラム、さらにそれらの依存関係で構成されます。 デプロイパッケージ を使⽤して、
    Lambda
    に関数コードをデプロイします。Lambda
    は、コンテナイメージと .zip
    ファイルアーカイブの 2
    種類のデプロイパッケージをサポートしています。 .zip
    ファイルのデプロイパッケージを作成するには、コマンドラインツール⽤の組み込み .zip
    ファイルアーカイブユーティリティまたは他の .zip
    ファイルユーティリ
    https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/ruby-package.html
    Docker
    の⽅が他とスキルが統⼀できてよいので、コンテナイメージでのデプロイにしました。
    利⽤⾔語はメンバーが皆使えるであろうRuby
    を採択。
    Lambda
    がサポートしているのが2
    系なのでRuby2.7
    ⼩さなプログラムでRuby3
    の型をつける必要も無いので2
    系で
    ディレクトリ構成
    最低限、Line
    のWebhook
    を受け取ってログ出⼒するだけの構成になってます。
    app.rb
    Dockerfile
    Gemfile
    https://github.com/yojo-technologies/pharmacy-dx-line-handler
    #
    アーキテクチャはLambda
    側もARM64
    に統ー
    FROM public.ecr.aws/lambda/ruby:2.7

    View Slide

  3. AWS Lambda
    のデプロイ⼿順 3
    COPY app.rb ${LAMBDA_TASK_ROOT}
    COPY Gemfile ${LAMBDA_TASK_ROOT}
    ENV GEM_HOME=${LAMBDA_TASK_ROOT}
    RUN bundle install
    CMD [ "app.lambda_handler" ]
    ※ アーキテクチャをDocker
    イメージを合わせてます(arm64

    Mac
    でDocker
    イメージをダウンロードするとマルチアーキテクチャでarm64
    が選択される。
    最初、us-west1
    で作っていたらx86_64
    のアーキテクチャでLambda
    関数が動作するので、アーキテクチャが⼀致せずにエ
    ラーになった。
    そのためus-west-1
    以外のリージョンでアーキテクチャを指定して合わせた。
    現状M1
    以外の⼈がローカルでDocker
    デプロイするとエラーになるので後ほど、CI
    化する。
    デプロイ⼿順
    ローカルマシンで、git clone
    https://github.com/yojo-technologies/pharmacy-dx-line-handler
    ローカルのDockerfile
    からスクリプトを含めたコンテナイメージを作成
    docker build --no-cache -t pharmacy-chatbot-line-handler-dev .
    ローカルで起動する
    Lambda
    コンテナイメージをローカルでテストする
    https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/images-test.html
    AWS Lambda Runtime Interface Emulator (RIE)
    は、Lambda
    ランタイム API
    のプロキシでコンテナイメージとしてパッ
    ケージ化された Lambda
    関数をローカルでテストできる
    json
    のパースエラーが出てローカルでエミュレーターは動かせなかった。現状はローカルテストはせずにそのままデプロイし
    て動作確認してる。
    curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'
    イメージを Amazon ECR
    コンテナレジストリにアップロード
    AWS CLI
    をインストール
    https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html
    AWS
    の認証情報を設定
    aws configure
    にアクセスID
    とアクセスキーを設定
    https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-quickstart.html
    Amazon ECR
    レジストリに対して Docker
    を認証
    aws ecr get-login-password
    このコマンドは、AmazonECR
    レジストリへの認証に使⽤できるGetAuthorizationTokenAPI
    を使⽤して認証トー
    クンを取得して表⽰します。
    Docker CLI
    など、好みのコンテナクライアントのログインコマンドに認証トークンを渡すことができます
    このコマンドでAmazonECR
    レジストリに認証された後、トークンの有効期限が切れるまでIAM
    プリンシパルがア
    クセスできる限り、
    クライアントを使⽤してそのレジストリからイメージをプッシュおよびプルできます。認証トークンは12
    時間有
    効です。

    View Slide

  4. AWS Lambda
    のデプロイ⼿順 4
    docker login
    Docker Hub
    やGCR
    (Container Registry
    ), ECR
    (Elastic Container Registry
    )などのコンテナレジストリにログ
    インするコマンドです。
    ログインすることで、コンテナのpush
    やprivate
    レポジトリからのpull
    ができるようになります。
    ECR
    に以下コマンドでログイン
    これでECR
    レジストリへ認証してプッシュできるようになる
    aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin 420547679007.dkr.ecr.ap-northeas
    ECR
    のリポジトリを作成
    暗号化設定を有効化

    View Slide

  5. AWS Lambda
    のデプロイ⼿順 5
    プッシュコマンドの表⽰で表⽰されるコマンドに従ってイメージをアップロードする
    コンテナイメージを元に関数をデプロイ
    arm64
    に指定
    質疑応答

    View Slide