AWSPremiumSupport-PostgreSQLWorkloadReview - AWS Systems Manager 自動化手冊參考

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

AWSPremiumSupport-PostgreSQLWorkloadReview

Description

該手AWSPremiumSupport-PostgreSQLWorkloadReview冊捕獲您的 Amazon 關係數據庫服務(亞馬遜RDS)Postgre 數據SQL庫使用情況統計的多個快照。 AWS Support 主動式服務專家需要擷取的統計資料,才能執行作業複查。使用一組自訂SQL和殼層指令碼收集統計資料。這些指令碼會下載到暫時的 Amazon 彈性運算雲端 (AmazonEC2) 執行個體, AWS 帳戶 該執行個體是由此執行手冊建立的。runbook 要求您使用包含用戶名和密碼鍵值對的 AWS Secrets Manager 秘密提供憑據。用戶名必須具有查詢標準 Postgre SQL 統計視圖和功能的權限。

這個 runbook 會自動在您 AWS 帳戶 使用 AWS CloudFormation 堆棧中創建以下 AWS 資源。您可以使用 AWS CloudFormation 主控台監視堆疊建立。

  • 在私VPC有子網路中啟動的虛擬私有雲端 (VPC) 和 Amazon EC2 執行個體,可選擇使用NAT閘道連線至網際網路。

  • 附加至臨時 Amazon EC2 執行個體的 AWS Identity and Access Management (IAM) 角色,具有擷取機 Secrets Manager 碼值的權限。該角色還提供將檔案上傳到您選擇的 Amazon Simple Storage Service (Amazon S3) 儲存貯體的許可,以及選擇性地將檔案上傳到 AWS Support 案例。

  • 一種VPC對等連接,可讓您的資料庫執行個體與臨時 Amazon EC2 執行個體之間進行連線。

  • Systems Manager 員、Secrets Manager 和 Amazon S3 VPC 端點連接到暫存端點VPC。

  • 包含已註冊任務的維護時段,可定期啟動和停止臨時 Amazon EC2 執行個體、執行資料收集指令碼,以及將檔案上傳到 Amazon S3 儲存貯體。也會為維護時段建立IAM角色,提供執行已註冊工作的權限。

當 runbook 完成時,會刪除用於建立必要 AWS 資源的 AWS CloudFormation 堆疊,並將報告上傳到您選擇的 Amazon S3 儲存貯體,並選擇性地將 AWS Support 案例上傳。

注意

依預設,暫時 Amazon EC2 執行個體的根 Amazon EBS 磁碟區會保留。您可以將EbsVolumeDeleteOnTermination參數設定為來取代此選項true

先決條件

  • 企業 Support 訂閱此 Runbook 和主動式服務工作負載診斷和檢閱需要企業 Support 訂閱。在使用本 runbook 之前,請聯絡您的技術客戶經理 (TAM) 或專家 TAM (STAM) 以取得指示。如需詳細資訊,請參閱AWS Support 主動式服務

  • 帳戶和 AWS 區域 配額請確保您沒有達到 Amazon EC2 實例的最大數量,或者您VPCs可以在您使用此 runbook 的帳戶和區域中創建。如果您需要申請提高限制,請參閱提高服務限制表單

  • 資料庫組態

    1. 您在DatabaseName參數中指定的資料庫應該已設定pg_stat_statements副檔名。如果尚未pg_stat_statements在中配置shared_preload_libraries,則必須編輯「資料庫參數群組」中的值並套用變更。變更參數時,您shared_preload_libraries必須重新啟動資料庫執行個體。如需詳細資訊,請參閱使用參數群組。添加pg_stat_statementsshared_preload_libraries將增加一些性能開銷。不過,這對於追蹤個別陳述式的效能很有用。如需有關pg_stat_statements擴充功能的詳細資訊,請參閱 Postgre SQL 文件。如果您未設定pg_stat_statements擴充功能,或是擴充功能不存在於用於統計資料收集的資料庫中,則作業檢閱中將不會顯示陳述式層級分析。

    2. 確保track_countstrack_activities參數未關閉。如果在「資料庫參數群組」中關閉這些參數,將無法使用有意義的統計資料。變更這些參數時,您必須重新啟動資料庫執行個體。如需詳細資訊,請參閱在您的 Amazon RDS 上使用 Postgre 資SQL料庫執行個體的參數。

    3. 如果關閉track_io_timing參數,I/O 層級統計資料將不會包含在作業檢閱中。變更時,您track_io_timing必須重新啟動資料庫執行個體,並根據資料庫執行個體工作負載產生額外的效能額外負荷。儘管關鍵工作負載會產生效能額外負荷,但此參數仍提供與每個查詢 I/O 時間相關的有用資訊。

帳單和費用您 AWS 帳戶 需支付與臨時 Amazon EC2 執行個體、關聯的 Amazon EBS 磁碟區、NAT閘道以及執行此自動化時傳輸的資料相關費用。默認情況下,這個手冊創建一個 t3.micro Amazon Linux 2 實例來收集統計信息。runbook 會啟動和停止執行個體之間的步驟,以降低成本。

資料安全性和治理這本 Runbook 透過查詢 Postgre 統計資料檢視和功能來收集SQL統計資料。請確定SecretId參數中提供的認證只允許統計資料檢視和函數的唯讀權限。作為自動化的一部分,收集指令碼會上傳到您的 Amazon S3 儲存貯體,並且可以位於中s3://amzn-s3-demo-bucket/automation execution id/queries/

這些指令碼會收集「 AWS 專家」用來複查物件層級的關鍵績效指標的資料。指令碼會收集資訊,例如資料表名稱、結構描述名稱和索引名稱。如果任何這些資訊包含敏感資訊,例如收益指標、使用者名稱、電子郵件地址或任何其他個人識別資訊,我們建議您停止進行此工作負載檢查。請與您 AWS TAM聯絡,討論工作負載檢閱的替代方法。

確保您獲得必要的批准和許可,以便與此自動化操作共享所收集的統計信息和元數據 AWS。

安全考量如果將UpdateRdsSecurityGroup參數設定為yes,runbook 會更新與資料庫執行個體關聯的安全群組,以允許來自臨時 Amazon EC2 執行個體私有 IP 地址的輸入流量。

如果將UpdateRdsRouteTable參數設定為yes,runbook 會更新與執行資料庫執行個體所在子網路相關聯的路由表,以允許透過對VPC等連線傳輸臨時 Amazon EC2 執行個體的流量。

建立使用者若要允許收集指令碼連線到 Amazon RDS 資料庫,您必須設定具有權限的使用者才能讀取統計資料檢視。然後,您必須將認證存儲在 Secrets Manager 中。我們建議您為此自動化操作建立新的專屬使用者。建立個別使用者可讓您稽核和追蹤此自動化操作所執行的活動。

  1. 建立新使用者。

    psql -h <database_connection_endpoint> -p <database_port> -U <admin_user> -c "CREATE USER <user_name> PASSWORD '<password>';"

  2. 請確定此使用者只能建立唯讀連線。

    psql -h <database_connection_endpoint> -p <database_port> -U <admin_user> -c "ALTER USER <user_name> SET default_transaction_read_only=true;"

  3. 設定使用者層級限制。

    psql -h <database_connection_endpoint> -p <database_port> -U <admin_user> -c "ALTER USER <user_name> SET work_mem=4096;"

    psql -h <database_connection_endpoint> -p <database_port> -U <admin_user> -c "ALTER USER <user_name> SET statement_timeout=10000;"

    psql -h <database_connection_endpoint> -p <database_port> -U <admin_user> -c "ALTER USER <user_name> SET idle_in_transaction_session_timeout=60000;"

  4. pg_monitor權限授予新使用者,以便它可以存取資料庫統計資料。(pg_monitor角色是pg_read_all_settingspg_read_all_stats、和的成員pg_stat_scan_table。)

    psql -h <database_connection_endpoint> -p <database_port> -U <admin_user> -c "GRANT pg_monitor to <user_name>;"

透過此 Systems Manager 自動化新增至臨時 Amazon EC2 執行個體設定檔的許可將以下許可新增至與臨時 Amazon EC2 執行個體相關聯的IAM角色。受AmazonSSMManagedInstanceCore管政策也與IAM角色相關聯,以允許系統管理員管理 Amazon EC2 執行個體。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ec2:DescribeTags" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket", "Effect": "Allow" }, { "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/automation execution id/*", "Effect": "Allow" }, { "Action": [ "secretsmanager:GetSecretValue" ], "Resource": "arn:aws:secretsmanager:region:account id:secret:secret id", "Effect": "Allow" }, { "Action": [ "support:AddAttachmentsToSet", "support:AddCommunicationToCase", "support:DescribeCases" ], "Resource": "*", "Effect": "Allow" } ] }

由此 Systems Manager 自動化新增至暫時維護時段的權限下列權限會自動新增至與維護 Windows 工作相關聯的IAM角色。維護視窗工作會啟動、停止,並將命令傳送到暫時的 Amazon EC2 執行個體。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ssm:GetAutomationExecution", "ssm:ListCommands", "ssm:ListCommandInvocations", "ssm:GetCommandInvocation", "ssm:GetCalendarState", "ssm:CancelCommand", "ec2:DescribeInstanceStatus" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "ssm:SendCommand", "ec2:StartInstances", "ec2:StopInstances", "ssm:StartAutomationExecution" ], "Resource": [ "arn:aws:ec2:region:account id:instance/temporary instance id", "arn:aws:ssm:*:*:document/AWS-RunShellScript", "arn:aws:ssm:*:*:automation-definition/AWS-StopEC2Instance:$DEFAULT", "arn:aws:ssm:*:*:automation-definition/AWS-StartEC2Instance:$DEFAULT" ], "Effect": "Allow" }, { "Condition": { "StringEquals": { "iam:PassedToService": "ssm.amazonaws.com" } }, "Action": "iam:PassRole", "Resource": "*", "Effect": "Allow" } ] }

運行此自動化(控制台)

文件類型

 自動化

擁有者

Amazon

平台

資料庫

參數

  • AutomationAssumeRole

    類型:字串

    描述:(選用) 允許 Systems Manager 自動化代表您執行動作的 AWS Identity and Access Management (IAM) 角色的 Amazon 資源名稱 ()。ARN如果未指定角色,Systems Manager 自動化會使用啟動此 runbook 的使用者的權限。

  • DBInstanceIdentifier

    類型:字串

    說明:(必要) 資料庫執行個體的 ID。

  • DatabaseName

    類型:字串

    說明:(必要) 資料庫執行個體上託管的資料庫名稱。

  • SecretId

    類型:字串

    描述:(必要) 包含使用者名稱和密碼金鑰值組ARN的 Secret Secrets Manager 密碼。 AWS CloudFormation 堆疊會建立具有此GetSecretValue作業權限的IAM原則ARN。證明資料是用來允許暫時執行處理收集資料庫統計資料。請聯絡您STAM的TAM或討論所需的最低權限。

  • 確認

    類型:字串

    描述:(必要) yes 如果您確認此 runbook 將在您的帳戶中建立暫時資源,以便從資料庫執行個體收集統計資料,請輸入。我們建議STAM在執行此自動化操作之前聯絡您的TAM或。

  • SupportCase

    類型:字串

    說明:(選擇性) 您TAM或提供的 AWS Support 案例編號STAM。如果提供,runbook 會更新案例並附加收集的資料。此選項需要臨時 Amazon EC2 執行個體具有網際網路連線才能存取 AWS Support API端點。您必須將AllowVpcInternetAccess參數設定為true。案例主題必須包含短語AWSPremiumSupport-PostgreSQLWorkloadReview

  • S3 BucketName

    類型:字串

    說明:(必填) 您帳戶中要上傳自動化收集之資料的 Amazon S3 儲存貯體名稱。確認值區政策不會將任何不必要的讀取或寫入權限授與不需要存取值區內容的主體。我們建議為此自動化目的建立新的暫時 Amazon S3 儲存貯體。執行手冊為連接到臨時 Amazon EC2 執行個體的IAM角色提供s3:PutObjectAPI操作的許可。上傳的文件將位於s3://bucket name/automation execution id/

  • InstanceType

    類型:字串

    說明:(選用) 將執行自訂SQL和殼層指令碼之臨時 Amazon EC2 執行個體的類型。

    有效值:微 | t2. 小 | t2. 中 | t2. 大 | 微型 | 三. 小 | t3. 中

    預設值:微

  • VpcCidr

    類型:字串

    描述:(選擇性) 新的 CIDR IP 位址範圍 VPC (例如,172.31.0.0/16)。請確定您選取的資料庫執行CIDR個體不會重疊或符合任何現VPC有連線能力的資料庫執行個體。VPC您可以建立的最小值使用 /28 子網路遮罩,而最大的遮罩則VPC使用 /16 子網路遮罩。

    預設值:

  • StackResourcesNamePrefix

    類型:字串

    描述:(可選) AWS CloudFormation 堆棧資源名稱前綴和標籤。runbook 使用此前綴作為應用於資源的名稱和標籤的一部分創建 AWS CloudFormation 堆棧資源。標籤鍵值配對的結構為。StackResourcesNamePrefix:{{automation:EXECUTION_ID}}

    預設值: AWSPostgreSQLWorkloadReview

  • 排程

    類型:字串

    摘要:(選擇性) 維護時段排程。指定維護時段執行工作的頻率。預設值為「間隔」1 hour

    有效值:15 分鐘 | 30 分鐘 | 1 小時 | 2 小時 | 4 小時 | 6 小時 | 6 小時 | 12 小時 | 1 天 | 2 天 | 4 天

    預設值:1 小時

  • 持續時間

    類型:整數

    說明:(選擇性) 您要允許自動化執行的持續時間上限 (以分鐘為單位)。支持的最長持續時間為 8,640 分鐘(6 天)。預設值為 4,320 分鐘 (3 天)。

    有效值:

    預設值:

  • UpdateRdsRouteTable

    類型:字串

    說明:(選擇性) 如果設定為true,runbook 會更新與資料庫執行個體執行個體所在子網路相關聯的路由表。會新增IPv4路由,透過新建立的VPC對等連線將流量路由到臨時 Amazon EC2 執行個體私有IPV4地址。

    有效值:true | false

    預設:false

  • AllowVpcInternetAccess

    類型:字串

    說明:(選用) 如果設定為true,執行手冊會建立NAT閘道,以提供網際網路連線到臨時 Amazon EC2 執行個體,以便與 AWS Support API端點通訊。您可以保留此參數,false就好像您只希望 runbook 將輸出上傳到 Amazon S3 儲存貯體一樣。

    有效值:true | false

    預設:false

  • UpdateRdsSecurityGroup

    類型:字串

    說明:(選擇性) 如果設為true,runbook 會更新與資料庫執行個體關聯的安全群組,以允許來自臨時執行個體私有 IP 位址的流量。

    有效值:假 | 真

    預設:false

  • EbsVolumeDeleteOnTermination

    類型:字串

    說明:(選擇性) 如果設定為true,則會在EC2執行簿完成後刪除暫存 Amazon 執行個體的根磁碟區並刪除 AWS CloudFormation 堆疊。

    有效值:假 | 真

    預設:false

必要的IAM權限

AutomationAssumeRole參數需要執行下列動作,才能成功使用 Runbook。

  • cloudformation:CreateStack

  • cloudformation:DeleteStack

  • cloudformation:DescribeStackEvents

  • cloudformation:DescribeStackResource

  • cloudformation:DescribeStacks

  • cloudformation:UpdateStack

  • ec2:AcceptVpcPeeringConnection

  • ec2:AllocateAddress

  • ec2:AssociateRouteTable

  • ec2:AssociateVpcCidrBlock

  • ec2:AttachInternetGateway

  • ec2:AuthorizeSecurityGroupEgress

  • ec2:AuthorizeSecurityGroupIngress

  • ec2:CreateEgressOnlyInternetGateway

  • ec2:CreateInternetGateway

  • ec2:CreateNatGateway

  • ec2:CreateRoute

  • ec2:CreateRouteTable

  • ec2:CreateSecurityGroup

  • ec2:CreateSubnet

  • ec2:CreateTags

  • ec2:CreateVpc

  • ec2:CreateVpcEndpoint

  • ec2:CreateVpcPeeringConnection

  • ec2:DeleteEgressOnlyInternetGateway

  • ec2:DeleteInternetGateway

  • ec2:DeleteNatGateway

  • ec2:DeleteRoute

  • ec2:DeleteRouteTable

  • ec2:DeleteSecurityGroup

  • ec2:DeleteSubnet

  • ec2:DeleteTags

  • ec2:DeleteVpc

  • ec2:DeleteVpcEndpoints

  • ec2:DescribeAddresses

  • ec2:DescribeEgressOnlyInternetGateways

  • ec2:DescribeImages

  • ec2:DescribeInstances

  • ec2:DescribeInstanceStatus

  • ec2:DescribeInternetGateways

  • ec2:DescribeNatGateways

  • ec2:DescribeRouteTables

  • ec2:DescribeSecurityGroups

  • ec2:DescribeSubnets

  • ec2:DescribeVpcEndpoints

  • ec2:DescribeVpcPeeringConnections

  • ec2:DescribeVpcs

  • ec2:DetachInternetGateway

  • ec2:DisassociateRouteTable

  • ec2:DisassociateVpcCidrBlock

  • ec2:ModifySubnetAttribute

  • ec2:ModifyVpcAttribute

  • ec2:RebootInstances

  • ec2:ReleaseAddress

  • ec2:RevokeSecurityGroupEgress

  • ec2:RevokeSecurityGroupIngress

  • ec2:StartInstances

  • ec2:StopInstances

  • ec2:RunInstances

  • ec2:TerminateInstances

  • iam:AddRoleToInstanceProfile

  • iam:AttachRolePolicy

  • iam:CreateInstanceProfile

  • iam:CreateRole

  • iam:DeleteInstanceProfile

  • iam:DeleteRole

  • iam:DeleteRolePolicy

  • iam:DetachRolePolicy

  • iam:GetInstanceProfile

  • iam:GetRole

  • iam:GetRolePolicy

  • iam:PassRole

  • iam:PutRolePolicy

  • iam:RemoveRoleFromInstanceProfile

  • iam:TagPolicy

  • iam:TagRole

  • rds:DescribeDBInstances

  • s3:GetAccountPublicAccessBlock

  • s3:GetBucketAcl

  • s3:GetBucketPolicyStatus

  • s3:GetBucketPublicAccessBlock

  • s3:ListBucket

  • ssm:AddTagsToResource

  • ssm:CancelMaintenanceWindowExecution

  • ssm:CreateDocument

  • ssm:CreateMaintenanceWindow

  • ssm:DeleteDocument

  • ssm:DeleteMaintenanceWindow

  • ssm:DeregisterTaskFromMaintenanceWindow

  • ssm:DescribeAutomationExecutions

  • ssm:DescribeDocument

  • ssm:DescribeInstanceInformation

  • ssm:DescribeMaintenanceWindowExecutions

  • ssm:GetCalendarState

  • ssm:GetDocument

  • ssm:GetMaintenanceWindowExecution

  • ssm:GetParameters

  • ssm:ListCommandInvocations

  • ssm:ListCommands

  • ssm:ListTagsForResource

  • ssm:RegisterTaskWithMaintenanceWindow

  • ssm:RemoveTagsFromResource

  • ssm:SendCommand

  • support:AddAttachmentsToSet

  • support:AddCommunicationToCase

  • support:DescribeCases

文件步驟

  1. aws:assertAwsResourceProperty-確認資料庫執行個體處於available狀態。

  2. aws:executeAwsApi-收集有關資料庫執行個體的詳細資訊。

  3. aws:executeScript-檢查在中指定的 Amazon S3 儲存貯體是否S3BucketName允許匿名或公開讀取或寫入存取權限。

  4. aws:executeScript-從自動化 runbook 附件中獲取 AWS CloudFormation 模板內容,該附件用於在中創建臨時 AWS 資源。 AWS 帳戶

  5. aws:createStack-建立 AWS CloudFormation 堆疊資源。

  6. aws:waitForAwsResourceProperty-等待 AWS CloudFormation 範本建立的 Amazon EC2 執行個體執行為止。

  7. aws:executeAwsApi-取得由 AWS CloudFormation建立IDs的臨時 Amazon EC2 執行個體和VPC對等連線。

  8. aws:executeAwsApi-取得臨時 Amazon EC2 執行個體的 IP 位址,以設定與資料庫執行個體的連線。

  9. aws:executeAwsApi-標記附加到臨時 Amazon EC2 實例的 Amazon EBS 卷。

  10. aws:waitForAwsResourceProperty-等待直到臨時 Amazon EC2 執行個體通過狀態檢查為止。

  11. aws:waitForAwsResourceProperty-等待直到臨時 Amazon EC2 執行個體由系統管理員管理為止。如果此步驟逾時或失敗,則 runbook 會重新啟動執行個體。

    1. aws:executeAwsApi-如果上一個步驟失敗或逾時,請重新啟動臨時 Amazon EC2 執行個體。

    2. aws:waitForAwsResourceProperty-等待直到臨時 Amazon EC2 執行個體在重新開機後由系統管理員管理。

  12. aws:runCommand-在臨時 Amazon EC2 執行個體上安裝中繼資料收集器應用程式需求。

  13. aws:runCommand-透過在臨時 Amazon EC2 執行個體上建立組態檔案來設定資料庫執行個體的存取權限。

  14. aws:executeAwsApi-建立維護視窗,以使用執行命令定期執行中繼資料收集器應用程式。維護時段會啟動和停止指令之間的執行個體。

  15. aws:waitForAwsResourceProperty-等待 AWS CloudFormation 範本建立的維護視窗準備就緒為止。

  16. aws:executeAwsApi-獲取IDs維護窗口並更改由創建的日曆 AWS CloudFormation。

  17. aws:sleep-等待到維護時段的結束日期。

  18. aws:executeAwsApi-關閉維護視窗。

  19. aws:executeScript-取得維護時段期間執行的工作結果。

  20. aws:waitForAwsResourceProperty-等待維護時段完成最後一項工作,然後再繼續。

  21. aws:branch-根據您是否提供SupportCase參數值來分支工作流程。

    1. aws:changeInstanceState-啟動臨時 Amazon EC2 執行個體,並等待狀態檢查通過,然後再上傳報告。

    2. aws:waitForAwsResourceProperty-等待直到臨時 Amazon EC2 執行個體由系統管理員管理為止。如果此步驟逾時或失敗,則執行本會重新啟動執行個體。

      1. aws:executeAwsApi-如果上一個步驟失敗或逾時,請重新啟動臨時 Amazon EC2 執行個體。

      2. aws:waitForAwsResourceProperty-等待直到臨時 Amazon EC2 執行個體在重新開機後由系統管理員管理。

    3. aws:runCommand-如果您為SupportCase參數提供了值, AWS Support 則將中繼資料報表附加至大小寫。指令碼會將報表壓縮並分割成 5 MB 的檔案。腳本附加到案 AWS Support 例的最大文件數為 12。

  22. aws:changeInstanceState-停止暫存 Amazon EC2 執行個體,以防 AWS CloudFormation 堆疊無法刪除。

  23. aws:executeAwsApi-描述執行簿無法建立或更新 AWS CloudFormation 堆疊時的 AWS CloudFormation 堆疊事件。

  24. aws:waitForAwsResourceProperty-等待 AWS CloudFormation 堆疊處於終端機狀態後再刪除。

  25. aws:executeAwsApi-刪除維護時段以外的 AWS CloudFormation 堆疊。如果EbsVolumeDeleteOnTermination參數值設定為,則會保留與臨時 Amazon EC2 執行個體關聯的根 Amazon EBS 磁碟區false