新增和自訂 Elastic Beanstalk 環境資源 - AWS Elastic Beanstalk

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

新增和自訂 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 受管資源的許可的受管使用者政策

例如,下列的組態檔案在 Elastic Beanstalk 所建立的預設 Auto Scaling 群組中,加入了 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 角色 (此角色會授予許可給 Amazon EC2 Auto Scaling,以發佈訊息至 Amazon SNS) 和 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 所傳回的值,會隨資源類型而有不同,在 AWS CloudFormation 使用者指南的 AWS::SNS::Topic 資源類型主題中,提供了這些傳回值的相關說明