Parameter Storeで管理するパラメーターにTTLを設定する

AWS Systems Managerの一機能として提供されているParameter Storeに保存するパラメーターに有効期限を設定してみました。
2022.01.28

こんにちは。サービスグループの武田です。

AWS Systems Managerの一機能として提供されているParameter Storeを利用するとアプリケーションの設定データや機密情報などを安全に管理できます。設定データのように、一度設定しアプリケーションで半永続的に使用するものはそこまで数が増えることはないでしょう。一方で、処理結果をParameter Storeに一時的に保存するユースケースを考えると、増え続けるパラメーターが気になります。もちろん適切に削除すれば増え続けることもありませんが、可能であれば消し込み作業は自動でやってくれるととてもうれしいです。

そこで登場するのがParameter Storeの有効期限設定です。パラメーターポリシーを割り当てることによって、パラメーターに有効期限を設定し、期限を超過したパラメーターを自動で削除してくれます。これによって増え続けるパラメーターに悩まされることもありません。とてもうれしい。

ただし次のことに注意してください。

  • パラメーターポリシーはアドバンスドパラメーターのみ設定可能
  • スタンダードパラメーターは無料ですが、アドバンスドパラメーターは$0.05 per monthの保存料金がかかる
    • 1ヵ月未満のパラメーターは1時間ごとに按分される
  • アドバンスドパラメーターはAPIインタラクション1万回ごとに$0.05かかる

料金の詳細についてはAWSドキュメントを参照してください。

料金 - AWS Systems Manager | AWS

AWS CLIで設定してみる

それでは実際に有効期限(TTL)を設定したパラメーターを追加してみましょう。マネジメントコンソールやプログラミング言語(CDK)など方法は考えられますが、今回はAWS CLIで設定してみます。有効期限はポリシーとして与える必要があり、TypeExpirationを指定します。期限はTimestampとして指定し、この例では1月31日の0時(UTC)です。「1週間保存したい」などの要件であれば、日時を計算して設定すればよいでしょう。

$ aws ssm put-parameter \
    --name ttl-parameter \
    --value DevelopersIO \
    --type String \
    --tier Advanced \
    --overwrite \
    --policies '[{
        "Type": "Expiration",
        "Version": "1.0",
        "Attributes": {
            "Timestamp": "2022-01-31T00:00:00.000Z"
        }
    }]'

設定できたら取得も試してみます。

$ aws ssm get-parameter --name ttl-parameter
{
    "Parameter": {
        "Name": "ttl-parameter",
        "Type": "String",
        "Value": "DevelopersIO",
        "Version": 1,
        "LastModifiedDate": "2022-01-28T09:00:00.000000+09:00",
        "ARN": "arn:aws:ssm:ap-northeast-1:123456789012:parameter/ttl-parameter",
        "DataType": "text"
    }
}

ここにはポリシーの情報がありませんね。ポリシーを確認するにはdescribe-parametersを使用します。

$ aws ssm describe-parameters --parameter-filters 'Key=Name,Values=ttl-parameter'
{
    "Parameters": [
        {
            "Name": "ttl-parameter",
            "Type": "String",
            "LastModifiedDate": "2022-01-28T09:00:00.000000+09:00",
            "LastModifiedUser": "arn:aws:sts::123456789012:assumed-role/takeda/botocore-session-1643364876",
            "Version": 1,
            "Tier": "Advanced",
            "Policies": [
                {
                    "PolicyText": "{\"Type\":\"Expiration\",\"Version\":\"1.0\",\"Attributes\":{\"Timestamp\":\"2022-01-31T00:00:00Z\"}}",
                    "PolicyType": "Expiration",
                    "PolicyStatus": "Pending"
                }
            ],
            "DataType": "text"
        }
    ]
}

有効期限のポリシーが設定されていますね。ここでは自動的に削除される部分までは見届けませんが、きちんと削除されますので安心してください。

まとめ

S3やDynamoDBでもTTLを使用できますが、Parameter Storeでも利用できることはあまり認識していませんでした。時限付きの値を管理したい場合に選択肢のひとつとして検討してみてください。

参考URL