更新Amazon Transfer Family从 VPC_端点到 VPC 的服务器终端节点类型 - Amazon Transfer Family
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

更新Amazon Transfer Family从 VPC_端点到 VPC 的服务器终端节点类型

您可以使用Amazon Web Services Management Console、Amazon CloudFormation或传输系列 API 来更新服务器的EndpointTypefromVPC_ENDPOINTVPC. 以下各节提供了使用上述每种方法更新服务器端点类型的详细过程和示例。如果您在多个Amazon区域和多个Amazon帐户,您可以使用以下部分提供的示例脚本进行修改后,使用VPC_ENDPOINT类型,您需要更新。

标识服务器使用VPC_ENDPOINT终端节点类型

您可以确定哪些服务器正在使用VPC_ENDPOINT使用Amazon Web Services Management Console.

要使用VPC_ENDPOINT使用控制台的终端节点类型

  1. 打开Amazon Transfer Family控制台位于https://console.aws.amazon.com/transfer/.

  2. 选择服务器以显示该区域中您帐户中的服务器列表。

  3. 对服务器列表按终端节点类型查看所有使用VPC_ENDPOINT.

使用标识服务器VPC_ENDPOINT跨多个Amazon区域和账户

如果您在多个Amazon区域和多个Amazon帐户,您可以使用以下示例脚本进行修改,使用VPC_ENDPOINT终端节点类型。此示例脚本使用 Amazon EC2DescribeRegions和 Transfer FamilyListServersAPI 调用来获取所有服务器的服务器 ID 和区域的列表VPC_ENDPOINT. 如果你有很多Amazon账户,如果您使用会话配置文件向身份提供商进行身份验证,则可以使用具有只读审计员访问权限的 IAM 角色遍历您的账户。

  1. 下面是一个简单的示例。

    import boto3 profile = input("Enter the name of the Amazon account you'll be working in: ") session = boto3.Session(profile_name=profile) ec2 = session.client("ec2") regions = ec2.describe_regions() for region in regions['Regions']: region_name = region['RegionName'] if region_name=='ap-northeast-3': #https://github.com/boto/boto3/issues/1943 continue transfer = session.client("transfer", region_name=region_name) servers = transfer.list_servers() for server in servers['Servers']: if server['EndpointType']=='VPC_ENDPOINT': print(server['ServerId'], region_name)
  2. 获得要更新的服务器列表后,可以使用以下各节中介绍的方法之一更新EndpointTypeVPC.

更新服务器端点类型使用Amazon Web Services Management Console

  1. 打开Amazon Transfer Family控制台位于https://console.aws.amazon.com/transfer/.

  2. 在导航窗格中,选择 Servers (服务器)

  3. 选中您要更改终端节点类型的服务器的复选框。

    重要

    您必须先停止服务器,然后才能更改其终端节点。

  4. 对于 Actions (操作),选择 Stop (停止)

  5. 在随后显示的确认对话框中,选择停止以确认您要停止服务器。

    注意

    在继续下一步之前,请等待状态的服务器更改为离线; 这可能需要几分钟时间。您可能必须选择刷新服务器页面以查看状态更改。

  6. 一旦状态为离线,选择要显示服务器详细信息页面的服务器。

  7. 端点详细信息选择编辑.

  8. 选择托管的 VPC(对于 )终端节点类型.

  9. 选择 Save

  10. 适用于操作中,选择启动并等待服务器的状态变为在线; 这可能需要几分钟时间。

使用更新服务器端点类型Amazon CloudFormation

本节说明如何将Amazon CloudFormation更新服务器的EndpointTypeVPC. 使用此过程可用于已部署的 Transfer Family 服务器Amazon CloudFormation. 在此示例中,原始Amazon CloudFormation模板用于部署 Trante (Transfer Family 列) 服务器如下所示:

AmazonTemplateFormatVersion: '2010-09-09' Description: 'Create Amazon Transfer Server with VPC_ENDPOINT endpoint type' Parameters: SecurityGroupId: Type: Amazon::EC2::SecurityGroup::Id SubnetIds: Type: List<Amazon::EC2::Subnet::Id> VpcId: Type: Amazon::EC2::VPC::Id Resources: TransferServer: Type: Amazon::Transfer::Server Properties: Domain: S3 EndpointDetails: VpcEndpointId: !Ref VPCEndpoint EndpointType: VPC_ENDPOINT IdentityProviderType: SERVICE_MANAGED Protocols: - SFTP VPCEndpoint: Type: Amazon::EC2::VPCEndpoint Properties: ServiceName: com.amazonaws.us-east-1.transfer.server SecurityGroupIds: - !Ref SecurityGroupId SubnetIds: - !Select [0, !Ref SubnetIds] - !Select [1, !Ref SubnetIds] - !Select [2, !Ref SubnetIds] VpcEndpointType: Interface VpcId: !Ref VpcId

此模板将进行以下更改:

  • 这些区域有:EndpointType已更改为VPC.

  • 这些区域有:AWS::EC2::VPCEndpoint资源被删除。

  • 这些区域有:SecurityGroupIdSubnetIds, 和VpcId移至EndpointDetails的 部分AWS::Transfer::Server资源,

  • 这些区域有:VpcEndpointId属性EndpointDetails被删除。

更新后的模板应如下所示:

AmazonTemplateFormatVersion: '2010-09-09' Description: 'Create Amazon Transfer Server with VPC endpoint type' Parameters: SecurityGroupId: Type: Amazon::EC2::SecurityGroup::Id SubnetIds: Type: List<Amazon::EC2::Subnet::Id> VpcId: Type: Amazon::EC2::VPC::Id Resources: TransferServer: Type: Amazon::Transfer::Server Properties: Domain: S3 EndpointDetails: SecurityGroupIds: - !Ref SecurityGroupId SubnetIds: - !Select [0, !Ref SubnetIds] - !Select [1, !Ref SubnetIds] - !Select [2, !Ref SubnetIds] VpcId: !Ref VpcId EndpointType: VPC IdentityProviderType: SERVICE_MANAGED Protocols: - SFTP

要更新 Transfer Family 用Amazon CloudFormation

  1. 使用以下步骤停止要更新的服务器。

    1. 打开Amazon Transfer Family控制台位于https://console.aws.amazon.com/transfer/.

    2. 在导航窗格中,选择 Servers (服务器)

    3. 选中您要更改终端节点类型的服务器的复选框。

      重要

      您必须先停止服务器,然后才能更改其终端节点。

    4. 对于 Actions (操作),选择 Stop (停止)

    5. 在随后显示的确认对话框中,选择停止以确认您要停止服务器。

      注意

      在继续下一步之前,请等待状态的服务器更改为离线; 这可能需要几分钟时间。您可能必须选择刷新服务器页面以查看状态更改。

  2. 更新 CloudFormation 堆栈

    1. 打开 Amazon CloudFormation 控制台,地址:https://console.aws.amazon.com/cloudformation

    2. 选择用于创建 Trante (Transfer Family) 服务器的堆栈。

    3. 选择 Update

    4. 选择替换当前模板

    5. 上传新模板。CloudFormation 更改集可帮助您在实施之前了解模板更改会如何影响正在运行的资源。在此示例中,将修改传输服务器资源,并删除 VPcendPoint 资源。VPC 终端节点类型服务器代表您创建 VPC 终端节点,替换原始VPCEndpoint资源。

      上传新模板后,更改集将与下面类似:

    6. 更新堆栈。

  3. 堆栈更新完成后,导航到 Transfer Family 管理控制台https://console.aws.amazon.com/transfer/.

  4. 重启服务器。选择您在中更新的服务器Amazon CloudFormation,然后选择启动来自 的操作菜单。

使用 API 更新服务器 EndpointType

您可以使用描述服务器 Amazon CLI命令或UpdateServerAPI 命令。以下示例脚本停止 Transfer Family 服务器,更新 EndpointType,删除 VPC_ENDINTED,然后启动服务器。

import boto3 import time profile = input("Enter the name of the Amazon account you'll be working in: ") region_name = input("Enter the Amazon Region you're working in: ") server_id = input("Enter the Amazon Transfer Server Id: ") session = boto3.Session(profile_name=profile) ec2 = session.client("ec2", region_name=region_name) transfer = session.client("transfer", region_name=region_name) group_ids=[] transfer_description = transfer.describe_server(ServerId=server_id) if transfer_description['Server']['EndpointType']=='VPC_ENDPOINT': transfer_vpc_endpoint = transfer_description['Server']['EndpointDetails']['VpcEndpointId'] transfer_vpc_endpoint_descriptions = ec2.describe_vpc_endpoints(VpcEndpointIds=[transfer_vpc_endpoint]) for transfer_vpc_endpoint_description in transfer_vpc_endpoint_descriptions['VpcEndpoints']: subnet_ids=transfer_vpc_endpoint_description['SubnetIds'] group_id_list=transfer_vpc_endpoint_description['Groups'] vpc_id=transfer_vpc_endpoint_description['VpcId'] for group_id in group_id_list: group_ids.append(group_id['GroupId']) if transfer_description['Server']['State']=='ONLINE': transfer_stop = transfer.stop_server(ServerId=server_id) print(transfer_stop) time.sleep(300) #safe transfer_update = transfer.update_server(ServerId=server_id,EndpointType='VPC',EndpointDetails={'SecurityGroupIds':group_ids,'SubnetIds':subnet_ids,'VpcId':vpc_id}) print(transfer_update) time.sleep(10) transfer_start = transfer.start_server(ServerId=server_id) print(transfer_start) delete_vpc_endpoint = ec2.delete_vpc_endpoints(VpcEndpointIds=[transfer_vpc_endpoint])