AWS CLIでAmazon File Cache環境を構築してみた

2022.10.03

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

しばたです。

先日一般提供開始されたAmazon File Cacheですが、今回はCLIでの構築手順を紹介したいと思います。

前提条件

Amazon File Cacheに対する操作ができるCLIのバージョンは

  • AWS CLI : Ver.2.8.0以降 or Ver.1.25.84以降
  • AWS Tools for PowerShell : Ver.4.1.178以降

となります。

Amazon File Cacheはマネジメントコンソール上でAmazon FSxの一部であった様にサービスとしてはAmazon FSxに属する様です。
このためAWS CLIもaws fsxコマンドの一部として提供されています。
(AWS Tools for PowerShellだとAWS.Tools.FSxモジュール)

構築手順

今回は前の記事で試したS3をキャッシュ元とした環境をAWS CLIから作成していきます。

作成にあたり事前に

  • S3バケット
  • VPC環境
  • セキュリティグループ

は作成済みの前提とします。

実行環境

今回はCloudShellにAWS CLI Ver.2.8.0を上書きインストールした環境で試してきます。

$ aws --version
aws-cli/2.8.0 Python/3.9.11 Linux/4.14.287-215.504.amzn2.x86_64 exec-env/CloudShell exe/x86_64.amzn.2 prompt/off

キャッシュの作成

キャッシュの作成はaws fsx create-file-cacheコマンドで行います。

現時点で一種類しかないのですが--file-cache-type--file-cache-type-versionパラメーターの指定が必須です。
今後異なるタイプのキャッシュが登場するのかもしれませんが現時点では--file-cache-type LUSTRE --file-cache-type-version 2.12と決め打ちで設定しておけばOKです。

他に必須となるのは

  • --storage-capacity : キャッシュの容量をGB指定 (1200 - 2400)
  • --subnet-ids : キャッシュ配置するサブネットID
  • --security-group-ids : キャッシュに紐づけるセキュリティグループID
  • --lustre-configuration : Lustre関連設定
    • 現時点では事実上メンテナンスウィンドウのみ変更可能
  • --data-repository-associations : キャッシュ元情報 (リスト形式)
    • S3とNFSで指定内容が変わる

となり、その他のパラメーターは必要に応じて設定します。
個人的には--tagsパラメーターで名前くらいは付けておくと良いと考えます。

aws fsx create-file-cache \
    --file-cache-type LUSTRE --file-cache-type-version 2.12 \
    --storage-capacity "キャッシュの容量(GB)" \
    --subnet-ids "キャッシュを配備するサブネットID" \
    --security-group-ids "キャッシュに設定するセキュリティグループID" \
    --lustre-configuration "Lustre関連設定" \
    --data-repository-associations "リスト形式のキャッシュ元情報" \
    --tags "Key=Name,Value=キャッシュ名"

実行例はこんな感じで、作成後ただちに結果が返されます。
作成状況はLifecycleプロパティでチェック可能です。

# サブネットIDやセキュリティグループIDは環境に応じた値を指定してください
$ subnet_id=$(aws ec2 describe-subnets --filters 'Name=cidr-block,Values=10.0.21.0/24' --query 'Subnets[0].SubnetId' --output text)
$ sg_id=$(aws ec2 describe-security-groups --filters 'Name=group-name,Values=amazon-file-cache' --query 'SecurityGroups[0].GroupId' --output text)

# キャッシュを作成
$ aws fsx create-file-cache \
    --file-cache-type LUSTRE --file-cache-type-version 2.12 \
    --storage-capacity 1200 \
    --subnet-ids $subnet_id \
    --security-group-ids $sg_id \
    --lustre-configuration 'PerUnitStorageThroughput=1000,DeploymentType=CACHE_1,MetadataConfiguration={StorageCapacity=2400},WeeklyMaintenanceStartTime=1:23:00' \
    --data-repository-associations 'DataRepositoryPath=s3://amazon-file-cache-test-20221001/,FileCachePath=/s3test' \
    --tags 'Key=Name,Value=my-file-cache-cli'
{
    "FileCache": {
        "OwnerId": "111111111111",
        "CreationTime": "2022-10-03T11:20:01.768000+00:00",
        "FileCacheId": "fc-09057xxxxxxxxxxxx",
        "FileCacheType": "LUSTRE",
        "FileCacheTypeVersion": "2.12",
        "Lifecycle": "CREATING",
        "StorageCapacity": 1200,
        "VpcId": "vpc-xxxxxxxxxxxxxxxxx",
        "SubnetIds": [
            "subnet-xxxxxxxxxxxxxx"
        ],
        "DNSName": "fc-09057xxxxxxxxxxxx.fsx.ap-northeast-1.amazonaws.com",
        "KmsKeyId": "arn:aws:kms:ap-northeast-1:111111111111:key/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "ResourceARN": "arn:aws:fsx:ap-northeast-1:111111111111:file-cache/fc-09057xxxxxxxxxxxx",
        "Tags": [
            {
                "Key": "Name",
                "Value": "my-file-cache-cli"
            }
        ],
        "CopyTagsToDataRepositoryAssociations": false,
        "LustreConfiguration": {
            "PerUnitStorageThroughput": 1000,
            "DeploymentType": "CACHE_1",
            "MountName": "63xxxxxx",
            "WeeklyMaintenanceStartTime": "1:23:00",
            "MetadataConfiguration": {
                "StorageCapacity": 2400
            },
            "LogConfiguration": {
                "Level": "WARN_ERROR",
                "Destination": "arn:aws:logs:ap-northeast-1:111111111111:log-group:/aws/fsx/filecache/lustre:log-stream:datarepo_fc-09057xxxxxxxxxxxx"
            }
        },
        "DataRepositoryAssociationIds": [
            "dra-0b22xxxxxxxxxxxxx"
        ]
    }
}

マネジメントコンソール上はこんな感じです。

しばらく待って出来上がった内容はこちらになります。

キャッシュ情報の確認

作成したキャッシュの情報を取得するにはaws fsx describe-file-cachesコマンドを使います。
個別のキャッシュを特定したい場合は--file-cache-idsパラメーターを使います。

aws fsx describe-file-caches

実行例はこんな感じです。

$ aws fsx describe-file-caches
{
    "FileCaches": [
        {
            "OwnerId": "111111111111",
            "CreationTime": "2022-10-03T11:29:38.285000+00:00",
            "FileCacheId": "fc-09057xxxxxxxxxxxx",
            "FileCacheType": "LUSTRE",
            "FileCacheTypeVersion": "2.12",
            "Lifecycle": "AVAILABLE",
            "StorageCapacity": 1200,
            "VpcId": "vpc-xxxxxxxxxxxxxxxxx",
            "SubnetIds": [
                "subnet-xxxxxxxxxxxxxx"
            ],
            "NetworkInterfaceIds": [
                "eni-0912xxxxxxxxxxxxx",
                "eni-0b79xxxxxxxxxxxxx",
                "eni-0cfbxxxxxxxxxxxxx",
                "eni-0fbaxxxxxxxxxxxxx",
                "eni-07afxxxxxxxxxxxxx"
            ],
            "DNSName": "fc-09057xxxxxxxxxxxx.fsx.ap-northeast-1.amazonaws.com",
            "KmsKeyId": "arn:aws:kms:ap-northeast-1:111111111111:key/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
            "ResourceARN": "arn:aws:fsx:ap-northeast-1:111111111111:file-cache/fc-09057xxxxxxxxxxxx",
            "LustreConfiguration": {
                "PerUnitStorageThroughput": 1000,
                "DeploymentType": "CACHE_1",
                "MountName": "63xxxxxx",
                "WeeklyMaintenanceStartTime": "1:23:00",
                "MetadataConfiguration": {
                    "StorageCapacity": 2400
                },
                "LogConfiguration": {
                    "Level": "WARN_ERROR",
                    "Destination": "arn:aws:logs:ap-northeast-1:111111111111:log-group:/aws/fsx/filecache/lustre:log-stream:datarepo_fc-09057xxxxxxxxxxxx"
                }
            },
            "DataRepositoryAssociationIds": [
                "dra-0b22xxxxxxxxxxxxx"
            ]
        }
    ]
}

設定の更新

設定の更新はaws fsx update-file-cacheコマンドを使います。
ただ、現時点ではメンテナンスウィンドウのスケジュールのみ変更可能です。

  • --lustre-configuration : Lustre関連のパラメーター (今はメンテナンスウィンドウのみ設定可)
# 現時点ではメンテナンスウィンドウのみ変更可能
aws fsx update-file-cache --file-cache-id "キャッシュID" \
    --lustre-configuration 'WeeklyMaintenanceStartTime=D:HH:MM'

実行例はこんな感じでです。

# メンテナンスウィンドウを 火曜23:30 (UTC) に変更
$ aws fsx update-file-cache --file-cache-id fc-09057xxxxxxxxxxxx \
     --lustre-configuration 'WeeklyMaintenanceStartTime=2:23:30'
{
    "FileCache": {
        "OwnerId": "111111111111",
        "CreationTime": "2022-10-03T11:29:38.285000+00:00",
        "FileCacheId": "fc-09057xxxxxxxxxxxx",
        "FileCacheType": "LUSTRE",
        "FileCacheTypeVersion": "2.12",
        "Lifecycle": "AVAILABLE",
        "StorageCapacity": 1200,
        "VpcId": "vpc-xxxxxxxxxxxxxxxxx",
        "SubnetIds": [
            "subnet-xxxxxxxxxxxxxx"
        ],
        "NetworkInterfaceIds": [
            "eni-0912xxxxxxxxxxxxx",
            "eni-0b79xxxxxxxxxxxxx",
            "eni-0cfbxxxxxxxxxxxxx",
            "eni-0fbaxxxxxxxxxxxxx",
            "eni-07afxxxxxxxxxxxxx"
        ],
        "DNSName": "fc-09057xxxxxxxxxxxx.fsx.ap-northeast-1.amazonaws.com",
        "KmsKeyId": "arn:aws:kms:ap-northeast-1:111111111111:key/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "ResourceARN": "arn:aws:fsx:ap-northeast-1:111111111111:file-cache/fc-09057xxxxxxxxxxxx",
        "LustreConfiguration": {
            "PerUnitStorageThroughput": 1000,
            "DeploymentType": "CACHE_1",
            "MountName": "63xxxxxx",
            "WeeklyMaintenanceStartTime": "2:23:30",
            "MetadataConfiguration": {
                "StorageCapacity": 2400
            },
            "LogConfiguration": {
                "Level": "WARN_ERROR",
                "Destination": "arn:aws:logs:ap-northeast-1:111111111111:log-group:/aws/fsx/filecache/lustre:log-stream:datarepo_fc-09057xxxxxxxxxxxx"
            }
        },
        "DataRepositoryAssociationIds": [
            "dra-0b22xxxxxxxxxxxxx"
        ]
    }
}

キャッシュの削除

キャッシュの削除はaws fsx delete-file-cacheコマンドで行います。
キャッシュIDを指定して対象のキャッシュを削除します。

aws fsx delete-file-cache --file-cache-id "キャッシュID"

今回の環境を削除する場合はこんな感じになります。

# キャッシュを削除する
$ aws fsx delete-file-cache --file-cache-id fc-09057xxxxxxxxxxxx
{
    "FileCacheId": "fc-09057xxxxxxxxxxxx",
    "Lifecycle": "DELETING"
}

これで削除処理が開始されるのでしばらく待てば完全に削除されます。

最後に

以上となります。

今後の拡張を見据えてか、パラメーターとして存在するものの現時点では単一の固定値のみ許容するものが結構多かったです。
これからAmazon File Cacheがどう進化をしていくのか興味が湧いてきました。