AWS Elastic Beanstalk
開発者ガイド

Elastic Beanstalk 環境リソースの追加とカスタマイズ

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

設定ファイルResources キーを使用すると、使用中の環境で AWS のリソースを作成およびカスタマイズできます。設定ファイルで定義されたリソースは、環境を起動するために使用される AWS CloudFormation テンプレートに追加されます。すべての AWS CloudFormation リソースタイプがサポートされます。

たとえば、次の設定ファイルは 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 つのリソース (hookrolehooktopic および 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"] }hookrole リソースから Arn 属性を取得します。

{ "Ref" : "hooktopic" } は、設定ファイルで前に作成した Amazon SNS トピックの ARN を取得します。Ref から返される値は、リソースタイプによって異なります。これらの値は、AWS CloudFormation ユーザーガイドの「AWS::SNS::Topic リソースタイプのトピック」にあります。