AWS Elastic Beanstalk
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

添加自定义 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.cn" ] }, "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"] }hookrole 资源获取 Arn 属性。

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