LoginSignup
10
6

More than 5 years have passed since last update.

Serverless Frameworkで、AWS Lambda function用に作られるCloudWatch Logsの期限を指定する

Last updated at Posted at 2017-04-28

某所でServerless Frameworkが採用されており、コンソールでCloudWatch Logsをみると、Never Expireのlogsが沢山できていた。
これは真綿で首を絞めるような課金になるので、serverless.yml上でlogRetentionInDaysを設定するやり方を調べた。

$ sls --version
1.11.0

標準リソースの上書き機能を使う

そのまんまのサンプルが案内されていました。

serverless/resources.md | serverless/serverless

You can override the specific CloudFormation resource to apply your own options. For example, if you want to set AWS::Logs::LogGroup retention time to 30 days, override it with above table's Name Template.

なるほど、標準でつくられるLogGroup(/aws/lambda/{service_name}-{stage}-{function_name})の定義を上書きできるんだ。

上書き用名前指定の書式は、{normalizedFunctionName} + LogGroupとなっている。

例えば次の例,function名をmainとしている場合、MainLogGroupRetentionInDaysを付与してあげればよい。

serverless.yml
---
service: myservice

# ...

functions:
  main:
    handler: lambda_function.lambda_handler

resources:
  Resources:
    MainLogGroup:
      Properties:
        RetentionInDays: "30"

--noDeploy(-n)(1.12.x以降はsls package)でCFnテンプレートだけ作ってみると、ちゃんとそのようになっていることが確認できる。

  "Resources": {
    "MainLogGroup": {
      "Type": "AWS::Logs::LogGroup",
      "Properties": {
        "LogGroupName": "/aws/lambda/myservice-development-main",
        "RetentionInDays": "30"
      }
    },

function名に-_が入っている場合、それぞれ予約文字列のDashUnderscoreを使えばよいとのこと。
名前自体がDashだったりするケースは調べていません。

環境(stage)によって期限を変更したい場合

例えばcustom属性を使って、stage名で引っ張ってくれば使い分けができますね。

serverless.yml
custom:
  logRetentionInDays:
    development: "14"  # stage[development]は14日
    production: "90"   # stage[production]は90日
    default: "3"       # stageが見つからなかったらこれにfallbackするために設定

resources:
  Resources:
    MainLogGroup:
      Properties:
        RetentionInDays: ${self:custom.logRetentionInDays.${opt:stage, self:provider.stage}, self:custom.logRetentionInDays.default}

デフォルトにfallbackするかどうかはお好みかな。

10
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
6