本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
添加和自定义 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"] }
此示例定义三个资源:hookrole
、hooktopic
和 lifecyclehook
。前两个资源分别是 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::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 资源类型主题中找到。