Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Sambaってなんですか?〜令和でもLinuxとWindowsでファイル共有はするよ〜

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

 Sambaってなんですか?〜令和でもLinuxとWindowsでファイル共有はするよ〜

Avatar for Satoshi Kaneyasu

Satoshi Kaneyasu

July 17, 2023
Tweet

More Decks by Satoshi Kaneyasu

Other Decks in Programming

Transcript

  1. ⾃⼰紹介 • 兼安 聡 • 株式会社サーバーワークス(2023.05〜) • WEB系エンジニアからAWSを学んで なんでもエンジニアへ。 •

    CSゲーム、サックス、筋トレが趣味。 • 始めてPCに触れたのは中学で機種はFM-7。 (中学の理科の先⽣のお下がり) FM-7は当時でも相当古い機種ですよ。 1年はFM-7で3年はX68でした。格差︕
  2. Sambaでできること • ファイル共有︓Linux/UNIXとWindows間でファイルを共有します。 • プリンタ共有︓WindowsクライアントからLinux/UNIXサーバーに接続されたプリ ンタを使⽤します。 • ネットワーク認証︓Windowsドメインコントローラとして動作し、ネットワーク 認証を提供します。 Sambaは、Linux/UNIXとWindows間でファイル共有やプリンタ共有を実現する

    ソフトウェアです。 Sambaは、MicrosoftのWindowsネットワーキングプロトコルである Server Message Block (SMB) / Common Internet File System (CIFS) を実装しています。 重要! 開発⽤の仮想マシンでWindowsホストとゲストOSでファイル 共有する時もSambaを使うことがあります。
  3. AWSにおけるSambaの利⽤例 1. AWSのファイルサーバーサービスであるAmazon EFSをLinuxにマ ウントしてSambaでWindowsPCとファイル共有することができま す。 2. 同じくファイルサーバーサービスであるAmazon FSx for

    Windowsは、SMBプロトコルをネイティブサポートしています。 3. LambdaからSMBプロトコルを⽤いてWindowsの共有フォルダに あるファイルを取得、S3にアップすることができます。 こちら、コードを次頁より載せてます。
  4. LAMBDAでSMBプロトコルを使⽤してみる ①WINDOWSサーバーの準備 • EC2でWindowsサーバーを起動する。 • Administratorのパスワードを控える。 • PowerShellで共有フォルダの設定を⾏う。 • 適当なファイルを作る。

    • TCPの445(SMB)の通信を許可。 SMBプロトコルのポート番号が445であること。 それを通信許可するところがポイントです。 New-Item -Path "C:¥" -Name "SharedFolder" -ItemType "directory" New-SmbShare -Name "SharedFolder" -Path "C:¥SharedFolder" -FullAccess "Everyone" PowerShell
  5. LAMBDAでSMBプロトコルを使⽤してみる ②LAMBDAの⽤意 import smbclient import boto3 def lambda_handler(event, context): (略)

    # 共有フォルダからファイルを取得 file_content = None with smbclient.open_file(f"//{smb_server}/{smb_share}/{smb_file_path}", username=smb_username, password=smb_password, mode='rb') as smb_file: # バイナリモードで読み込む file_content = smb_file.read() # S3にファイルをアップロード s3_client = boto3.client('s3') s3_client.put_object(Body=file_content, Bucket=s3_bucket, Key=s3_key) Python