AWSPremiumSupport-PostgreSQLWorkloadReview - AWS Systems Manager 自動化 Runbook 參考

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

AWSPremiumSupport-PostgreSQLWorkloadReview

Description

AWSPremiumSupport-PostgreSQLWorkloadReview Runbook 會擷取 Amazon Relational Database Service (Amazon RDS) PostgreSQL 資料庫用量統計資料的多個快照。 AWS Support Proactive Services 專家需要擷取的統計資料才能執行操作審查。統計資料會使用一組自訂SQL和 Shell 指令碼收集。這些指令碼會下載至由此 Runbook 建立 AWS 帳戶 的 中暫時 Amazon Elastic Compute Cloud (AmazonEC2) 執行個體。Runbook 要求您使用包含使用者名稱和密碼鍵值對的 AWS Secrets Manager 秘密來提供憑證。使用者名稱必須具有查詢標準 PostgreSQL 統計資料檢視和函數的許可。

此 Runbook AWS 帳戶 會自動使用 AWS CloudFormation 堆疊在 中建立下列 AWS 資源。您可以使用 AWS CloudFormation 主控台監控堆疊建立。

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

  • 連接至暫時 Amazon EC2執行個體的 AWS Identity and Access Management (IAM) 角色,具有擷取 Secrets Manager 秘密值的許可。此角色也提供將檔案上傳到您選擇的 Amazon Simple Storage Service (Amazon S3) 儲存貯體,以及選擇性地上傳到 AWS Support 案例的許可。

  • 允許資料庫執行個體與臨時 Amazon EC2執行個體之間連線的VPC對等連線。

  • 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

先決條件

  • Enterprise Support 訂閱 此 Runbook 和 Proactive Services 工作負載診斷和檢閱需要 Enterprise Support 訂閱。使用此 Runbook 之前,請聯絡您的 Technical Account Manager (TAM) 或 Specialist TAM(STAM) 以取得指示。如需詳細資訊,請參閱 AWS Support Proactive Services。

  • 帳戶和 AWS 區域 配額 請確定您未達到 Amazon EC2執行個體的數目上限VPCs,或是您可以在您使用此 Runbook 的帳戶和區域中建立的執行個體數量上限。如果您需要請求提高限制,請參閱服務提高限制表單

  • 資料庫組態

    1. 您在 DatabaseName 參數中指定的資料庫應設定pg_stat_statements延伸模組。如果您尚未在 pg_stat_statements中設定 shared_preload_libraries,則必須編輯資料庫參數群組中的值,並套用變更。變更 參數shared_preload_libraries需要重新啟動資料庫執行個體。如需詳細資訊,請參閱使用參數群組。新增 pg_stat_statements shared_preload_libraries將新增一些效能額外負荷。不過,這對於追蹤個別陳述式的效能很有用。如需pg_stat_statements延伸模組的詳細資訊,請參閱 PostgreSQL 文件 。如果您未設定pg_stat_statements延伸模組,或延伸模組不存在於用於統計資料收集的資料庫中,則陳述式層級分析將不會出現在操作審核中。

    2. 確定 track_countstrack_activities 參數未關閉。如果在資料庫參數群組中關閉這些參數,則無法使用有意義的統計資料。變更這些參數需要重新啟動資料庫執行個體。如需詳細資訊,請參閱使用 Amazon RDS for PostgreSQL 資料庫執行個體 上的參數

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

帳單和費用 AWS 帳戶 您的 將支付暫時 Amazon EC2執行個體、相關 Amazon EBS磁碟區、NAT閘道和此自動化執行期間傳輸之資料相關的成本。根據預設,此 Runbook 會建立 t3.micro Amazon Linux 2 執行個體來收集統計資料。Runbook 會在步驟之間啟動和停止執行個體,以降低成本。

資料安全和治理此 Runbook 透過查詢 PostgreSQL 統計資料檢視和函數 來收集統計資料。請確定 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 Automation 新增至暫時 Amazon EC2執行個體設定檔的許可 下列許可會新增至與暫時 Amazon EC2執行個體相關聯的IAM角色。AmazonSSMManagedInstanceCore 受管政策也會與 IAM角色建立關聯,以允許 Systems Manager 管理 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 Automation 新增至臨時維護時段的許可 下列許可會自動新增至與維護 Windows 任務相關聯的IAM角色。維護 Windows 任務會啟動、停止並傳送命令至暫時 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 Automation 代表您執行動作ARN的 () 角色的 AWS Identity and Access Management Amazon Resource Name (IAM)。如果未指定角色,Systems Manager Automation 會使用啟動此 Runbook 的使用者許可。

  • DBInstanceIdentifier

    類型:字串

    描述:(必要) 資料庫執行個體的 ID。

  • DatabaseName

    類型:字串

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

  • SecretId

    類型:字串

    描述:(必要) 包含使用者名稱和密碼金鑰值對ARN的 Secrets Manager 秘密。 AWS CloudFormation 堆疊會建立具有此 GetSecretValue操作許可IAM的政策ARN。憑證用於允許暫存執行個體收集資料庫統計資料。請聯絡您的 TAM或 STAM 以討論所需的最低許可。

  • 確認

    類型:字串

    說明:(必要) yes 如果您確認此 Runbook 會在您的帳戶中建立暫存資源,以從資料庫執行個體收集統計資料,請輸入 。我們建議您在執行此自動化STAM之前先聯絡 TAM或 。

  • SupportCase

    類型:字串

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

  • S3BucketName

    類型:字串

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

  • InstanceType

    類型:字串

    描述:(選用) 將執行自訂SQL和 Shell 指令碼的臨時 Amazon EC2執行個體類型。

    有效值:t2.micro | t2.small | t2.medium | t2.large | t3.micro | t3.small | t3.medium | t3.large

    預設:t3.micro

  • VpcCidr

    類型:字串

    說明:(選用) 新 VPC(例如 ) CIDR 符號中的 IP 地址範圍172.31.0.0/16。請確定您選取的 CIDR與資料庫執行個體VPC的連線不重疊或相符。您可以VPC建立的最小使用 /28 子網路遮罩,而最大VPC使用 /16 子網路遮罩。

    預設:172.31.0.0/16

  • StackResourcesNamePrefix

    類型:字串

    描述:(選用) AWS CloudFormation 堆疊資源名稱字首和標籤。Runbook 會使用此字首建立 AWS CloudFormation 堆疊資源,作為套用至資源的名稱和標籤的一部分。標籤鍵值對的結構為 StackResourcesNamePrefix:{{automation:EXECUTION_ID}}

    預設: AWSPostgreSQLWorkloadReview

  • 排程

    類型:字串

    描述:(選用) 維護時段排程。指定維護時段執行任務的頻率。預設值是每個 1 hour

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

    預設:1 小時

  • 持續時間

    類型:整數

    描述:(選用) 您希望允許自動化執行的持續時間上限,以分鐘為單位。支援的持續時間上限為 8,640 分鐘 (6 天)。預設值為 4,320 分鐘 (3 天)。

    有效值:30-8640

    預設:4320

  • UpdateRdsRouteTable

    類型:字串

    說明:(選用) 如果設定為 true,則 Runbook 會更新與您資料庫執行個體執行之子網路相關聯的路由表。新增IPv4路由,以透過新建立的VPC對等連線將流量路由至暫時 Amazon EC2執行個體私有IPV4地址。

    有效值:true | false

    預設:false

  • AllowVpcInternetAccess

    類型:字串

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

    有效值:true | false

    預設:false

  • UpdateRdsSecurityGroup

    類型:字串

    說明:(選用) 如果設定為 true, Runbook 會更新與資料庫執行個體相關聯的安全群組,以允許來自暫時執行個體私有 IP 地址的流量。

    有效值: false | true

    預設:false

  • EbsVolumeDeleteOnTermination

    類型:字串

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

    有效值: false | true

    預設: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 - 從 Automation Runbook 附件取得 AWS CloudFormation 範本內容,用於在 中建立暫存 AWS 資源 AWS 帳戶。

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

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

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

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

  9. aws:executeAwsApi - 標記連接到臨時 Amazon EC2執行個體的 Amazon EBS磁碟區。

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

  11. aws:waitForAwsResourceProperty - 等待暫存 Amazon EC2執行個體由 Systems Manager 管理。如果此步驟逾時或失敗,則 Runbook 會重新啟動執行個體。

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

    2. aws:waitForAwsResourceProperty - 等到暫時性 Amazon EC2執行個體重新啟動後由 Systems Manager 管理。

  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執行個體由 Systems Manager 管理。如果此步驟逾時或失敗,則 Runbook 會重新啟動執行個體。

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

      2. aws:waitForAwsResourceProperty - 等到暫時性 Amazon EC2執行個體重新啟動後由 Systems Manager 管理。

    3. aws:runCommand - 如果您為 SupportCase 參數提供值,則 會將中繼資料報告附加到 AWS Support 案例。指令碼會壓縮報告並將其分割為 5 MB 檔案。指令碼連接至 AWS Support 案例的檔案數目上限為 12。

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

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

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

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