LoginSignup
4
0

Amazon FSx for NetApp ONTAPのS3マルチプロトコルで実現する静的コンテンツホスティング 第1回

Last updated at Posted at 2023-10-03

はじめに

  • 2023年6月末頃からAmazon FSx for NetApp ONTAP(以下、FSxN)のバージョン9.12.1が順次ロールアウトされ、2023年7月初旬には東京リージョンでも利用できるようになりました。
  • ONTAP 9.12.1では、NASとして構成されたボリュームに対してS3プロトコルで接続するS3マルチプロトコルを使用し、異なるプロトコルで同じデータを扱うこと(データの二重性:Data Duality)が可能です。
  • 個人的に可能性を感じる機能であり、ネットアップが想定する主なユースケースとしては、機械学習や分析のデータパイプラインなどです。
  • しかし、S3のユースケースは他にもあります。
  • 本記事では、ユースケースの一つである静的コンテンツホスティングをFSxN上のONTAP S3で実現し、Data Dualityによって提供できる価値が無いか考察します。

構成

  • AWS上に構築する検証環境の構成は以下の通りです。
    image.png

構築手順

Virtual Private Cloud(VPC)の構築

  • PublicとPrivateのサブネットを持つVPCを作成します。
  • 手順については、以下の折りたたみを開いて確認ください。
VPCの作成手順
  1. AWSのマネジメントコンソールを開き、VPCダッシュボードを開く
    image.png

  2. 「VPCを作成」をクリック
    image.png

  3. 以下のように項目を選択・入力し、「VPCを作成」をクリック

    • 作成するリソース:VPCなど
    • 名前タグの自動生成
      • 自動生成
        • ✓ontaps3test
      • IPv4CIDRブロック:10.100.0.0/16
      • IPv6CIDRブロック:IPv6CIDRブロックなし
    • テナンシー:デフォルト
    • アベイラビリティゾーンの数:1
    • パブリックサブネットの数:1
    • プライベートサブネットの数:1
    • NATゲートウェイ($):なし
    • VPCエンドポイント:なし
    • DNSオプション
      • ✓DNSホスト名を有効化
      • ✓DNS解決を有効化

    image.png

  4. 作成されたVPCを確認する
    image.png

Elastic Compute Cloud(EC2)の構築

  • FSxNの設定や動作確認に使用するJumphostとしてEC2をPublicサブネットにデプロイします。
  • 手順については、以下の折りたたみを開いて確認ください。
EC2の作成手順
  1. AWSのマネジメントコンソールを開き、EC2ダッシュボードを開く
    image.png
    ※キーペアは作成済みのため、別途作成ください。

  2. 「インスタンスを起動」をクリック
    image.png

  3. 以下のように項目を選択・入力し、「インスタンスを起動」をクリック

    • 名前とタグ
      • 名前:jumphost-ec2
    • アプリケーションおよびOSイメージ(Amazonマシンイメージ)
      • クイックスタート
        • Amazon Linux
      • Amazonマシンイメージ(AMI)
        • Amazon Linux 2023 AMI
      • アーキテクチャ:64bit(x86)
    • インスタンスタイプ:t2.micro
    • キーペア:(作成したものを選択)
    • ネットワーク設定
      • ネットワーク:ontaps3test-vpc
      • サブネット:ontaps3test-subnet-public1-ap-northeast-1a
      • パブリックIPの自動割り当て:有効
      • ファイアウォール(セキュリティグループ)
        • 既存のセキュリティグループを選択
        • 共通のセキュリティグループ:default
    • ストレージ設定
      • 1x8GiB gp3 ルートボリューム
  4. 作成されたEC2を確認する
    image.png

  5. EC2に接続する

    • 作成したEC2インスタンスのパブリックIPアドレスを確認しコピーしておく
    • 「セキュリティグループ」を選択し、defaultセキュリティグループを開く
      image.png
    • 「インバウンドのルールを編集」をクリック
      image.png
    • 「ルールを追加」をクリックし、カスタムTCPタイプで22番ポートへのマイIPからの接続を許可する
      image.png
    • 「ルールを保存」をクリック
    • ターミナルを開き、コピーしたパブリックIPアドレスに対してsshによる接続が可能か確認する
    koheii@koheii-mac-1 ~ % ssh -oPubkeyAcceptedAlgorithms=ssh-ed25519 -i ./.ssh/test-keypair.pem 13.113.54.39 -l ec2-user
       ,     #_
       ~\_  ####_        Amazon Linux 2023
      ~~  \_#####\
      ~~     \###|
      ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
       ~~       V~' '->
        ~~~         /
          ~~._.   _/
             _/ _/
           _/m/'
    [ec2-user@ip-10-100-6-33 ~]$ 
    

Amazon FSx for NetApp ONTAPの構築

  • FSxNをシングル構成でPrivateサブネットにデプロイします。
  • デプロイ後、S3マルチプロトコルの設定を行います。

Amazon FSx for NetApp ONTAPのデプロイ

  1. AWSのマネジメントコンソールを開き、Amazon FSxを開く
    image.png

  2. 「ファイルシステムを作成」をクリック
    image.png

  3. 以下のように項目を選択・入力し、「インスタンスを起動」をクリック

    • ファイルシステムのオプション:Amazon FSx for NetApp ONTAP
    • 作成方法:スタンダード作成
    • ファイルシステムの詳細
      • ファイルシステム名:fsxn(任意)
      • デプロイタイプ:シングルAZ
      • SSDストレージ容量:1024
      • プロビジョンドSSD IOPS:自動
      • スループットキャパシティ:推奨されるスループット容量
    • ネットワークとセキュリティ
      • Virtual Private Cloud(VPC):ontaps3test-vpc
      • VPCセキュリティグループ:sg-xxxxxxxxxxxxxxxxx(default)]
      • サブネット:ontaps3test-subnet-private1-ap-northeast-1a
    • 暗号化
      • 暗号化キー:aws/fsx(デフォルト)
      • ファイルシステム管理パスワード:パスワードを指定(任意のパスワードを入力)
    • デフォルトのストレージ仮想マシン設定
      • ストレージ仮想マシン名:fsx
      • SVM管理パスワード:パスワードを指定しない
      • ボリュームのセキュリティスタイル:Unix(Linux)
      • Active Directory:Active Directoryに参加しない
    • デフォルトのボリューム
      • ボリューム名:vol1
      • ボリュームサイズ:1048576
      • ボリュームタイプ:Read-Write(RW)
      • ジャンクションパス:/vol
      • ストレージ効率:無効
      • スナップショットポリシー:None
    • デフォルトのボリュームストレージの階層化
      • 容量プールの階層化ポリシー:なし
    • 詳細
      • SnapLock設定:無効
    • バックアップとメンテナンス
      • 毎日の自動バックアップ:無効
      • 週次メンテナンスウィンドウ:プリファレンスがありません
  4. 設定を確認し、「ファイルシステムを作成」をクリック
    image.png

  5. デプロイ完了後、ファイルシステムを確認し、管理エンドポイントのDNS名をコピーしておく
    image.png

  6. 事前に作成したJumphost(Linux)からログインしバージョンを確認する(2023/09/06時点)

    koheii@koheii-mac-1 ~ % ssh  -oPubkeyAcceptedAlgorithms=ssh-ed25519  -i ./.ssh/test-keypair.pem 13.113.54.39 -l ec2-user
       ,     #_
       ~\_  ####_        Amazon Linux 2023
      ~~  \_#####\
      ~~     \###|
      ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
       ~~       V~' '->
        ~~~         /
          ~~._.   _/
             _/ _/
           _/m/'
    Last login: Wed Sep  6 06:31:17 2023 from 202.3.127.4
    [ec2-user@ip-10-100-6-33 ~]$ ssh management.fs-0e0764462acb12637.fsx.ap-northeast-1.amazonaws.com -l fsxadmin
    The authenticity of host 'management.fs-0e0764462acb12637.fsx.ap-northeast-1.amazonaws.com (10.100.128.182)' can't be established.
    ED25519 key fingerprint is SHA256:omODGUDOclyu0I/GxlKW3JeSA0dt3Qtyj7T3XFmz7E8.
    This key is not known by any other names
    Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
    Warning: Permanently added 'management.fs-0e0764462acb12637.fsx.ap-northeast-1.amazonaws.com' (ED25519) to the list of known hosts.
    (fsxadmin@management.fs-0e0764462acb12637.fsx.ap-northeast-1.amazonaws.com) Password:
    
    This is your first recorded login.
    FsxId0e0764462acb12637::> version
    NetApp Release 9.12.1P6: Fri Aug 04 00:26:53 UTC 2023
    
    

S3マルチプロトコル設定

  1. 先ほど同様、Jumphost(Linux)からFSxN管理コンソールへログイン

    koheii@koheii-mac-1 ~ % ssh  -oPubkeyAcceptedAlgorithms=ssh-ed25519  -i ./.ssh/test-keypair.pem 13.113.54.39 -l ec2-user
       ,     #_
       ~\_  ####_        Amazon Linux 2023
      ~~  \_#####\
      ~~     \###|
      ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
       ~~       V~' '->
        ~~~         /
          ~~._.   _/
             _/ _/
           _/m/'
    Last login: Wed Sep  6 08:35:35 2023 from 202.3.127.4
    [ec2-user@ip-10-100-6-33 ~]$ ssh management.fs-0e0764462acb12637.fsx.ap-northeast-1.amazonaws.com -l fsxadmin
    (fsxadmin@management.fs-0e0764462acb12637.fsx.ap-northeast-1.amazonaws.com) Password:
    
    Last login time: 9/6/2023 08:35:52
    FsxId0e0764462acb12637::> 
    
    
  2. S3サービスが有効になっていることを確認

    • 自動で作成されるSVM上で、S3サービスが有効になっていない場合は有効にする必要があります。
    • 手順については、以下の折りたたみを開いて確認ください。
    インターフェースの情報からS3サービスの状況を確認
    FsxId0e0764462acb12637::> network interface show  -instance 
    
                          Vserver Name: FsxId0e0764462acb12637
                Logical Interface Name: fsxadmin
                        Service Policy: default-management
    〜省略〜
    
                          Vserver Name: FsxId0e0764462acb12637
                Logical Interface Name: inter_1
                        Service Policy: default-intercluster
    〜省略〜
    
                          Vserver Name: FsxId0e0764462acb12637
                Logical Interface Name: inter_2
                        Service Policy: default-intercluster
    〜省略〜
    
                          Vserver Name: fsx
                Logical Interface Name: iscsi_1
                        Service Policy: default-data-blocks
    〜省略〜
    
                          Vserver Name: fsx
                Logical Interface Name: iscsi_2
                        Service Policy: default-data-blocks
    〜省略〜
    
                          Vserver Name: fsx
                Logical Interface Name: nfs_smb_management_1
                        Service Policy: default-data-files
                          Service List: data-core, data-nfs, data-cifs,
                                        management-ssh, management-https,
                                        data-s3-server, data-dns-server
                     (DEPRECATED)-Role: data
                         Data Protocol: nfs, cifs, s3
                       Network Address: 10.100.136.19
                               Netmask: 255.255.240.0
                   Bits in the Netmask: 20
                            Is VIP LIF: false
                           Subnet Name: -
                             Home Node: FsxId0e0764462acb12637-01
                             Home Port: e0e
                          Current Node: FsxId0e0764462acb12637-01
                          Current Port: e0e                                        
                    Operational Status: up
                       Extended Status: -
                               Is Home: true
                 Administrative Status: up
                       Failover Policy: system-defined
          (DEPRECATED)-Firewall Policy: data
                           Auto Revert: true
         Fully Qualified DNS Zone Name: none
               DNS Query Listen Enable: false
                   Failover Group Name: Fsx
                              FCP WWPN: -
                        Address family: ipv4
                               Comment: -
                        IPspace of LIF: Default
        Is Dynamic DNS Update Enabled?: true
    Probe-port for Cloud Load Balancer: -
                      Broadcast Domain: Fsx
                          Vserver Type: data
       Required RDMA offload protocols: -
    6 entries were displayed.
    
    • 上記の結果の、Vserver Nameがfsxで、Logical Interface Nameがnfs_smb_management_1がNAS(NFS)のサービスが稼働しているインターフェースになります。
    • Service Listにdata-s3-server、Data Protocolにs3が出力されており、S3サービスが有効になっていることが確認できます。
  3. Advancedモードに移行

    FsxId0e0764462acb12637::> set advanced
    
    Warning: These advanced commands are potentially dangerous; use them only when directed to do so by NetApp personnel.
    Do you want to continue? {y|n}: y
    
    FsxId0e0764462acb12637::*> 
    
  4. object-store-serverの作成

    FsxId0e0764462acb12637::*> vserver object-store-server create -vserver fsx -object-store-server fsxs3 -is-http-enabled true -is-https-enabled false
    
    FsxId0e0764462acb12637::*> vserver object-store-server show 
    
    Vserver: fsx
    
               Object Store Server Name: fsxs3
                   Administrative State: up
                           HTTP Enabled: true
                 Listener Port For HTTP: 80
                          HTTPS Enabled: false
         Secure Listener Port For HTTPS: 443
      Certificate for HTTPS Connections: -
                      Default UNIX User: pcuser
                   Default Windows User: -
                                Comment:
    
    • 今回は検証のためhttpのみの設定としています。
    • セキュリティの要件などに応じてプロトコルを選択してください。
  5.  S3オブジェクトストアサーバーのユーザー、グループ作成

    FsxId0e0764462acb12637::*> vserver object-store-server user create -vserver fsx -user s3user
    
    FsxId0e0764462acb12637::*> vserver object-store-server user show
    Vserver     User            ID        Access Key          Secret Key
    ----------- --------------- --------- ------------------- -------------------
    fsx         root            0         -                   -
       Comment: Root User
    fsx         s3user          1         23D4E31RJXA875R58UJ5 
                                                              _909YmCTMFQAX__kH4sqqCuh3X1P_tFc4HLsYoFn
    2 entries were displayed.
    
    FsxId0e0764462acb12637::*> vserver object-store-server group create -name s3group -users s3user -policies FullAccess 
    
    FsxId0e0764462acb12637::*> vserver object-store-server group show
    Vserver     Group ID  Group Name     Users            Policies
    ----------- --------- -------------- ---------------- -------------------
    fsx                 1 s3group        s3user           FullAccess
    
    • S3オブジェクトストアサーバーのユーザーとグループとして、s3user/s3groupを作成しました。
    • 作成したユーザーの情報をshowサブコマンドで表示すると、Access KeyとSecret Keyが表示されますので、こちらの値をコピーしておく(Advancedモードの場合のみ)
    • また、Groupに付与するポリシーの権限は今回は検証ということもあり、Full Accessとしています。
  6. S3バケット(NASタイプ)の作成

    FsxId0e0764462acb12637::*> vserver object-store-server bucket create -bucket s3bucket -type nas -nas-path /vol1 -vserver fsx 
    
    FsxId0e0764462acb12637::*> vserver object-store-server bucket show
    Vserver     Bucket          Type     Volume            Size       Encryption Role       NAS Path
    ----------- --------------- -------- ----------------- ---------- ---------- ---------- ----------
    fsx         s3bucket        nas      vol1              -          false      -          /vol1
    
    • バケットタイプをNASにすることで、NASサーバにS3プロトコルでアクセスできるデータの二重性(Data Duality)が実現できます
  7. ネームマッピングの作成

    • NAS(NFS)のデータにS3プロコトルでアクセス可能と聞いて、権限管理をどのように行っているのか疑問に思われた方もいらっしゃると思います。
    • NAS(NFS)とS3に限らず、権限管理はマルチプロコトルにおける共通の課題です。
    • ONTAPでは、作成したS3オブジェクトストアサーバーのユーザーとUNIXのユーザーをネームマッピングすることで柔軟な権限設定が可能です。
    FsxId0e0764462acb12637::*> vserver services name-service unix-user create -vserver fsx -user ec2-user -id 1000 -primary-gid 1000
    
    FsxId0e0764462acb12637::*> vserver services name-service unix-user show
                   User            User   Group  Full
    Vserver        Name            ID     ID     Name
    -------------- --------------- ------ ------ --------------------------------
    fsx            ec2-user        1000   1000
    fsx            nobody          65535  65535
    fsx            pcuser          65534  65534
    fsx            root            0      1
    4 entries were displayed.
    
    FsxId0e0764462acb12637::*> vserver services name-service unix-group create -vserver fsx -name ec2-user -id 1000
    
    FsxId0e0764462acb12637::*> vserver services name-service unix-group show                                       
    Vserver        Name                ID
    -------------- ------------------- ----------
    fsx            daemon              1
    fsx            ec2-user            1000
    fsx            nobody              65535
    fsx            pcuser              65534
    fsx            root                0
    5 entries were displayed.
    
    FsxId0e0764462acb12637::*> volume modify -volume vol1 -user 1000 -group 1000
    Volume modify successful on volume vol1 of Vserver fsx.    
    
    FsxId0e0764462acb12637::*> volume show -vserver fsx -volume  vol1 
    
                                          Vserver Name: fsx
                                           Volume Name: vol1
                                        Aggregate Name: aggr1
         List of Aggregates for FlexGroup Constituents: aggr1
                                       Encryption Type: none
                      List of Nodes Hosting the Volume: FsxId0e0764462acb12637-01
                                           Volume Size: 1TB
                                          Name Ordinal: base
                                    Volume Data Set ID: 1026
                             Volume Master Data Set ID: 2154956474
                                          Volume State: online
                                          Volume Style: flex
                                 Extended Volume Style: flexvol
                               FlexCache Endpoint Type: none
                                Is Cluster-Mode Volume: true
                                 Is Constituent Volume: false
                         Number of Constituent Volumes: -
                                         Export Policy: default
                                               User ID: ec2-user
                                              Group ID: ec2-user
                                        Security Style: unix
                                      UNIX Permissions: ---rwxr-xr-x
                                         Junction Path: /vol1
                                  Junction Path Source: RW_volume
    〜省略〜
    
    FsxId0e0764462acb12637::*> vserver name-mapping create -direction s3-unix  -position 1 -pattern s3user -replacement ec2-user -vserver fsx 
    
    FsxId0e0764462acb12637::*> vserver name-mapping show                                                                                                              
    
    Vserver:   fsx
    Direction: s3-unix
    Position Hostname         IP Address/Mask
    -------- ---------------- ----------------
    1       -                 -                   Pattern: s3user
                                              Replacement: ec2-user
    
    • ここでは、Jumphost(Linux)のユーザー/グループであるec2-user(UID:1000)/ec2-user(GID:1000)に併せてONTAPのローカルユーザーとグループを作成しています。
    • また、自動で作成したVolumeの管理権限を作成したec2-user(UID:1000)/ec2-user(GID:1000)に変更をしています。(初期はUID:0/GID:0でrootユーザーとなっています)
    • 事前に作成したS3オブジェクトストアサーバーのユーザーであるs3userをUNIXユーザーのec2-user(UID:1000)/ec2-user(GID:1000)に変換するようなルールを作成しています。
  8. 動作確認

    • ここまでで、NAS(NFS)のボリュームに対してS3のプロトコルで操作ができる環境が整いましたので、動作確認を行います。
    • まずAWSマネジメントコンソールのストレージ仮想マシンを確認し、NFSのDNS名をコピーしておきましょう
      image.png
    • コピーしたNFSのDNS名に対して、Jumphost(Linux)上へのNFSマウントを行った上でのファイル操作と、S3プロトコルによるデータアップロードを試します。
    [ec2-user@ip-10-100-6-33 ~]$ mkdir ./fsxn
    [ec2-user@ip-10-100-6-33 ~]$ ls
    fsxn
    [ec2-user@ip-10-100-6-33 ~]$ sudo mount -t nfs svm-06d4f48608233ec17.fs-0e0764462acb12637.fsx.ap-northeast-1.amazonaws.com:/vol1 ./fsxn/
    [ec2-user@ip-10-100-6-33 ~]$ df -hT
    Filesystem                                                                        Type      Size  Used Avail Use% Mounted on
    devtmpfs                                                                          devtmpfs  4.0M     0  4.0M   0% /dev
    tmpfs                                                                             tmpfs     475M     0  475M   0% /dev/shm
    tmpfs                                                                             tmpfs     190M  2.8M  188M   2% /run
    /dev/xvda1                                                                        xfs       8.0G  1.5G  6.5G  19% /
    tmpfs                                                                             tmpfs     475M     0  475M   0% /tmp
    tmpfs                                                                             tmpfs      95M     0   95M   0% /run/user/1000
    svm-06d4f48608233ec17.fs-0e0764462acb12637.fsx.ap-northeast-1.amazonaws.com:/vol1 nfs4      973G  113G  861G  12% /home/ec2-user/fsxn
    [ec2-user@ip-10-100-6-33 ~]$ vi ./fsxn/file_via_nfs.txt
    [ec2-user@ip-10-100-6-33 ~]$ echo "Hello World via NFS" > ./fsxn/hello_via_nfs.txt
    [ec2-user@ip-10-100-6-33 ~]$ cat ./fsxn/hello_via_nfs.txt 
    Hello World via NFS
    [ec2-user@ip-10-100-6-33 ~]$ aws s3 --endpoint-url=http://svm-06d4f48608233ec17.fs-0e0764462acb12637.fsx.ap-northeast-1.amazonaws.com ls --profile fsxn
    2023-09-06 09:40:54 s3bucket
    [ec2-user@ip-10-100-6-33 ~]$ echo "Hello World via S3" > ./hello_via_s3.txt 
    [ec2-user@ip-10-100-6-33 ~]$ aws s3 --endpoint-url=http://svm-06d4f48608233ec17.fs-0e0764462acb12637.fsx.ap-northeast-1.amazonaws.com cp ./hello_via_s3.txt s3://s3bucket --profile fsxn
    upload: ./hello_via_s3.txt to s3://s3bucket/hello_via_s3.txt   
    [ec2-user@ip-10-100-6-33 ~]$ cat ./fsxn/hello_via_s3.txt 
    Hello World via S3
    [ec2-user@ip-10-100-6-33 ~]$ ls -trl ./fsxn/
    total 0
    -rw-r--r--. 1 ec2-user ec2-user 20 Sep  6 10:34 hello_via_nfs.txt
    -rw-r--r--. 1 ec2-user ec2-user 19 Sep  6 10:51 hello_via_s3.txt
    
    • 上記の通り、S3オブジェクトストアサーバーのユーザーである、s3userの認証情報を使ってアップロードしたファイルが、NFS上では、ネームマッピングによる変換後のec2-userのUIDとGIDでファイルが作成されていることがわかります。
    • このネームマッピングの動作は、内部で以下のように動作しているようです。
    • image.png
    • 以上で、ネームマッピングも含めたONTAPのS3マルチプロトコルの動作が確認できました。

次回予告

  • 長くなってしまいましたので、NAS(NFS)のボリュームに対して、S3プロトコルによるファイル操作が確認できたここまでで、第1回とさせていただきます。
  • 次回は、このS3マルチプロトコルNASボリュームを使って、静的コンテンツホスティングが可能かどうか、またData Dualityならではの価値について考察をしたいと思います。
4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0