Elastic Beanstalk 環境リソースの追加とカスタマイズ
また、Elastic Beanstalk 環境の一部である環境リソースを、カスタマイズする必要性が生じることもあります。例えば、Amazon SQS キューおよびキューの深さに対するアラームを追加したり、Amazon ElastiCache クラスターを追加したりする場合です。ソースバンドルと共に設定ファイルを含めることにより、アプリケーションバージョンのデプロイと同時に環境を簡単にカスタマイズできます。
設定ファイルの Resources
キーを使用すると、使用中の環境で AWS のリソースを作成およびカスタマイズできます。設定ファイルで定義されたリソースは、環境を起動するために使用される AWS CloudFormation テンプレートに追加されます。すべての AWS CloudFormation リソースタイプがサポートされます。
注記
Elastic Beanstalk によって管理されていないリソースを追加する場合は、AWS Identity and Access Management (IAM) ユーザーに対し、必ず適切なアクセス許可を持つユーザーポリシーを追加してください。Elastic Beanstalk が提供する管理ユーザーポリシーは、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 つの関数を使用して、フックのプロパティに値を入力します。{
"Ref" : "AWSEBAutoScalingGroup" }
は、環境の Elastic Beanstalk によって作成された Auto Scaling グループの名前を取得します。AWSEBAutoScalingGroup
は Elastic Beanstalk によって提供される標準リソース名の 1 つです。
AWS::IAM::Role
では、Ref
が返すのは ARN ではなくロールの名前のみです。RoleARN
パラメータの ARN を取得するには、代わりに別の組み込み関数 Fn::GetAtt
を使用することで、リソースから属性を取得できます。RoleARN: { "Fn::GetAtt" : [ "hookrole", "Arn"] }
は Arn
リソースから hookrole
属性を取得します。
{ "Ref" : "hooktopic" }
は、設定ファイルで前に作成した Amazon SNS トピックの ARN を取得します。Ref
から返される値は、リソースタイプによって異なります。これらの値は、AWS CloudFormation ユーザーガイドの「AWS::SNS::Topic リソースタイプのトピック」にあります。