本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWSPremiumSupport-PostgreSQLWorkloadReview
Description
該手AWSPremiumSupport-PostgreSQLWorkloadReview
冊捕獲您的 Amazon 關係數據庫服務(亞馬遜RDS)Postgre 數據SQL庫使用情況統計的多個快照。 AWS Support 主動式服務
這個 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 的帳戶和區域中創建。如果您需要申請提高限制,請參閱提高服務限制表單
。 -
資料庫組態
-
您在
DatabaseName
參數中指定的資料庫應該已設定pg_stat_statements
副檔名。如果尚未pg_stat_statements
在中配置shared_preload_libraries
,則必須編輯「資料庫參數群組」中的值並套用變更。變更參數時,您shared_preload_libraries
必須重新啟動資料庫執行個體。如需詳細資訊,請參閱使用參數群組。添加pg_stat_statements
到shared_preload_libraries
將增加一些性能開銷。不過,這對於追蹤個別陳述式的效能很有用。如需有關pg_stat_statements
擴充功能的詳細資訊,請參閱 Postgre SQL 文件。如果您未設定 pg_stat_statements
擴充功能,或是擴充功能不存在於用於統計資料收集的資料庫中,則作業檢閱中將不會顯示陳述式層級分析。 -
確保
track_counts
和track_activities
參數未關閉。如果在「資料庫參數群組」中關閉這些參數,將無法使用有意義的統計資料。變更這些參數時,您必須重新啟動資料庫執行個體。如需詳細資訊,請參閱在您的 Amazon RDS 上使用 Postgre 資SQL料庫執行個體的參數。 -
如果關閉
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 中。我們建議您為此自動化操作建立新的專屬使用者。建立個別使用者可讓您稽核和追蹤此自動化操作所執行的活動。
-
建立新使用者。
psql -h <database_connection_endpoint> -p <database_port> -U <admin_user> -c "CREATE USER <user_name> PASSWORD '<password>';"
-
請確定此使用者只能建立唯讀連線。
psql -h <database_connection_endpoint> -p <database_port> -U <admin_user> -c "ALTER USER <user_name> SET default_transaction_read_only=true;"
-
設定使用者層級限制。
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;"
-
將
pg_monitor
權限授予新使用者,以便它可以存取資料庫統計資料。(pg_monitor
角色是pg_read_all_settings
pg_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:PutObject
API操作的許可。上傳的文件將位於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
文件步驟
-
aws:assertAwsResourceProperty
-確認資料庫執行個體處於available
狀態。 -
aws:executeAwsApi
-收集有關資料庫執行個體的詳細資訊。 -
aws:executeScript
-檢查在中指定的 Amazon S3 儲存貯體是否S3BucketName
允許匿名或公開讀取或寫入存取權限。 -
aws:executeScript
-從自動化 runbook 附件中獲取 AWS CloudFormation 模板內容,該附件用於在中創建臨時 AWS 資源。 AWS 帳戶 -
aws:createStack
-建立 AWS CloudFormation 堆疊資源。 -
aws:waitForAwsResourceProperty
-等待 AWS CloudFormation 範本建立的 Amazon EC2 執行個體執行為止。 -
aws:executeAwsApi
-取得由 AWS CloudFormation建立IDs的臨時 Amazon EC2 執行個體和VPC對等連線。 -
aws:executeAwsApi
-取得臨時 Amazon EC2 執行個體的 IP 位址,以設定與資料庫執行個體的連線。 -
aws:executeAwsApi
-標記附加到臨時 Amazon EC2 實例的 Amazon EBS 卷。 -
aws:waitForAwsResourceProperty
-等待直到臨時 Amazon EC2 執行個體通過狀態檢查為止。 -
aws:waitForAwsResourceProperty
-等待直到臨時 Amazon EC2 執行個體由系統管理員管理為止。如果此步驟逾時或失敗,則 runbook 會重新啟動執行個體。-
aws:executeAwsApi
-如果上一個步驟失敗或逾時,請重新啟動臨時 Amazon EC2 執行個體。 -
aws:waitForAwsResourceProperty
-等待直到臨時 Amazon EC2 執行個體在重新開機後由系統管理員管理。
-
-
aws:runCommand
-在臨時 Amazon EC2 執行個體上安裝中繼資料收集器應用程式需求。 -
aws:runCommand
-透過在臨時 Amazon EC2 執行個體上建立組態檔案來設定資料庫執行個體的存取權限。 -
aws:executeAwsApi
-建立維護視窗,以使用執行命令定期執行中繼資料收集器應用程式。維護時段會啟動和停止指令之間的執行個體。 -
aws:waitForAwsResourceProperty
-等待 AWS CloudFormation 範本建立的維護視窗準備就緒為止。 -
aws:executeAwsApi
-獲取IDs維護窗口並更改由創建的日曆 AWS CloudFormation。 -
aws:sleep
-等待到維護時段的結束日期。 -
aws:executeAwsApi
-關閉維護視窗。 -
aws:executeScript
-取得維護時段期間執行的工作結果。 -
aws:waitForAwsResourceProperty
-等待維護時段完成最後一項工作,然後再繼續。 -
aws:branch
-根據您是否提供SupportCase
參數值來分支工作流程。-
aws:changeInstanceState
-啟動臨時 Amazon EC2 執行個體,並等待狀態檢查通過,然後再上傳報告。 -
aws:waitForAwsResourceProperty
-等待直到臨時 Amazon EC2 執行個體由系統管理員管理為止。如果此步驟逾時或失敗,則執行本會重新啟動執行個體。-
aws:executeAwsApi
-如果上一個步驟失敗或逾時,請重新啟動臨時 Amazon EC2 執行個體。 -
aws:waitForAwsResourceProperty
-等待直到臨時 Amazon EC2 執行個體在重新開機後由系統管理員管理。
-
-
aws:runCommand
-如果您為SupportCase
參數提供了值, AWS Support 則將中繼資料報表附加至大小寫。指令碼會將報表壓縮並分割成 5 MB 的檔案。腳本附加到案 AWS Support 例的最大文件數為 12。
-
-
aws:changeInstanceState
-停止暫存 Amazon EC2 執行個體,以防 AWS CloudFormation 堆疊無法刪除。 -
aws:executeAwsApi
-描述執行簿無法建立或更新 AWS CloudFormation 堆疊時的 AWS CloudFormation 堆疊事件。 -
aws:waitForAwsResourceProperty
-等待 AWS CloudFormation 堆疊處於終端機狀態後再刪除。 -
aws:executeAwsApi
-刪除維護時段以外的 AWS CloudFormation 堆疊。如果EbsVolumeDeleteOnTermination
參數值設定為,則會保留與臨時 Amazon EC2 執行個體關聯的根 Amazon EBS 磁碟區false
。