添加和自定义 Elastic Beanstalk 环境资源 - Amazon Elastic Beanstalk
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

添加和自定义 Elastic Beanstalk 环境资源

您可能希望自定义属于 Elastic Beanstalk 环境一部分的环境资源。例如,您可能会希望添加 Amazon SQS 队列和有关队列深度的警报,或者添加 Amazon ElastiCache 集群。在部署应用程序版本的同时,您就可以轻松地自定义环境,只需使用源包将配置文件添加进来即可。

您可以使用配置文件中的 Resources 键在环境中创建和自定义 Amazon 资源。在配置文件中定义的资源会添加到用于启动环境的 Amazon CloudFormation 模板中。所有 Amazon CloudFormation 资源类型均受支持。

注意

无论何时添加不由 Elastic Beanstalk 管理的资源,请务必向 Amazon 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"] }

此示例定义三个资源:hookrolehooktopiclifecyclehook。前两个资源分别是 IAM 角色和 SNS 主题,前者授予 Amazon EC2 Auto Scaling 向 Amazon SNS 发布消息的权限,后者将来自 Auto Scaling 组的消息中继到电子邮件地址。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"] }

生命周期钩子使用两个函数填充钩子属性值。{ "Ref" : "AWSEBAutoScalingGroup" } 检索 Elastic Beanstalk 为环境创建的 Auto Scaling 组的名称。AWSEBAutoScalingGroup 是 Elastic Beanstalk 提供的标准资源名称之一。

对于 AWS::IAM::RoleRef 只返回角色名称,而不返回 ARN。要获取 RoleARN 参数的 ARN,需要改用另一个内部函数 Fn::GetAtt,该函数获取一个资源的所有属性。RoleARN: { "Fn::GetAtt" : [ "hookrole", "Arn"] } 将从 Arn 资源获取 hookrole 属性。

{ "Ref" : "hooktopic" } 获取之前在配置文件中创建的 Amazon SNS 主题的 ARN。Ref 返回的值因资源类型而异,可以在 Amazon CloudFormation 用户指南的 AWS::SNS::Topic 资源类型主题中找到。