LoginSignup
2
1

More than 1 year has passed since last update.

LaravelのCache用のDynamoDBテーブルを構築するCloudFormation

Last updated at Posted at 2022-11-18
AWSTemplateFormatVersion: '2010-09-09'
Description: "Create DynamoDB Table for Laravel Cache"

Parameters:
  DynamoDbTableName:
    Description: DynamoDB Table Name
    Type: String
    Default: cache
    
Resources:
  LaravelCacheTable:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: !Sub "${DynamoDbTableName}"
      AttributeDefinitions:
        - AttributeName: key
          AttributeType: S
      KeySchema:
        - AttributeName: key
          KeyType: HASH
      TimeToLiveSpecification:
        AttributeName: expires_at
        Enabled: true
      BillingMode: PAY_PER_REQUEST
  • DynamoDBのテーブル名は cache で作るか、他のテーブル名にするならLaravelのenvファイルの DYNAMODB_CACHE_TABLEの値も書き換える。
  • DynamoDBテーブルのメインのキーの名前を key に設定し、SortKeyは未設定。
  • TTL用に expires_at を設定。ただし、DynamoDBでは特性上その時間になってもすぐに消えてくれずに48時間くらい残る事もあるが、
    https://github.com/laravel/framework/blob/9.x/src/Illuminate/Cache/DynamoDbStore.php の isExpiredメソッドにて、LaravelのCache経由ならexpires_atが期限切れの場合、ちゃんと期限切れ扱いとなるように対応されている。

artisan tinkerで検証

php artisan tinker
>>> Cache::store('dynamodb')->put("test", "hogehoge", 60);
// Laravelのconfig/cache.phpのprefixがデフォルト内容であれば、
// DynamoDBのテーブルには laravel_cache_:test のキーで60秒間保持される。

IAMロールをEC2にアタッチした場合

DynamoDBを操作可能なIAMポリシーを持つIAMロールをEC2にアタッチした場合、DynamoDBを使うconfig設定として、Laravelのconfig/cache.phpのdynamodbの箇所の、key, secret, endpointをコメントアウトするとLaravelからDynamoDBが利用出来る。

'dynamodb' => [
    'driver' => 'dynamodb',
    // 'key' => env('AWS_ACCESS_KEY_ID'),
    // 'secret' => env('AWS_SECRET_ACCESS_KEY'),
    'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
    'table' => env('DYNAMODB_CACHE_TABLE', 'cache'),
    // 'endpoint' => env('DYNAMODB_ENDPOINT'),
],
2
1
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
2
1