AWS Lambdaデプロイツール lambroll v1をリリースしました

AWS Lambda用のデプロイツール、lambroll の v1.0 を2024年2月10日にリリースしたのでお知らせです。

github.com

リリースして早速ですが v1.0.0 には一部のフラグ名がv0と異なるというバグがあるので、v1.0.1 以降をご利用ください。

v0.x と v1 の変更点

リポジトリ にまとめてありますが、簡単に解説します。

非互換変更

lambroll archive zipのバイナリを、標準出力ではなくファイルに書き出します

デフォルトのファイル名 function.zip(--dest オプションで指定可能) に書き出すようになりました。

--dest - を指定することで、v0と同様に標準出力に書き出すことができます。

lambroll diff コマンドは、常に短縮型の unified 形式で出力します

--unified オプションは廃止されました。

新機能

Lambda Function URLのデプロイをサポート

ドキュメントはこちらです

function_url.json (.jsonnetも可) というファイルを例として以下のように用意して、lambroll deploy --function-url function_url.json としてやると、function自体のdeployが終わったあとに Function URL をデプロイします。必要な Lambda permission も同時に付与します。

{
  "Config": {
    "AuthType": "NONE"
  }
}

これは認証なしの一番単純な形式ですが、IAM認証やCORSの指定にも対応しています。Config, Permissions はそれぞれ、AWS SDK Go v2 の CreateFunctionUrlConfigInputAddPermissionInput に対応しています。

{
  "Config": {
   "AuthType": "AWS_IAM",
   "Qualifier": "current",
   "Cors": {
      "AllowOrigins": [
        "*"
      ],
      "AllowMethods": [
        "GET",
        "POST"
      ]
    },
  },
  "Permissions": [
    {
      "Principal": "0123456789012"
    },
    {
      "PrincipalOrgID": "o-123456789",
      "Principal": "*"
    }
  ]
}

備考

  • deploy --function-url が指定された場合のみ、Function URL デプロイを行います
    • オプションを指定しない場合は既存の Function URL のリソースが存在していても変更を行いません
  • lambroll init で既存 function を指定して設定ファイル化する場合、--function-url フラグを指定すると function_url.json の生成も行います
  • lambroll diff についても --function-url オプションが指定された場合のみ、Function URL についての変更差分を表示します

SSM テンプレート関数追加

{{ ssm "/path/to/parameter" }} という記法で、SSMパラメーターストアの値をテンプレート展開できるようになりました。

lambroll status コマンド追加

現在のfunctionの情報を出力します。--output json オプションでJSON形式での出力もできます。

$ lambroll status
+-----------------+-----------------------------------------------------------+
| FunctionName    | hello                                                     |
| FunctionArn     | arn:aws:lambda:ap-northeast-1:314472643515:function:hello |
| Version         | $LATEST                                                   |
| Runtime         | provided.al2023                                           |
| PackageType     | Zip                                                       |
| State           | Active                                                    |
| LastUpdateState | Successful                                                |
| FunctionURL     | https://xxxxxxxxxxxxxxx.lambda-url.ap-northeast-1.on.aws/ |
+-----------------+-----------------------------------------------------------+

lambroll render コマンド追加

lambroll render を実行すると、設定ファイル (function.json, .jsonnet) をレンダリングして標準出力に出力します。

環境変数 LAMBROLL_XXX をオプションとして受け入れます

例えばこれまで lambroll deploy --tfstate=s3://example/terraform.tfstate としていた場合、 LAMBROLL_TFSTATE=s3://example/terraform.tfstate という環境変数を設定することで、コマンドラインオプションでの指定を省略できます。

diffdeployコマンドに --ignore オプションを追加

--ignore で指定された function.json 内の要素について、diffdeploy 時に比較と更新を無視するようになりました。

例えば lambroll deploy --ignore ".Timeout, .Environment" と指定すると、TimeoutEnvironment の値はデプロイ実行時に無視されます。特定の値は更新したくないような場合に便利です。

その他の変更

  • AWS SDK Go を v1 から v2 に更新しました
  • CLI flag parser を kingpin から kong に変更しました
  • リリースバイナリの生成を GoReleaser で行うようにしました
    • アーカイブのパッケージ構成が変わっています。独自のインストール用のscriptがある場合は修正が必要になる可能性があります
    • aqua をご利用の場合は aqua-registry v4.131.1 以降に更新をお願いします
    • CircleCI orb を利用している場合、fujiwara/lambroll@2.0.1 を使用してください
    • Github Actions では fujiwara/lambroll@v1 を使用してください

まとめ

Lambroll v1をリリースしました。目玉機能は Function URL のサポートです!

ドキュメントに書かれた以外の非互換変更は意図しないものの可能性が高いため、もし見つけたらissueなどで教えていただけると嬉しいです。