

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# インメモリ key-value ストアとしての ElastiCacheRedis の使用
<a name="other-services-redis"></a>

**重要**  
この AWS OpsWorks Stacks サービスは 2024 年 5 月 26 日にサポート終了となり、新規および既存のお客様の両方で無効になっています。できるだけ早くワークロードを他のソリューションに移行することを強くお勧めします。移行についてご質問がある場合は、[AWS re:Post](https://repost.aws/) または[AWS プレミアムサポート](https://aws.amazon.com/support)を通じて AWS サポート チームにお問い合わせください。

**注記**  
このトピックは、Linux スタックに基づいていますが、Windows スタックでも Amazon ElastiCache (ElastiCache) を使用できます。Windows インスタンスで ElastiCache を使用する方法の例については、[「ElastiCache as an ASP.NET Session Store」](https://aws.amazon.com/blogs/developer/elasticache-as-an-asp-net-session-store/)(ASP.NET セッションストアとしての ElastiCache) を参照してください。

多くの場合、キャッシュサーバーを使用して文字列などの小さなデータ項目に対してインメモリ key-value ストアを提供することで、アプリケーションサーバーのパフォーマンスを向上させることができます。Amazon ElastiCache は、[Memcached](http://memcached.org/) または [Redis](https://redis.io) キャッシュエンジンを使用して、アプリケーションサーバーのキャッシュサポートを簡単に提供できる AWS のサービスです。 OpsWorks スタックは[、Memcached](workinglayers-mem.md) の組み込みサポートを提供します。ただし、Redis が要件に適している場合は、アプリケーションサーバーで ElastiCache Redis を使用するようにスタックをカスタマイズできます。

このトピックでは、Rails アプリケーションサーバーの使用を例に、Linux スタックに ElastiCache Redis キャッシュサポートを追加する基本的な手順について説明します。ここでは、適切な Ruby on Rails アプリケーションがすでにあることを前提としています。ElastiCache の詳細については、[「What Is Amazon ElastiCache?」](https://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/WhatIs.html) (Amazon ElastiCache とは) を参照してください。

**Topics**
+ [ステップ 1： ElastiCache の Redis クラスターを作成します](other-services-redis-cluster.md)
+ [ステップ 2: Rails スタックをセットアップする](other-services-redis-stack.md)
+ [ステップ 3: カスタムクックブックを作成してデプロイする](other-services-redis-cookbook.md)
+ [ステップ 4: レシピをライフサイクルイベントに割り当てる](other-services-redis-event.md)
+ [ステップ 5: スタック設定 JSON にアクセス情報を追加する](other-services-redis-json.md)
+ [ステップ 6: アプリをデプロイして実行する](other-services-redis-app.md)

# ステップ 1： ElastiCache の Redis クラスターを作成します
<a name="other-services-redis-cluster"></a>

**重要**  
この AWS OpsWorks Stacks サービスは 2024 年 5 月 26 日にサポート終了となり、新規および既存のお客様の両方で無効になっています。できるだけ早くワークロードを他のソリューションに移行することを強くお勧めします。移行についてご質問がある場合は、[AWS re:Post](https://repost.aws/) または[AWS プレミアムサポート](https://aws.amazon.com/support)を通じて AWS サポート チームにお問い合わせください。

ElastiCache コンソール、API または CLI を使用して、あらかじめ Amazon ElastiCache Redis クラスターを作成する必要があります。コンソールを使用してクラスターを作成する方法を以下に示します。

**ElastiCache の Redis クラスターを作成します。**

1. [[ElastiCache console]](https://console.aws.amazon.com/elasticache/) (ElastiCache コンソール) に移動し、**[Launch Cache Cluster]** (キャッシュクラスターを起動) をクリックして Cache Cluster ウィザードを起動します。

1. [Cache Cluster Details] ページで次の操作を実行します。
   + [**Name**] でキャッシュサーバー名を指定します。

     この例では、OpsWorks-Redis を使用します。
   + [**Engine**] を [**redis**] に設定します。
   + [**Topic for SNS Notification**] を [**Disable Notifications**] に設定します。
   + その他の設定にはデフォルト値をそのまま使用し、[**Continue**] をクリックします。  
![\[Cache クラスター Wizard interface for configuring Redis クラスター details and settings.\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/elasticache-wizard-1.png)

1. [**Additional Configuration**] ページでデフォルト値をそのまま使用し、[**Continue**] をクリックします。  
![\[Cache クラスター Wizard configuration page with security group, parameter group, and maintenance window options.\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/elasticache-wizard-2.png)

1. [**Launch Cache Cluster**] をクリックしてクラスターを作成します。
**重要**  
この例ではデフォルトのキャッシュセキュリティグループで十分ですが、本稼働環境で使用する場合は、環境に適したグループを作成する必要があります。詳細については、「[キャッシュセキュリティグループの管理](https://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/ManagingSecurityGroups.html)」を参照してください。

1. クラスターが起動したら、名前をクリックして詳細ページを開き、[**Nodes**] タブをクリックします。後で使用できるように、クラスターの [**Port**] と [**Endpoint**] の値を書き留めておきます。  
![\[Cache クラスター details showing node status, creation date, port, and endpoint for a Redis instance.\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/elasticache-wizard-3.png)

# ステップ 2: Rails スタックをセットアップする
<a name="other-services-redis-stack"></a>

**重要**  
この AWS OpsWorks Stacks サービスは 2024 年 5 月 26 日にサポート終了となり、新規および既存のお客様の両方で無効になっています。できるだけ早くワークロードを他のソリューションに移行することを強くお勧めします。移行についてご質問がある場合は、[AWS re:Post](https://repost.aws/) または[AWS プレミアムサポート](https://aws.amazon.com/support)を通じて AWS サポート チームにお問い合わせください。

Rails アプリケーションサーバーレイヤーをサポートするスタックの作成に加え、Rails サーバーが Redis サーバーと正常に通信できるように、レイヤーのセキュリティグループも設定する必要があります。

**スタックをセットアップするには**

1. 新しいスタック **RedisStack** (を参照)を作成するには、Rails アプリケーションサーバーレイヤーを追加します。両方にデフォルト設定を使用します。詳細については、「[新しいスタックを作成する](workingstacks-creating.md)」および「[OpsWorks レイヤーの作成](workinglayers-basics-create.md)」を参照してください。

1. **[Layers]** (レイヤー) ページで、Rails App Server に対して、**[Security]** (セキュリティー) をクリックし、続いて　**[Edit]** (編集) をクリックします。

1. **[Security Groups]** (セキュリティグループ) セクションに移動し、ElastiCache クラスターのセキュリティグループを **[Additional groups]** (グループの追加) に追加します。この例では、**[default]** セキュリティグループを選択し、**[\$1]** をクリックしてレイヤーに追加します。次に、**[Save]** をクリックして新しい設定を保存します。  
![\[Security Groups section showing default and additional groups with a dropdown menu of AWS OpsWorks options.\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/redis-security.png)

1. Rails アプリケーションサーバーレイヤーにインスタンスを追加し、起動します。インスタンスを追加して起動する方法の詳細については、「[レイヤーへのインスタンスの追加](workinginstances-add.md)」を参照してください。

# ステップ 3: カスタムクックブックを作成してデプロイする
<a name="other-services-redis-cookbook"></a>

**重要**  
この AWS OpsWorks Stacks サービスは 2024 年 5 月 26 日にサポート終了となり、新規および既存のお客様の両方で無効になっています。できるだけ早くワークロードを他のソリューションに移行することを強くお勧めします。移行についてご質問がある場合は、[AWS re:Post](https://repost.aws/) または[AWS プレミアムサポート](https://aws.amazon.com/support)を通じて AWS サポート チームにお問い合わせください。

現時点では、スタックはまだ完全には機能していません。アプリケーションが Redis サーバーにアクセスできるようにする必要があります。最も柔軟性のある方法は、アクセス情報が含まれた YAML ファイルをアプリケーションの `config` サブフォルダに配置することです。そうすれば、アプリケーションはこのファイルから情報を取得できるようになります。この方法を使用すると、アプリケーションを書き直して再デプロイすることなく接続情報を変更できます。この例では、ファイルに `redis.yml` という名前を付ける必要があり、次のように ElastiCache クラスターのホスト名とポートを含めます。

```
host: cache-cluster-hostname
port: cache-cluster-port
```

このファイルをサーバーに手動でコピーすることはできますが、Chef *レシピ*を実装してファイルを生成し、すべてのサーバーで OpsWorks スタックでレシピを実行することをお勧めします。Chef レシピは、 OpsWorks スタックがパッケージのインストールや設定ファイルの作成などのタスクをインスタンスで実行するために使用する特殊な Ruby アプリケーションです。レシピは*クックブック*にパッケージ化されます。クックブックには、複数のレシピと関連ファイル (設定ファイルのテンプレートなど) を含めることができます。クックブックは GitHub などのリポジトリに配置されます。クックブックには標準のディレクトリ構造が必要です。カスタムクックブックリポジトリがまだない場合、これをセットアップする方法の詳細については、「[クックブックリポジトリ](workingcookbook-installingcustom-repo.md)」を参照してください。

この例では、`redis-config` という名前のクックブックを、次の内容でクックブックリポジトリに追加します。

```
my_cookbook_repository
  redis-config
    recipes
      generate.rb
    templates
      default
        redis.yml.erb
```

`recipes` フォルダには、次のように `generate.rb` からアプリケーションの設定ファイルを生成する、`redis.yml.erb` というレシピが保存されています。

```
node[:deploy].each do |app_name, deploy_config|
  # determine root folder of new app deployment
  app_root = "#{deploy_config[:deploy_to]}/current"

  # use template 'redis.yml.erb' to generate 'config/redis.yml'
  template "#{app_root}/config/redis.yml" do
    source "redis.yml.erb"
    cookbook "redis-config"

    # set mode, group and owner of generated file
    mode "0660"
    group deploy_config[:group]
    owner deploy_config[:user]

    # define variable “@redis” to be used in the ERB template
    variables(
      :redis => deploy_config[:redis] || {}
    )

    # only generate a file if there is Redis configuration
    not_if do
      deploy_config[:redis].blank?
    end
  end
end
```

レシピは OpsWorks 、各インスタンスにインストールされ、[スタックとデプロイされたアプリケーションに関する詳細情報を含む スタックスタック設定およびデプロイ JSON](workingcookbook-json.md) オブジェクトのデータによって異なります。このオブジェクトの `deploy` ノードの構造は次のとおりです。

```
{
   ...
  "deploy": {
    "app1": {
      "application" : "short_name",
      ...
    }
    "app2": {
      ...
    }
    ...
  }
}
```

deploy ノードには、デプロイする各アプリケーションに対応し、そのアプリケーションの短縮名が付けられた一連の埋め込み JSON オブジェクトが含まれます。各アプリケーションオブジェクトには、アプリケーションの設定 (ドキュメントのルートやアプリケーションタイプなど) を定義する一連の属性が含まれます。deploy 属性のリストについては、「[deploy 属性](attributes-json-deploy.md)」を参照してください。レシピでは、Chef の属性構文を使用して、スタック設定およびデプロイメント JSON の値を表すことができます。例えば、`[:deploy][:app1][:application]` は、app1 アプリケーションの短縮名を表します。

`[:deploy]` の各アプリケーションでは、レシピによって関連するコードブロックが実行されます。コードブロックでは、`deploy_config` がアプリケーション属性を表します。レシピでは、まず `app_root` をアプリケーションのルートディレクトリ `[:deploy][:app_name][:deploy_to]/current` に設定します。次に、Chef の[テンプレートリソース](https://docs.chef.io/chef/resources.html#template)を使用して `redis.yml.erb` から設定ファイルを生成し、`app_root/config` に配置します。

 通常、設定ファイルは、Chef *属性*によって定義された設定が多数含まれたテンプレートから作成されます。属性を使用すると、テンプレートファイルを書き換えるのではなく、後述するカスタム JSON を使用して設定を変更できます。`redis.yml.erb` テンプレートには、次の行が含まれます。

```
host: <%= @redis[:host] %>
port: <%= @redis[:port] || 6379 %>
```

<%... %> 要素は、属性値を表すプレースホルダーです。
+ `<%= @redis[:host] %>` は、キャッシュクラスターのホスト名である `redis[:host]` の値を表します。
+ `<%= @redis[:port] || 6379 %>` は、`redis[:port]` の値を表します。この属性が定義されていない場合は、デフォルトのポート値である 6379 が使用されます。

`template` リソースは、次のように機能します。
+ `source` と `cookbook` は、それぞれテンプレート名とクックブック名を指定します。
+ `mode`、`group`、および `owner` は、設定ファイルにアプリケーションと同じアクセス権を与えます。
+ `variables` セクションでは、テンプレートで使用する `@redis` 変数をアプリケーションの `[:redis]` 属性値に設定します。

  `[:redis]` 属性の値は、後述するカスタム JSON を使用して設定されます。これは、アプリケーションの標準属性ではありません。
+ `not_if` ディレクティブは、設定ファイルがすでに存在する場合にレシピで設定ファイルを生成しないことを示します。

クックブックを作成したら、各インスタンスのクックブックキャッシュにデプロイする必要があります。このオペレーションではレシピは実行されません。スタックのインスタンスに新しいクックブックをインストールするだけです。後述するように、通常はレイヤーのライフサイクルイベントにレシピを割り当てることによってレシピを実行します。

**カスタムクックブックをデプロイするには**

1.  OpsWorks スタック**スタック**ページで、**スタック設定**をクリックし、**編集**します。

1. **[Configuration Management]** (構成の管理) セクションで、**[Use custom Chef cookbooks]** (カスタム　Chef のクックブックを使用) を **[Yes]** (はい) に設定し、クックブックリポジトリの情報を入力します。次に、**[Save]** (保存) をクリックしてスタック設定を更新します。  
![\[Configuration form for custom Chef cookbooks with repository details and options.\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/redis_walkthrough_cookbook.png)

1. **[Stack]** (スタック) ページで **[Run Command]** (コマンドの実行) をクリックし、**[Update Custom Cookbooks]** (カスタムクックブックの更新) スタックコマンドを選択します。次に、**[Update Custom Cookbooks]** (カスタムクックブックの更新) をクリックして、インスタンスのクックブックキャッシュに新しいクックブックをインストールします。  
![\[Run Command interface showing Update Custom Cookbooks option and instance selection for Rails App Server.\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/redis_walkthrough_command.png)

クックブックを変更した場合は、[**Update Custom Cookbooks**] をもう一度実行して、最新バージョンをインストールします。この手順の詳細については、「[カスタムクックブックのインストール](workingcookbook-installingcustom-enable.md)」を参照してください。

# ステップ 4: レシピをライフサイクルイベントに割り当てる
<a name="other-services-redis-event"></a>

**重要**  
この AWS OpsWorks Stacks サービスは 2024 年 5 月 26 日にサポート終了となり、新規および既存のお客様の両方で無効になっています。できるだけ早くワークロードを他のソリューションに移行することを強くお勧めします。移行についてご質問がある場合は、[AWS re:Post](https://repost.aws/) または[AWS プレミアムサポート](https://aws.amazon.com/support)を通じて AWS サポート チームにお問い合わせください。

カスタムレシピは[手動で](workingcookbook-manual.md)実行できますが、通常は OpsWorks スタックで自動的に実行することをお勧めします。すべてのレイヤーには、5 つの [[lifecycle events]](workingcookbook-events.md) (ライフサイクルイベント) (セットアップ、設定、デプロイ、アンデプロイおよびシャットダウン) のそれぞれに割り当てられたレシピが組み込まれています。インスタンスに対してイベントが発生するたびに、 OpsWorks スタックによってインスタンスの各レイヤーの関連付けられたレシピが実行され、対応するタスクが処理されます。たとえば、インスタンスの起動が完了すると、 OpsWorks スタックは Setup イベントをトリガーします。このイベントでは、関連付けられたレイヤーの Setup レシピが実行され、通常はパッケージのインストールと設定などのタスクが処理されます。

適切なライフサイクルイベントにレシピを割り当てることで、 OpsWorks スタックにレイヤーのインスタンスでカスタムレシピを実行させることができます。この例では、Rails App Server Layer の Deploy イベントに`generate.rb`レシピを割り当てる必要があります。その後、起動時、Setup レシピが完了した後、およびアプリケーションをデプロイするたびに、 OpsWorks スタックは Layer のインスタンスでレシピを実行します。詳細については、「[レシピを自動的に実行する](workingcookbook-assigningcustom.md)」を参照してください。

**Rails アプリケーションサーバーレイヤーのデプロイイベントにレシピを割り当てるには**

1.  OpsWorks スタック**レイヤー**ページの Rails App Server で、**レシピ**をクリックし、**編集**をクリックします。

1. **[Custom Chef Recipes]** で、完全修飾レシピ名を Deploy イベントに追加し、**[\$1]** をクリックします。完全修飾レシピ名では、`cookbookname::recipename ` の形式を使用します。`recipename` には `.rb` 拡張子は含まれません。この例では、完全修飾名は `redis-config::generate` です。次に、[**Save**] をクリックしてレイヤー設定を更新します。  
![\[Custom Chef Recipes interface showing setup, configure, deploy, undeploy, and shutdown options.\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/redis_walkthrough_event.png)

# ステップ 5: スタック設定 JSON にアクセス情報を追加する
<a name="other-services-redis-json"></a>

**重要**  
この AWS OpsWorks Stacks サービスは 2024 年 5 月 26 日にサポート終了となり、新規および既存のお客様の両方で無効になっています。できるだけ早くワークロードを他のソリューションに移行することを強くお勧めします。移行についてご質問がある場合は、[AWS re:Post](https://repost.aws/) または[AWS プレミアムサポート](https://aws.amazon.com/support)を通じて AWS サポート チームにお問い合わせください。

`generate.rb` レシピは、Redis サーバーのホスト名とポートを表すスタック設定およびデプロイメント JSON の属性ペアによって異なります。これらの属性は標準`[:deploy]`名前空間の一部ですが、 OpsWorks スタックでは自動的に定義されません。代わりに、カスタム JSON オブジェクトをスタックに追加して属性とその値を定義します。次の例は、この例のカスタム JSON を示しています。

**スタック設定およびデプロイメント JSON にアクセス情報を追加するには**

1.  OpsWorks スタック**スタック**ページで、**スタック設定**をクリックし、**編集**します。

1. [**Configuration Management**] セクションで、[**Custom Chef JSON**] ボックスにアクセス情報を追加します。以下の変更を加えると、次の例のようになります。
   + `elasticache_redis_example` をアプリケーションの短縮名で置き換えます。
   + `host` と `port` の値を、「[ステップ 1： ElastiCache の Redis クラスターを作成します](other-services-redis-cluster.md)」で作成した ElastiCacheRedis サーバーインスタンスの値で置き換えます。

   ```
   {
     "deploy": {
        "elasticache_redis_example": {
          "redis": {
            "host": "mycluster.XXXXXXXXX.amazonaws.com",
            "port": "6379"
          }
        }
     }
   }
   ```  
![\[Custom Chef JSON input field for configuring ElastiCache Redis instance details.\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/redis_walkthrough_json.png)

このアプローチの利点は、カスタムクックブックに触れずにポートまたはホスト値をいつでも変更できることです。 OpsWorks スタックはカスタム JSON を組み込み JSON にマージし、後続のすべてのライフサイクルイベントのスタックのインスタンスにインストールします。これにより、アプリケーションは、「[ステップ 3: カスタムクックブックを作成してデプロイする](other-services-redis-cookbook.md)」で説明した Chef ノード構文を使用して属性値にアクセスできるようになります。次回アプリケーションをデプロイするときには、 OpsWorks スタックによって、新しい定義が含まれたスタック設定およびデプロイメント JSON がインストールされ、`generate.rb` によって、ホストとポートの値が更新された設定ファイルが作成されます。

**注記**  
`[:deploy]` にはデプロイするすべてのアプリケーションの属性が自動的に含まれるので、スタック設定 JSON には `[:deploy][elasticache_redis_example]` がすでに含まれています。ただし、 `[:deploy][elasticache_redis_example]` には `[:redis]` 属性が含まれず、カスタム JSON で定義して OpsWorks 、 スタックにそれらの属性を に追加するように指示します`[:deploy][elasticache_redis_example]`。カスタム JSON を使用して既存の属性を上書きすることもできます。詳細については、「[属性の上書き](workingcookbook-attributes.md)」を参照してください。

# ステップ 6: アプリをデプロイして実行する
<a name="other-services-redis-app"></a>

**重要**  
この AWS OpsWorks Stacks サービスは 2024 年 5 月 26 日にサポート終了となり、新規および既存のお客様の両方で無効になっています。できるだけ早くワークロードを他のソリューションに移行することを強くお勧めします。移行についてご質問がある場合は、[AWS re:Post](https://repost.aws/) または[AWS プレミアムサポート](https://aws.amazon.com/support)を通じて AWS サポート チームにお問い合わせください。

この例では、Redis を使用する Ruby on Rails アプリケーションがあることを前提としています。設定ファイルにアクセスするには、次のように、`redis` で `config/initializers/redis.rb` gem を Gem ファイルに追加し、Rails 初期化子を作成します。

```
REDIS_CONFIG = YAML::load_file(Rails.root.join('config', 'redis.yml'))
$redis = Redis.new(:host => REDIS_CONFIG['host'], :port => REDIS_CONFIG['port'])
```

次に、アプリケーションを示すための [[create an app](workingapps-creating.md)] (アプリケーションを作成) し、Rails アプリケーションサーバーレイヤーのインスタンスに [[deploy it](workingapps-deploying.md)] (それをデプロイ) します。これにより、アプリケーションコードが更新され、`generate.rb` が実行されて設定ファイルが生成されます。アプリケーションを実行すると、ElastiCacheRedis インスタンスがインメモリ key-value ストアとして使用されます。