AWS Transfer Family サーバーエンドポイントタイプを VPC_ENDPOINT から VPC に更新する - AWS Transfer Family

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS Transfer Family サーバーエンドポイントタイプを VPC_ENDPOINT から VPC に更新する

AWS Management Console、、または Transfer Family API を使用して AWS CloudFormation、サーバーの を EndpointTypeから VPC_ENDPOINTに更新できますVPC。以下のセクションでは、これらの各メソッドを使用してサーバーエンドポイントタイプを更新するための詳細な手順と例について説明します。複数の AWS リージョンと複数の AWS アカウントにサーバーがある場合は、次のセクションで提供されるスクリプト例を変更して使用して、更新する必要があるVPC_ENDPOINTタイプを使用するサーバーを識別できます。

VPC_ENDPOINT エンドポイントタイプを使用したサーバーの識別

AWS Management Consoleを使用することで、どのサーバーで VPC_ENDPOINT を使用しているかを特定できます。

VPC_ENDPOINT エンドポイントタイプを使用するサーバーをコンソールで識別するには
  1. https://console.aws.amazon.com/transfer/ で AWS Transfer Family コンソールを開きます。

  2. ナビゲーションペインの [Servers] (サーバー) で、そのリージョンのアカウント内のサーバーの一覧を表示します。

  3. [Endpoint type] (エンドポイントタイプ) を使用してサーバーのリストを並べ替えると、VPC_ENDPOINT を使用してすべてのサーバーを見ることができます。

複数の AWS リージョンとアカウントVPC_ENDPOINTで を使用しているサーバーを特定するには

複数の AWS リージョンと複数の AWS アカウントにサーバーがある場合は、次のスクリプト例を変更して、VPC_ENDPOINTエンドポイントタイプを使用してサーバーを識別できます。サンプルスクリプトは、Amazon EC2 DescribeRegionsと Transfer Family ListServers API コールを使用して、 を使用するすべてのサーバーのサーバー IDsとリージョンのリストを取得しますVPC_ENDPOINT。 AWS アカウントが多数ある場合は、ID プロバイダーへのセッションプロファイルを使用して認証する場合、読み取り専用の監査アクセス権を持つ IAM ロールを使用してアカウントをループスルーできます。

  1. 以下に単純な例を示します。

    import boto3 profile = input("Enter the name of the AWS 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 に更新することができます。

を使用したサーバーエンドポイントタイプの更新 AWS Management Console

  1. https://console.aws.amazon.com/transfer/ で AWS Transfer Family コンソールを開きます。

  2. ナビゲーションペインで [Servers] (サーバー) を選択します。

  3. エンドポイントタイプを変更したいサーバーのチェックボックスをオンにします。

    重要

    エンドポイントを変更するには、その前にサーバーを停止する必要があります。

  4. [Actions] (アクション) で [Stop] (停止) を選択します。

  5. 表示される確認ダイアログボックスで [Stop] (停止) を選択して、サーバーを停止したいことを確認します。

    注記

    次のステップに進む前に、サーバーの [Status] (ステータス) が [Offline] (オフライン) に変わるのを待ちますが、これには数分かかる場合があります。ステータスの変更を見るには、[Servers] (サーバー) ページで [Refresh] (更新) の選択が必要になる場合があります。

  6. ステータスが「オフライン」に変わったら、サーバーを選択してサーバーの詳細ページを表示します。

  7. エンドポイントの詳細」セクションで、「編集」を選択します。

  8. [Edit endpoint type] (エンドポイントタイプ) で [VPC hosted] (VPC ホステッド) を選択します。

  9. [Save] (保存) を選択します。

  10. [Actions] (アクション) で [Start] (開始) を選択してサーバーのステータスが [Online] (オンライン) になるのを待ちますが、これには数分かかる場合があります。

を使用したサーバーエンドポイントタイプの更新 AWS CloudFormation

このセクションでは、 AWS CloudFormation を使用してサーバーの を EndpointTypeに更新する方法について説明しますVPC。を使用してデプロイした Transfer Family サーバーでは、この手順を使用します AWS CloudFormation。この例では、Transfer Family サーバーのデプロイに使用される元の AWS CloudFormation テンプレートを次のように示しています。

AWS TemplateFormatVersion: '2010-09-09' Description: 'Create AWS Transfer Server with VPC_ENDPOINT endpoint type' Parameters: SecurityGroupId: Type: AWS::EC2::SecurityGroup::Id SubnetIds: Type: List<AWS::EC2::Subnet::Id> VpcId: Type: AWS::EC2::VPC::Id Resources: TransferServer: Type: AWS::Transfer::Server Properties: Domain: S3 EndpointDetails: VpcEndpointId: !Ref VPCEndpoint EndpointType: VPC_ENDPOINT IdentityProviderType: SERVICE_MANAGED Protocols: - SFTP VPCEndpoint: Type: AWS::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

テンプレートは以下の変更によって更新されます。

  • EndpointTypeVPC に変更されました。

  • AWS::EC2::VPCEndpoint リソースは削除されます。

  • SecurityGroupIdSubnetIds、および VpcIdAWS::Transfer::Server リソースの EndpointDetails セクションに移動しました。

  • EndpointDetailsVpcEndpointId プロパティは削除されました。

更新されたテンプレートは次のようになります。

AWS TemplateFormatVersion: '2010-09-09' Description: 'Create AWS Transfer Server with VPC endpoint type' Parameters: SecurityGroupId: Type: AWS::EC2::SecurityGroup::Id SubnetIds: Type: List<AWS::EC2::Subnet::Id> VpcId: Type: AWS::EC2::VPC::Id Resources: TransferServer: Type: AWS::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 サーバーのエンドポイントタイプを更新するには AWS CloudFormation
  1. 次の手順に従って、更新したいサーバーを停止します。

    1. https://console.aws.amazon.com/transfer/ で AWS Transfer Family コンソールを開きます。

    2. ナビゲーションペインで [Servers] (サーバー) を選択します。

    3. エンドポイントタイプを変更したいサーバーのチェックボックスをオンにします。

      重要

      エンドポイントを変更するには、その前にサーバーを停止する必要があります。

    4. [Actions] (アクション) で [Stop] (停止) を選択します。

    5. 表示される確認ダイアログボックスで [Stop] (停止) を選択して、サーバーを停止したいことを確認します。

      注記

      次のステップに進む前に、サーバーの [Status] (ステータス) が [Offline] (オフライン) に変わるのを待ちますが、これには数分かかる場合があります。ステータスの変更を見るには、[Servers] (サーバー) ページで [Refresh] (更新) の選択が必要になる場合があります。

  2. CloudFormation スタックを更新する

    1. https://console.aws.amazon.com/cloudformation で AWS CloudFormation コンソールを開きます。

    2. Transfer Family サーバーの作成に使用するスタックを選択します。

    3. [Update] (更新) を選択します。

    4. [Replace current template] (現在のテンプレートを置換) を選択します。

    5. 新しいテンプレートをアップロードします。 CloudFormation 変更セットは、テンプレートの変更が実行中のリソースにどのように影響するかを理解してから実装するのに役立ちます。この例では、Transfer サーバーリソースが変更され、vpcendPoint リソースが削除されます。VPC エンドポイントタイプサーバーはユーザーに代わって VPC エンドポイントを作成し、元の VPCEndpoint リソースを置き換えます。

      新しいテンプレートをアップロードすると、変更セットは以下のようになります。

      現在の AWS CloudFormation テンプレートを置き換えるための変更セットのプレビューページを表示します。
    6. スタックを更新します。

  3. スタックの更新が完了したら、Transfer Family 管理コンソール (https://console.aws.amazon.com/transfer/) に移動します。

  4. サーバーを再起動します。で更新したサーバーを選択し AWS CloudFormation、アクションメニューから開始を選択します。

API EndpointType を使用したサーバーの更新

describe-server AWS CLI コマンドまたは UpdateServer API コマンドを使用できます。次のサンプルスクリプトは、Transfer Family サーバーを停止し、 を更新し EndpointType、VPC_ENDPOINT を削除して、サーバーを起動します。

import boto3 import time profile = input("Enter the name of the AWS account you'll be working in: ") region_name = input("Enter the AWS Region you're working in: ") server_id = input("Enter the AWS 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])