

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

# Chef 11.4 スタック用のレシピの実装
<a name="workingcookbook-chef11-4"></a>

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

**重要**  
カスタムクックブックまたはコミュニティクックブックに組み込みクックブックの名前を再使用しないでください。組込クックブックと同じ名前のカスタムクックブックは失敗する可能性があります。Chef 11.10、11.4、0.9 のスタックで使用可能な組み込みクックブックの完全なリストについては、「[GitHub の opsworks-cookbooks リポジトリ](https://github.com/aws/opsworks-cookbooks)」を参照してください。

Chef 11.4 スタックの大きな制限は、レシピで Chef の検索やデータバッグを使用できないことです。ただし、 OpsWorks Stacks は、検索で取得する多くの情報を含む[スタック設定属性とデプロイ属性](workingcookbook-json.md)を各インスタンスにインストールします。これには、以下が含まれます。
+ ホストまたはアプリケーション名など、コンソールからのユーザー定義のデータ。
+ スタックのレイヤー、アプリケーション、インスタンスなどの OpsWorks スタックサービスによって生成されたスタック設定データ、および IP アドレスなどの各インスタンスの詳細。
+ ユーザーによって提供されたデータを含み、データバッグとほぼ同じ目的で使用できる、カスタム JSON 属性。

OpsWorks スタックは、イベントの Chef 実行を開始する前に、ライフサイクルイベントごとに各インスタンスにスタック設定とデプロイ属性の最新バージョンをインストールします。データは、標準の `node[:attribute][:child_attribute][...]` 構文を通じてレシピに使用できます。たとえば、スタック設定およびデプロイ属性にはスタック名 `node[:opsworks][:stack][:name]` が含まれています。

組み込みのレシピの 1 つに含まれる次のコードは、スタック名を取得し、その名前を使用して設定ファイルを作成します。

```
template '/etc/ganglia/gmetad.conf' do
  source 'gmetad.conf.erb'
  mode '0644'
  variables :stack_name => node[:opsworks][:stack][:name]
  notifies :restart, "service[gmetad]"
end
```

スタック設定およびデプロイ属性の値の多くには、複数の属性が含まれています。必要な情報を取得するために、これらの属性を反復処理する必要があります。以下の例は、スタック設定およびデプロイ属性からの引用を示しています。便宜上、JSON オブジェクトとしてあらわされています。これには、最上位属性 `deploy` が含まれています。この最上位属性には、スタックの各アプリケーションの属性が含まれており、アプリケーションの短縮名が付いています。

```
{
  ...
  "deploy": {
    "app1_shortname": {
      "document_root": "app1_root",
      "deploy_to": "deploy_directory",
      "application_type": "php",
      ...
    },
    "app2_shortname": {
      "document_root": "app2_root",
      ...
    }
  },
  ...
}
```

各アプリケーション属性には、アプリケーションの特性を示す一連の属性が含まれています。例えば、`deploy_to` 属性は、アプリケーションのデプロイディレクトリを表します。次のコードは、アプリケーションの各デプロイディレクトリのユーザー、グループ、およびパスを設定します。

```
node[:deploy].each do |application, deploy|
  opsworks_deploy_dir do
    user deploy[:user]
    group deploy[:group]
    path deploy[:deploy_to]
  end
  ...
end
```

スタック設定およびデプロイ属性の詳細については、「[OpsWorks スタックのカスタマイズ](customizing.md)」を参照してください。デプロイディレクトリの詳細については、「[Deploy レシピ](create-custom-deploy.md)」を参照してください。

Chef 11.4 のスタックはデータバッグをサポートしていませんが、[カスタム JSON](workingstacks-json.md) を指定することによって、スタック設定およびデプロイ属性に任意のデータを追加できます。レシピは、標準的な Chef のノード構文を使用して、データにアクセスできます。詳細については、「[カスタム JSON の使用](workingcookbook-json-override.md)」を参照してください。

暗号化されたデータバッグの機能が必要な場合、選択肢の 1 つとして、プライベート Amazon S3 バケットなどの安全な場所に機密性の高い属性を保存する方法があります。レシピは、すべての OpsWorks スタックインスタンスにインストールされている [AWS Ruby SDK](https://aws.amazon.com/documentation/sdkforruby/) を使用して、バケットからデータをダウンロードすることができます。

**注記**  
各 OpsWorks スタックインスタンスにはインスタンスプロファイルがあります。関連付けられた [IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/WorkingWithRoles.html) によって、インスタンスで実行中のアプリケーションがどの AWS リソースにアクセスできるかが指定されます。レシピで Amazon S3 バケットにアクセスするためには、ロールのポリシーに次のようなステートメントを含めて、指定されたバケットからファイルを取得するアクセス許可を付与する必要があります。  

```
"Action": ["s3:GetObject"],
"Effect": "Allow",
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
```
インスタンスプロファイルの詳細については、「[EC2 インスタンスで実行するアプリケーションに対するアクセス許可の指定](opsworks-security-appsrole.md)」を参照してください。