

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

# Elastic Beanstalk 環境リソースの追加とカスタマイズ
<a name="environment-resources"></a>

また、Elastic Beanstalk 環境の一部である環境リソースを、カスタマイズする必要性が生じることもあります。例えば、Amazon SQS キューおよびキューの深さに対するアラームを追加したり、Amazon ElastiCache クラスターを追加したりする場合です。ソースバンドルと共に設定ファイルを含めることにより、アプリケーションバージョンのデプロイと同時に環境を簡単にカスタマイズできます。

[設定ファイルの](ebextensions.md) `Resources`キーを使用して、環境内の AWS リソースを作成およびカスタマイズできます。設定ファイルで定義されたリソースは、環境の起動に使用される CloudFormation テンプレートに追加されます。すべての CloudFormation [リソースタイプがサポートされています](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html)。

**注記**  
Elastic Beanstalk によって管理されていないリソースを追加するときは、必ず適切なアクセス許可を持つユーザーポリシーを AWS Identity and Access Management (IAM) ユーザーに追加してください。Elastic Beanstalk が提供する[管理ユーザーポリシー](AWSHowTo.iam.managed-policies.md)は、Elastic Beanstalk で管理されるリソースに対するアクセス許可のみを対象としています。

たとえば、次の設定ファイルは Auto Scaling ライフサイクルフックを Elastic Beanstalk によって作成されたデフォルトの Auto Scaling グループに追加します。

**`~/my-app/.ebextensions/as-hook.config`**

```
Resources:
  hookrole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument: {
               "Version": "2012-10-17",		 	 	 
               "Statement": [ {
                  "Effect": "Allow",
                  "Principal": {
                     "Service": [ "autoscaling.amazonaws.com" ]
                  },
                  "Action": [ "sts:AssumeRole" ]
               } ]
            }
      Policies: [ {
               "PolicyName": "SNS",
               "PolicyDocument": {
                      "Version": "2012-10-17",		 	 	 
                      "Statement": [{
                          "Effect": "Allow",
                          "Resource": "*",
                          "Action": [
                              "sqs:SendMessage",
                              "sqs:GetQueueUrl",
                              "sns:Publish"
                          ]
                        }
                      ]
                  }
               } ]
  hooktopic:
    Type: AWS::SNS::Topic
    Properties:
      Subscription:
        - Endpoint: "{{my-email@example.com}}"
          Protocol: email
  lifecyclehook:
    Type: AWS::AutoScaling::LifecycleHook
    Properties:
      AutoScalingGroupName: { "Ref" : "AWSEBAutoScalingGroup" }
      LifecycleTransition: autoscaling:EC2_INSTANCE_TERMINATING
      NotificationTargetARN: { "Ref" : "hooktopic" }
      RoleARN: { "Fn::GetAtt" : [ "hookrole", "Arn"] }
```

この例では、3 つのリソース (`hookrole`、`hooktopic` および `lifecyclehook`) を定義しています。最初の 2 つのリソースはメッセージを Amazon SNS に発行する許可を Amazon EC2 Auto Scaling に付与する IAM ロールと、Auto Scaling グループから E メールアドレスにメッセージをリレーする SNS トピックです。Elastic Beanstalk は、指定したプロパティとタイプを持つこれらのリソースを作成します。

最後のリソース `lifecyclehook` はライフサイクルフック自体です。

```
  lifecyclehook:
    Type: AWS::AutoScaling::LifecycleHook
    Properties:
      AutoScalingGroupName: { "Ref" : "AWSEBAutoScalingGroup" }
      LifecycleTransition: autoscaling:EC2_INSTANCE_TERMINATING
      NotificationTargetARN: { "Ref" : "hooktopic" }
      RoleARN: { "Fn::GetAtt" : [ "hookrole", "Arn"] }
```

ライフサイクルフックの定義では、2 つの[関数](ebextensions-functions.md)を使用して、フックのプロパティに値を入力します。`{ "Ref" : "AWSEBAutoScalingGroup" }` は、環境の Elastic Beanstalk によって作成された Auto Scaling グループの名前を取得します。`AWSEBAutoScalingGroup` は Elastic Beanstalk によって提供される標準[リソース名](customize-containers-format-resources-eb.md)の 1 つです。

`[AWS::IAM::Role](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html#d0e48356)` では、`Ref` が返すのは ARN ではなくロールの名前のみです。`RoleARN` パラメータの ARN を取得するには、代わりに別の組み込み関数 `Fn::GetAtt` を使用することで、リソースから属性を取得できます。`RoleARN: { "Fn::GetAtt" : [ "hookrole", "Arn"] }` は `hookrole` リソースから `Arn` 属性を取得します。

`{ "Ref" : "hooktopic" }` は、設定ファイルで前に作成した Amazon SNS トピックの ARN を取得します。によって返される値はリソースタイプごとに`Ref`異なり、AWS::SNS::Topic リソースタイプの CloudFormation ユーザーガイドトピックにあります。 [ AWS::SNS::Topic ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-topic.html#d0e62250)