AWSPremiumSupport-PostgreSQLWorkloadReview - AWS Systems Manager 自动化运行手册参考

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

AWSPremiumSupport-PostgreSQLWorkloadReview

描述

AWSPremiumSupport-PostgreSQLWorkloadReview运行手册将捕获 Amazon Relational Database Service (Amazon RDS) PostgreSQL 数据库使用情况统计数据的多个快照。 AWS Support 主动式服务专家需要收集到的统计数据才能进行运营审查。统计数据使用一组自定义 SQL 和 Shell 脚本进行收集。这些脚本将下载到由本运行手册创建的临时亚马逊弹性计算云 (Amazon EC2) 实例。 AWS 账户 运行手册要求您使用包含用户名和密码键值对的 AWS Secrets Manager 密钥提供凭证。用户名必须具有查询标准 PostgreSQL 统计视图和函数的权限。

此运行手册 AWS 账户 使用 AWS CloudFormation 堆栈自动在您中创建以下 AWS 资源。您可以使用 AWS CloudFormation 控制台来监控堆栈的创建。

  • 虚拟私有云(VPC)和 Amazon EC2 实例在 VPC 的私有子网中启动,可选择使用 NAT 网关连接到互联网。

  • 附加到临时 Amazon EC2 实例的 AWS Identity and Access Management (IAM) 角色,有权检索 Secrets Manager 密钥值。该角色还提供将文件上传到您选择的亚马逊简单存储服务 (Amazon S3) 存储桶的权限,也可以选择上传案例。 AWS Support

  • VPC 对等连接,允许在您的数据库实例和临时 Amazon EC2 实例之间建立连接。

  • 附加到临时 VPC 的 Systems Manager、Secrets Manager 和 Amazon S3 VPC 端点。

  • 包含已注册任务的维护时段,这些任务定期启动和停止临时 Amazon EC2 实例、运行数据收集脚本以及将文件上传到 Amazon S3 存储桶。还会为维护时段创建一个 IAM 角色,该角色提供执行已注册任务的权限。

运行手册完成后,将删除用于创建必要 AWS 资源的 AWS CloudFormation 堆栈,并将报告上传到您选择的 Amazon S3 存储桶,也可以上传一个 AWS Support 案例。

注意

默认情况下,将保留临时 Amazon EC2 实例的根 Amazon EBS 卷。您可以通过将 EbsVolumeDeleteOnTermination 参数设置为 true 来覆盖此设置。

先决条件

  • Enterprise Support 订阅此运行手册和主动式服务工作负载诊断与审查需要订阅 Enterprise Support。在使用此运行手册之前,请联系您的技术客户经理 (TAM) 或专家 TAM (STAM) 以获取相关说明。有关更多信息,请参阅AWS Support 主动服务

  • 账户和 AWS 区域 配额请确保您尚未达到可在账户和使用本运行手册的地区中创建的 Amazon EC2 实例或 VPC 的最大数量。如果您需要申请提高限制,请参阅提高服务限制表

  • 数据库配置

    1. 您在 DatabaseName 参数中指定的数据库应配置 pg_stat_statements 扩展。如果您尚未在 shared_preload_libraries 中配置 pg_stat_statements,则必须编辑数据库参数组中的值并应用更改。更改参数 shared_preload_libraries 会要求您重启数据库实例。有关更多信息,请参阅 Working with parameter groups。将 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 网关以及此自动化运行期间传输的数据相关的费用。默认情况下,此运行手册会创建一个 t3.micro Amazon Linux 2 实例来收集统计数据。此运行手册在两个步骤之间启动和停止实例以降低成本。

数据安全和治理此运行手册通过查询 PostgreSQL 统计视图和函数来收集统计数据。确保 SecretId 参数中提供的凭证仅允许对统计视图和函数具有只读权限。作为自动化的一部分,收集脚本将上传到 Amazon S3 存储桶,并且可以位于 s3://DOC-EXAMPLE-BUCKET/automation execution id/queries/

这些脚本收集的数据供 AWS 专家用来查看对象级别的关键绩效指标。该脚本收集诸如表名、架构名和索引名之类的信息。如果此类任何信息包含收入指标、用户名、电子邮件地址或任何其他个人身份信息等敏感信息,则我们建议您停止此工作负载审查。请联系您的 AWS TAM,讨论工作量审核的替代方法。

确保您获得必要的批准和许可,才能与之共享此自动化收集的统计数据和元数据 AWS。

安全注意事项如果您将 UpdateRdsSecurityGroup 参数设置为 yes,则运行手册会更新与您的数据库实例关联的安全组,以允许来自临时 Amazon EC2 实例私有 IP 地址的入站流量。

如果您将 UpdateRdsRouteTable 参数设置为 yes,则运行手册会更新与您的数据库实例运行所在的子网关联的路由表,以允许通过 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_statspg_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:::DOC-EXAMPLE-BUCKET", "Effect": "Allow" }, { "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-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 向临时维护时段添加的权限以下权限将自动添加到与维护时段任务关联的 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 Automation 代表您执行操作 AWS Identity and Access Management (IAM) 角色的 Amazon 资源名称(ARN)。如果未指定角色,Systems Manager Automation 将使用启动此运行手册的用户的权限。

  • 数据库 InstanceIdentifier

    类型:字符串

    描述:(必需)您的数据库实例 ID。

  • DatabaseName

    类型:字符串

    描述:(必需)数据库实例上托管的数据库名称。

  • SecretId

    类型:字符串

    描述:(必需)包含用户名和密码键值对的 Secrets Manager 密钥的 ARN。 AWS CloudFormation 堆栈创建一个 IAM 策略,该策略具有此 ARN 的GetSecretValue操作权限。这些凭证用于允许临时实例收集数据库统计信息。请联系您的 TAM 或 STAM,讨论所需的最低权限。

  • 确认

    类型:字符串

    描述:(必需)如果您确认此运行手册将在您的账户中创建临时资源以便从数据库实例收集统计数据,请输入 yes。我们建议在运行此自动化之前先联系您的 TAM 或 STAM。

  • SupportCase

    类型:字符串

    描述:(可选)由您的 TAM 或 STAM 提供的 AWS Support 案例编号。如果已提供,运行手册将更新此案例并附上所收集的数据。此选项要求临时 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 和 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 堆栈资源名称前缀和标签。运行手册使用此前缀作为应用于资源的名称和标签的一部分来创建 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,运行手册将更新与您的数据库实例运行所在的子网关联的路由表。添加 IPv4 路由,用于通过新创建的 VPC 对等连接将流量路由到临时 Amazon EC2 实例私有 IPV4 地址。

    有效值:true | false

    默认:false

  • AllowVpcInternetAccess

    类型:字符串

    描述:(可选)如果设置为true,运行手册将创建一个 NAT 网关,为临时 Amazon EC2 实例提供互联网连接,从而与 AWS Support API 终端节点通信。如果您只想让运行手册将输出上传到 Amazon S3 存储桶,则可以将此参数保留为 false

    有效值:true | false

    默认:false

  • UpdateRdsSecurityGroup

    类型:字符串

    描述:(可选)如果设置为 true,运行手册将更新与您的数据库实例关联的安全组,以允许来自临时实例私有 IP 地址的流量。

    有效值:false | true

    默认:false

  • EbsVolumeDeleteOnTermination

    类型:字符串

    描述:(可选)如果设置为true,则在运行手册完成并删除 AWS CloudFormation 堆栈后,将删除临时 Amazon EC2 实例的根卷。

    有效值:false | true

    默认值:false

所需的 IAM 权限

AutomationAssumeRole 参数需要执行以下操作才能成功使用运行手册。

  • 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 - 检查在 S3BucketName 中指定的 Amazon S3 存储桶是否允许匿名访问权限或者公开读取或写入权限。

  4. aws:executeScript-从 Automation 运行手册附件中获取 AWS CloudFormation 模板内容,该附件用于在中创建 AWS 账户临时 AWS 资源。

  5. aws:createStack-创建 AWS CloudFormation 堆栈资源。

  6. aws:waitForAwsResourceProperty-等待 AWS CloudFormation 模板创建的 Amazon EC2 实例开始运行。

  7. aws:executeAwsApi - 获取 AWS CloudFormation创建的临时 Amazon EC2 实例和 VPC 对等连接的 ID。

  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 管理。如果此步骤超时或失败,则运行手册会重启该实例。

    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-获取由创建的维护时段和更改日历的 ID 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 管理。如果此步骤超时或失败,运行手册将重启该实例。

      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-停止临时的 Amazon EC2 实例,以防 AWS CloudFormation 堆栈无法删除。

  23. aws:executeAwsApi-描述运行手册无法创建或更新 AWS CloudFormation 堆栈时的 AWS CloudFormation 堆栈事件。

  24. aws:waitForAwsResourceProperty-等待 AWS CloudFormation 堆栈处于终端状态后再删除。

  25. aws:executeAwsApi-删除不包括维护时段的 AWS CloudFormation 堆栈。如果 EbsVolumeDeleteOnTermination 参数值设置为 false,则与临时 Amazon EC2 实例关联的 Amazon EBS 根卷将保留。