こんにちは。SCSKのふくちーぬです。
AWS Systems Managerのフリートマネージャーを利用して、Windowsサーバにブラウザベースでのリモート接続している方多いかと思います。今回は閉域網環境において、ローカル-サーバ間においてファイル共有するためにAWS Tools for Windows PowerShellを用いる方法をご紹介します。
AWS Tools for Windows PowerShellとは
AWS Tools for Windows PowerShellは、PowerShell向けのサービスです。PowerShellからAWSサービスを利用するためのコマンドツール群です。
Winsows Server 2022においては、”4.1.628″のバージョンがインストール済みとなります。
アーキテクチャー
- Systems Managerの管理下にするために、EC2はマネージドインスタンスとする。また、OSはWindows Server 2022を利用します。
- 運用者は、フリートマネージャーを利用してEC2に接続します。
- 運用者は、マネジメントコンソールやAPIを利用してS3にアクセスしファイルのやり取りをします。
- プライベートサブネット内のEC2は、VPCエンドポイント経由でS3にアクセスしファイルのやり取りをします。
完成したCloudFormationテンプレート
以下のテンプレートをデプロイしてください。
AWSTemplateFormatVersion: 2010-09-09 Description: CFN template EC2 Parameters: ResourceName: Type: String AMIId: Type: String Resources: # ------------------------------------------------------------# # S3 # ------------------------------------------------------------# S3BucketFor: Type: AWS::S3::Bucket DeletionPolicy: Delete Properties: BucketName: !Sub ${ResourceName}-s3-bucket AccessControl: Private PublicAccessBlockConfiguration: BlockPublicAcls: true BlockPublicPolicy: true IgnorePublicAcls: true RestrictPublicBuckets: true # ------------------------------------------------------------# # VPC # ------------------------------------------------------------# VPC: Type: AWS::EC2::VPC Properties: CidrBlock: 10.0.0.0/16 EnableDnsSupport: true EnableDnsHostnames: true Tags: - Key: Name Value: !Sub ${ResourceName}-VPC # ------------------------------------------------------------# # Private Subnet # ------------------------------------------------------------# PrivateSubnet1a: Type: AWS::EC2::Subnet Properties: VpcId: !Ref VPC CidrBlock: 10.0.1.0/24 AvailabilityZone: ap-northeast-1a MapPublicIpOnLaunch: false Tags: - Key: Name Value: !Sub ${ResourceName}-subnet-Private-1a PrivateSubnet1c: Type: AWS::EC2::Subnet Properties: VpcId: !Ref VPC CidrBlock: 10.0.11.0/24 AvailabilityZone: ap-northeast-1c MapPublicIpOnLaunch: false Tags: - Key: Name Value: !Sub ${ResourceName}-subnet-Private-1c # ------------------------------------------------------------# # Route Table and Routes # ------------------------------------------------------------# PrivateRouteTable: Type: AWS::EC2::RouteTable Properties: VpcId: !Ref VPC Tags: - Key: Name Value: PrivateRouteTable PrivateSubnet1aAssociation: Type: AWS::EC2::SubnetRouteTableAssociation Properties: SubnetId: !Ref PrivateSubnet1a RouteTableId: !Ref PrivateRouteTable PrivateSubnet1cAssociation: Type: AWS::EC2::SubnetRouteTableAssociation Properties: SubnetId: !Ref PrivateSubnet1c RouteTableId: !Ref PrivateRouteTable # ------------------------------------------------------------# # VPC Endpoint # ------------------------------------------------------------# ssmEndpoint: Type: AWS::EC2::VPCEndpoint Properties: ServiceName: !Join - '' - - com.amazonaws. - !Ref 'AWS::Region' - .ssm SubnetIds: - !Ref PrivateSubnet1a - !Ref PrivateSubnet1c VpcId: !Ref VPC VpcEndpointType: Interface SecurityGroupIds: - !Ref VPCeSecurityGroup PrivateDnsEnabled: true ec2messagesEndpoint: Type: AWS::EC2::VPCEndpoint Properties: ServiceName: !Join - '' - - com.amazonaws. - !Ref 'AWS::Region' - .ec2messages SubnetIds: - !Ref PrivateSubnet1a - !Ref PrivateSubnet1c VpcId: !Ref VPC VpcEndpointType: Interface SecurityGroupIds: - !Ref VPCeSecurityGroup PrivateDnsEnabled: true ssmmessagesEndpoint: Type: AWS::EC2::VPCEndpoint Properties: ServiceName: !Join - '' - - com.amazonaws. - !Ref 'AWS::Region' - .ssmmessages SubnetIds: - !Ref PrivateSubnet1a - !Ref PrivateSubnet1c VpcId: !Ref VPC VpcEndpointType: Interface SecurityGroupIds: - !Ref VPCeSecurityGroup PrivateDnsEnabled: true S3VpcEndpoint: Type: AWS::EC2::VPCEndpoint Properties: ServiceName: !Join - '' - - com.amazonaws. - !Ref 'AWS::Region' - .s3 VpcId: !Ref VPC VpcEndpointType: Gateway RouteTableIds: - !Ref PrivateRouteTable # ------------------------------------------------------------# # Security Group # ------------------------------------------------------------# SecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: For EC2 VpcId: !Ref VPC VPCeSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: VpcId: !Ref VPC GroupDescription: For VPCEndpoint SecurityGroupIngress: - SourceSecurityGroupId: !Ref SecurityGroup IpProtocol: tcp FromPort: 443 ToPort: 443 # ------------------------------------------------------------# # IAM Role and Instance Profile # ------------------------------------------------------------# SSMRole: Type: AWS::IAM::Role Properties: RoleName: !Sub ${ResourceName}-ec2-role AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: ec2.amazonaws.com Action: sts:AssumeRole Path: / ManagedPolicyArns: - arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore - arn:aws:iam::aws:policy/AmazonS3FullAccess InstanceProfile: Type: AWS::IAM::InstanceProfile Properties: Roles: - !Ref SSMRole # ------------------------------------------------------------# # EC2 Key Pair # ------------------------------------------------------------# KeyPair: Type: AWS::EC2::KeyPair Properties: KeyName: !Sub ${ResourceName}-key # ------------------------------------------------------------# # EC2 Instance # ------------------------------------------------------------# EC2Instance: Type: AWS::EC2::Instance Properties: InstanceType: t2.micro ImageId: !Ref AMIId SubnetId: !Ref PrivateSubnet1a IamInstanceProfile: !Ref InstanceProfile SecurityGroupIds: - !Ref SecurityGroup KeyName: !Ref KeyPair Tags: - Key: Name Value: !Sub ${ResourceName}-ec2
AWS Tools for Windows PowerShellを利用したローカル⇒サーバへのファイル共有
まず、ローカルからサーバ(EC2)へのファイル転送手順です。
S3へのアップロード
まずはローカルのファイルをS3にアップロードします。
今回は、AWS-CLIの導入を対象とします。
ローカルPC上でWindows (64 ビット) 用のインストーラをダウンロードします。
対象ファイルをS3に格納しておきます。
キーペアの値を確認し、EC2に接続
下記記事を参考に、同様の手順でEC2にフリートマネージャー経由で接続します。
Read-S3Objectコマンドの実行
PowerShellを開き、コピー&ペーストを使って下記コマンドを実行します。
Read-S3Object -BucketName <Bucket Name> -Key <Object Key> -File <Local File Path>
今回の場合は、以下のようなコマンドとなります。
Read-S3Object -BucketName fukuchi-s3-bucket -Key AWSCLIV2.msi -File C:\Users\Administrator\Downloads\AWSCLIV2.msi
Read-S3Object-BucketName <String>-Key <String>-File <String>-Version <String>-ModifiedSinceDate <DateTime>-UnmodifiedSinceDate <DateTime>-UtcModifiedSinceDate <DateTime>-UtcUnmodifiedSinceDate <DateTime>-ServerSideEncryptionCustomerMethod <ServerSideEncryptionCustomerMethod>-ServerSideEncryptionCustomerProvidedKey <String>-ServerSideEncryptionCustomerProvidedKeyMD5 <String>-ChecksumMode <ChecksumMode>-ClientConfig <AmazonS3Config>-UseAccelerateEndpoint <SwitchParameter>-UseDualstackEndpoint <SwitchParameter>-ForcePathStyleAddressing <Boolean>
サーバ上にダウンロードできれば下記画面が表示されます。
AWS-CLIの導入
インストーラーをダブルクリックし、画面の指示に従って進めます。
“Next”を押下します。
チェックボックスにチェックを付与して、”Next”を押下します。
“Next”を押下します。
“Install”を押下します。
無事にインストールが完了しました。”Finish”を押下すると、画面が閉じます。
コマンドプロンプトを開き、下記のコマンドを実行します。
aws --version
AWS-CLIをインストールすることができました。
AWS Tools for Windows PowerShellを利用したサーバ⇒ローカルへのファイル共有
今度は、サーバ(EC2)からローカルへのファイル転送手順です。
ファイルの作成
サーバ上の任意の場所でファイルを作成してください。
今回は、notepadを利用して”test.txt”ファイルを作成しておきました。
Write-S3Objectコマンドの実行
PowerShellを開き、コピー&ペーストを使って下記コマンドを実行します。
Write-S3Object -BucketName <Bucket Name> -Key <Object Key> -File <Local File Path>
今回の場合は、以下のようなコマンドとなります。
Write-S3Object -BucketName fukuchi-s3-bucket -Key "test.txt" -File "C:\Users\Administrator\Documents\test.txt"
Write-S3Object-BucketName <String>-Key <String>-File <String>-CannedACLName <S3CannedACL>-PublicReadOnly <SwitchParameter>-PublicReadWrite <SwitchParameter>-ContentType <String>-StorageClass <S3StorageClass>-StandardStorage <SwitchParameter>-ReducedRedundancyStorage <SwitchParameter>-ServerSideEncryption <ServerSideEncryptionMethod>-ServerSideEncryptionKeyManagementServiceKeyId <String>-ServerSideEncryptionCustomerMethod <ServerSideEncryptionCustomerMethod>-ServerSideEncryptionCustomerProvidedKey <String>-ServerSideEncryptionCustomerProvidedKeyMD5 <String>-Metadata <Hashtable>-HeaderCollection <Hashtable>-TagSet <Tag[]>-ChecksumAlgorithm <ChecksumAlgorithm>-ConcurrentServiceRequest <Int32>-CalculateContentMD5Header <Boolean>-PartSize <FileSize>-IfNoneMatch <String>-Force <SwitchParameter>-ClientConfig <AmazonS3Config>-UseAccelerateEndpoint <SwitchParameter>-UseDualstackEndpoint <SwitchParameter>-ForcePathStyleAddressing <Boolean>
S3上にアップロードできれば下記画面が表示されます。
S3コンソールを確認し、該当のファイルが格納されていますね。その後は、マネジメントコンソール等を利用してS3内のファイルをローカルにダウンロードすればOKです。
まとめ
- 閉域網環境のEC2(Windows)でも、AWS Tools for Windows PowerShellがインストール済みのため、各種AWSのAPIを利用することができます。
最後に
いかがだったでしょうか。
AWS Tools for Windows PowerShellを利用すれば、閉域網環境でも容易にファイル共有ができました。普段はAWS-CLIを使う機会が多いですが、これを機に積極的に利用してみようと思います。
本記事が皆様のお役にたてば幸いです。
ではサウナラ~🔥