lambrollでAWS Lambda関数をデプロイしたときのTips
前置き
AWS Lambda関数について、
ソースコードはgitで管理したい
ソースコードのデプロイは容易に行いたい
AWSの各リソースはTerraformで管理しており、別途Lambda向けのものを作る必要はない
という場合には、Lambdaのデプロイツールである lambroll
を使うのが便利です。
fujiwara/lambroll: lambroll is a minimal deployment tool for AWS Lambda.
lambrollはREADMEが充実していることもあり、悩むところは少なくてすみました。
それでも、組織のAWS環境で lambroll
を使う場合にはいくつか考慮することがあったため、この記事で紹介していきます。
スイッチロール + MFAなAWS環境にてlambrollを使うには
スイッチロール時にMFAを利用するAWS環境の場合、lambrollだけではデプロイすることができません。
そこで、別記事でも紹介している AWS Vault
と組み合わせることでデプロイできるようになります。
AWS Vaultを使ったスイッチロール設定手順 | Precena Tech Book
実際に見ていきます。
まず、 aws-vault exec
により、スイッチロール後の some-profile
のシェルに入ります。
続いて、lambrollで関数のデプロイを行います。
同一のソースコードを別環境へデプロイするには
例えば
staging
production
の2つの環境があり、各環境へ同一ソースコードの関数をデプロイしたくなったとします。
この場合、以下の方法で実現できます。
lambrollでLambdaを定義する時に使うJSON (
function.json
) を環境ごとに用意する例
staging環境向けは
function.staging.json
production環境向けは
function.production.json
各環境の環境変数は、JSONの
Environment
キーの下にそれぞれ定義する環境変数の値をJSONに含めたくない場合は、AWS SSMから取得するよう定義する
デプロイ時、
--function
で環境にあったJSONファイルを指定する
実際に見ていきます。
まずは function.staging.json
を用意します。
なお、スペースの都合上、例では FunctionName
と Environment
キーだけ記載しています。
続いて、AWS Consoleなどから、AWS SSMにキーを作成します。
今回は /bar/baz
というキーに値を設定します。
最後に、staging環境向けにデプロイします。
一方、production環境向けにデプロイする場合は以下となります。
lambrollでLambda Layer相当を使うには
lambrollではLambda Layerを作成することができません。
その代わり、lambrollではContainer Imageでのデプロイにて代替できます。 https://github.com/fujiwara/lambroll?tab=readme-ov-file#deploy-container-image
実際に見ていきます。
最初に、 aws-vault exec
にて some-profile
のシェルに入ります。
次に、AWS ECRへdocker loginします。なお、 <>
の部分は適宜読み替えてください。
続いて、デプロイするDockerfileを用意します。ここでは省略します。
その後、docker buildにて、タグ付きでDockerイメージをビルドします。
docker pushにて、AWS ECRへDockerイメージをpushします。
さらに、lambrollでAWS ECRにあるコンテナイメージを使うよう、 function.json
へ PackageType
と Code
キーへ設定を追加します。
例えば、以下では、AWS SSMにある「ECRにあるイメージのURL( /path/to/ecr_image_url
)」を指定しています。
最後に、上記のJSONを使ってAWS ECRにあるコンテナイメージをAWS Lambdaへデプロイします。
lambrollとAWS Vaultを使っていてエラーが出たときは
lambrollとAWS Vaultを使ってデプロイをしていると、以下のようなエラーメッセージが表示されるかもしれません。
これはAWS Vaultのセッションが切れたのが原因です。
解消するには、一度AWS Vaultのセッションを exit
で抜けた後、再度AWS Vaultのセッションに入ります。
最終更新