AWS FSx for Lustre 一人スキルアップセミナー

# 利点

良さそうだと思った箇所を引用します。

## 使いやすい S3 データ

- S3 からのデータ転送を管理しなくてもワークロードを実行できる
- 最新のデータに基づいて、FSx for Lustre でファイルシステムが自動的に更新される

## コスト効率が高い

- SSDストレージは、レイテンシーの影響を受けやすいワークロード向けに最適化されている
- HDDストレージは、スループット重視のワークロード向けに最適化されている

## あらゆるLinuxワークロードのための設計

- ファイルシステムへは、EC2、EKS、Direct Connect、VPN を使用してオンプレミスからアクセス可能

## シンプルでフルマネージド型

- AWS マネジメントコンソール、AWS CLI、AWS SDKでAmazon FSx for Lustre ファイルシステムを作成してスケーリング可能

## 安全性とコンプライアンス

- 保管中および転送中のデータを自動的に暗号化
- POSIX パーミッションやセキュリティグループを使用して、ネットワークアクセスを制御
- FSx for Lustre のバックアップが可能

# ユースケース

- 機械学習
- ハイパフォーマンスコンピューティング
- メディア処理とトランスコーディング
- 自動走行車
- ビッグデータと財務分析
- 電子機器などの設計作業の自動化

# 触ってみよう

プライベートサブネットに立てたEC2からLustreにアクセスし、エクスポートやインポートをします。インポートではEC2からS3にエンドポイント経由でS3バケットにファイルをアップロードし、Lustreにインポートされるか確認します。



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/8723774c-648c-a15f-2fea-d63f88b087c1.png)


## FSx for Lustre 作成

Lustreを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/d9c31245-db9c-ced4-c287-b25ec64fd38a.png)

容量の選択をします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/4f6727c3-8aa9-ce51-d3a1-a73b44ac723d.png)


指定したバケットにファイルが新規作成されたとき、または更新されたときにインポートされるようにしたいので、以下の設定にします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/ce991f6a-4c49-a85b-0d1f-1e76373eed06.png)



## Lustreインストール、マウント

以下を順に実行

file_system_idにLustreのid、mount_nameにLustreのマウント名で書き換えます。

```
sudo mkdir -p /mnt/fsx
sudo yum update -y
sudo amazon-linux-extras install -y lustre2.10
sudo mount -t lustre -o noatime,flock file_system_id.fsx.ap-northeast-1.amazonaws.com@tcp:/mount_name /mnt/fsx
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/989a652e-79a1-0958-671d-89d8bfbd3632.png)




## クライアントVPNエンドポイント作成

相互認証を利用してクライアントVPNエンドポイントを作成します。こちらの記事を参考にしました。

https://qiita.com/hmatsu47/items/ce0cc8b7f5747dbb3190

## プライベートサブネット

ルートテーブルのルートからインターネットゲートウェイを外します。

## エクスポート

ファイルをS3にエクスポートします。マウントポイント/mnt/fsx直下にファイルを作成し、エクスポートコマンド`lfs htm_archive`を実行します。

```
$ sudo vi /mnt/fsx/test1.txt
$ sudo lfs hsm_archive /mnt/fsx/test1.txt
$ sudo lfs hsm_state /mnt/fsx/test1.txt
/mnt/fsx/test1.txt: (0x00000009) exists archived, archive_id:1
$ aws s3 ls s3://test-lustre-202103210434
2021-03-20 20:00:04         14 test1.txt
```

## インポート

S3にファイルをアップロードすれば、Lustreの設定により自動でインポートされます。適当なサンプルファイルtest_upload.txtをバケット直下にアップロードします。

ここでアップロード用にS3エンドポイントを作成します。
作成後、プライベートサブネットからS3にファイルをアップロードできるようになります。

まずは検索でs3と入力します。2つのエンドポイントの内タイプがGatewayの方を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/929fffa0-a401-f865-6208-85488f50c346.png)

VPCとルートテーブルを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/492ef2a0-f02b-ac7d-5282-d61f7f52c0d7.png)

ここではフルアクセスにチェックを入れますが、後で変更可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/d7375ee7-11af-94b1-6a45-fc00fdb8a316.png)

エンドポイントの作成をクリックします。

ファイルをS3にアップロードします。

```
$ aws s3 cp test_upload.txt s3://test-lustre-202103210434
upload: ./test_upload.txt to s3://test-lustre-202103210434/test_upload.txt
```

Lustreにロードされたかどうかを `lfs hsm_state` で確認します。

```
$ sudo lfs hsm_state /mnt/fsx/*
/mnt/fsx/test1.txt: (0x00000009) exists archived, archive_id:1
/mnt/fsx/test_upload.txt: (0x0000000d) exists archived, archive_id:1
```

# simple AD でユーザー管理

## ドメイン登録

ADをLinux環境で使うための準備をします。simpleADで作成したドメインは`test.net`であるとします。Amazon Linux2 インスタンスを起動します。

ホームディレクトリにファイルを作成します。

```
$ sudo vi test.sh
```

```test.sh
sudo yum update -y
sudo yum -y install sssd realmd krb5-workstation oddjob oddjob-mkhomedir sssd samba-common-tools
sudo realm join -U Administrator@test.net test.net --verbose
sudo sed -i -e 's/#PasswordAuthentication yes/PasswordAuthentication yes/' -e 's/^PasswordAuthentication no//' /etc/ssh/sshd_config
sudo service sssd start
sudo realm list
sudo chmod 460 /etc/sudoers
```

出力結果

```
test.net
  type: kerberos
  realm-name: TEST.NET
  domain-name: test.net
  configured: kerberos-member
  server-software: active-directory
  client-software: sssd
  required-package: oddjob
  required-package: oddjob-mkhomedir
  required-package: sssd
  required-package: adcli
  required-package: samba-common-tools
  login-formats: %U@test.net
  login-policy: allow-realm-logins
```

作成したユーザーでLustreクライアントをインストールできるようにします。そのために`sudo`を実行できるようにします。/etc/sudoersに次のように1行追加します。

変更前

```
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
```

変更後

```
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
Administrator@test.net ALL=(ALL:ALL) ALL
```

再起動します。

```
sudo reboot
```

ADの管理ユーザーでログインします。

```
$ ssh -l Administrator@test.net 127.0.0.1
Administrator@test.net@127.0.0.1's password:
```

以下のようにログイン出来たらマウントしてファイルを確認します。

```
[administrator@test.net@ip-172-31-46-49 ~]$ ls /mnt/fsx/
test1.txt  test_upload.txt
[administrator@test.net@ip-172-31-46-49 ~]$ sudo lfs hsm_state /mnt/fsx/*
[sudo] password for administrator@test.net:
/mnt/fsx/test1.txt: (0x00000009) exists archived, archive_id:1
/mnt/fsx/test_upload.txt: (0x00000009) exists archived, archive_id:1
```

## ユーザー作成

ec2-userに戻ります。パスワードを聞かれたときには、Administratorのパスワードを入力します。

```
$ sudo net ads user ADD lustre_user Lustre1! -C "lustre_user" -U Administrator@test.net -S test.net
Enter Administrator@test.net's password:
User lustre_user added
```

ユーザー一覧を表示します。

```
$ sudo net ads user -S test.net -U Administrator@test.net
Enter Administrator@test.net's password:
AWSAdminD-95671C7C1C
Administrator
lustre_user
krbtgt
Guest
```

## 作成したユーザーでログインする

Administratorのときとは異なりログインに失敗します。

```
$ ssh -l lustre_user@test.net 127.0.0.1
lustre_user@test.net@127.0.0.1's password:
Permission denied, please try again.
```

`service`コマンドの`status`オプションでログを見ることができます。

```
$ sudo service sssd status
```

以下のようなエラーでログインに失敗しています。

```
Client's credentials have been revoked
```

調べてみるとこちらの記事に原因が書いてありました。


https://gihyo.jp/admin/serial/01/ad-linux/00011?page=2

ADでユーザーパスワードのリセットが必要でした。リセットすればログインできるようになります。マウントできていることも確認できました。

```
[lustre_user@test.net@ip-172-31-38-93 ~]$ sudo lfs hsm_state /mnt/fsx/*
/mnt/fsx/test1.txt: (0x00000009) exists archived, archive_id:1
/mnt/fsx/test_upload.txt: (0x00000009) exists archived, archive_id:1
```

# 参考記事

https://docs.aws.amazon.com/ja_jp/fsx/latest/LustreGuide/what-is.html

https://dev.classmethod.jp/articles/linux-simplead-management/

https://gihyo.jp/admin/serial/01/ad-linux/

https://gihyo.jp/admin/serial/01/ad-linux/00011?page=2