チュートリアル: AWS CLI を使用してファイルシステムを作成し、EC2 インスタンスにマウントする - Amazon Elastic File System

チュートリアル: AWS CLI を使用してファイルシステムを作成し、EC2 インスタンスにマウントする

暗号化された EFS ファイルシステムを作成し、VPC 内の EC2 インスタンスにマウントし、AWS CLI を使用してセットアップをテストします。

注記

使用開始」チュートリアルでは、コンソールを使用して Amazon EC2 および EFS リソースを作成します。このチュートリアルでは、主に Amazon EFS API に慣れるために、AWS CLI を使用して同じことを行います。

このチュートリアルでは、アカウントに以下の AWS リソースを作成します。

  • Amazon EC2 リソース。

    • 2 つのセキュリティグループ (EC2 インスタンスおよび EFS ファイルシステム用)。

      セキュリティグループにルールを追加して、適切なインバウンド/アウトバウンドアクセスを許可します。これにより、EC2 インスタンスは、標準の NFSv4.1 TCP ポートを使用して、マウントターゲットを通じてファイルシステムに接続できます。

    • VPC 内の EC2 インスタンス。

  • Amazon EFS のリソース

    • ファイルシステム。

    • ファイルシステムのマウントターゲット。

      ファイルシステムを EC2 インスタンスにマウントするには、VPC にマウントターゲットを作成する必要があります。VPC 内の各アベイラビリティーゾーンに 1 つのマウントターゲットを作成できます。詳細については、「Amazon EFS の仕組み」を参照してください。

次に、EC2 インスタンス上のファイルシステムをテストします。チュートリアルの最後のクリーンアップの手順には、これらのリソースを削除するための情報が記載されています。

このチュートリアルでは、これらのリソースをすべて米国西部 (オレゴン) リージョン (us-west-2) に作成します。どの AWS リージョン を使用しても、それを一貫して使用してください。VPC、EC2 リソース、EFS リソースなどのすべてのリソースは、同じ AWS リージョン内になければなりません。

前提条件

  • AWS アカウントのルート認証情報を使用してコンソールにサインインし、入門演習を試すことができます。しかし、AWS Identity and Access Management は AWS アカウント アカウントのルート認証情報を使用しないことをお勧めします。代わりに、アカウントに管理者ユーザーを作成し、それらの認証情報を使用してアカウントのリソースを管理します。代わりに、アカウントに管理者ユーザーを作成し、それらの認証情報を使用してアカウントのリソースを管理します。詳細については、「AWS IAM Identity Center ユーザーガイド」の「IAM アイデンティティセンターのユーザーに AWS アカウントアクセス権を割り当てる」を参照してください。

  • アカウントで作成したデフォルトの VPC またはカスタム VPC を使用できます。このウォークスルーでは、デフォルトの VPC 設定が機能します。ただし、カスタム VPC を使用する場合は、次の点を確認してください。

    • DNS ホスト名は有効です。詳細については、「Amazon VPC ユーザーガイド」の「DNS attributes in your VPC」(VPC の DNS 属性) を参照してください。

    • インターネットゲートウェイが VPC にアタッチされています。詳細については、「Amazon VPC ユーザーガイド」の「インターネットゲートウェイを使用してインターネットに接続する」 を参照してください。

    • VPC サブネットは、VPC サブネットで起動されたインスタンスのパブリック IP アドレスを要求するように設定されています。詳細については、「Amazon VPC ユーザーガイド」の「VPC とサブネットの IP アドレス指定」を参照してください。

    • VPC ルートテーブルには、インターネット経由のすべてのトラフィックをインターネットゲートウェイに送信するルールが含まれています。

  • AWS CLI をセットアップして、adminuser プロファイルを追加する必要があります。

AWS CLI の設定

次の手順に従って、AWS CLI とユーザープロファイルを設定します。

AWS CLI をセットアップする方法
  1. AWS CLI をダウンロードして設定します。手順については、「AWS Command Line Interface ユーザーガイド」の「AWS CLI の開始方法」を参照してください。

  2. プロファイルを設定します。

    ユーザーの認証情報を AWS CLI config ファイルに格納します。このチュートリアルの CLI コマンドの例では、adminuser プロファイルを指定します。configuser ファイルを config ファイルに作成します。以下のように、管理者ユーザープロファイルを config ファイルのデフォルトとして設定することもできます。

    [profile adminuser] aws_access_key_id = admin user access key ID aws_secret_access_key = admin user secret access key region = us-west-2 [default] aws_access_key_id = admin user access key ID aws_secret_access_key = admin user secret access key region = us-west-2

    前述のプロファイルはデフォルトで AWS リージョン を設定します。CLI コマンドでリージョンを指定しない場合、us-west-2 リージョンが使用されます。

  3. コマンドプロンプトで以下のコマンドを入力して、セットアップを確認します。これらのコマンドの両方は、いずれも認証情報を明示的に提供しないため、デフォルトプロファイルの認証情報が使用されます。

    • help コマンドを試してみます。

      --profile パラメータを追加することで、明示的にユーザープロファイルを指定することもできます。

      aws help
      aws help \ --profile adminuser

ステップ 1: EC2 リソースを作成する

このステップでは、次の作業を行います。

  • 2 つのセキュリティグループを作成します。

  • セキュリティグループにルールを追加して、追加のアクセスを許可します。

  • EC2 インスタンスを起動します。その次の手順で EFS ファイルシステムを作成し、このインスタンス上にマウントします。

ステップ 1.1: 2 つのセキュリティグループを作成する

このセクションでは、EC2 インスタンスと EFS マウントターゲットの VPC にセキュリティグループを作成します。チュートリアルの後の手順で、これらのセキュリティグループを EC2 インスタンスと EFS マウントターゲットに割り当てます。セキュリティグループについては、「Linux インスタンス用の Amazon EC2 セキュリティグループ」を参照してください。

セキュリティグループを作成するには
  1. create-security-group CLI コマンドを使用して、2 つのセキュリティグループを作成します。

    1. EC2 インスタンス用のセキュリティグループ (efs-walkthrough1-ec2-sg) を作成し、VPC ID を指定します。

      $ aws ec2 create-security-group \ --region us-west-2 \ --group-name efs-walkthrough1-ec2-sg \ --description "Amazon EFS walkthrough 1, SG for EC2 instance" \ --vpc-id vpc-id-in-us-west-2 \ --profile adminuser

      セキュリティグループ ID を書き留めます。以下に、応答の例を示します。

      { "GroupId": "sg-aexample" }

      次のコマンドを使用して、VPC ID を見つけることができます。

      $ aws ec2 describe-vpcs

    2. EFS マウントターゲット用のセキュリティグループ (efs-walkthrough1-mt-sg) を作成します。VPC ID を指定する必要があります。

      $ aws ec2 create-security-group \ --region us-west-2 \ --group-name efs-walkthrough1-mt-sg \ --description "Amazon EFS walkthrough 1, SG for mount target" \ --vpc-id vpc-id-in-us-west-2 \ --profile adminuser

      セキュリティグループ ID を書き留めます。以下に、応答の例を示します。

      { "GroupId": "sg-aexample" }
  2. セキュリティグループを確認します。

    aws ec2 describe-security-groups \ --group-ids list of security group IDs separated by space \ --profile adminuser \ --region us-west-2

    両方には、すべてのトラフィックを残すことができるアウトバウンドルールが 1 つだけ必要です。

    次のセクションでは、以下を可能にする追加アクセスを承認します。

    • EC2 インスタンスに接続できるようにします。

    • EC2 インスタンスと EFS マウントターゲットの間のトラフィックを有効にします (このチュートリアルの後の手順で、これらにセキュリティグループを関連付けます)。

ステップ 1.2: セキュリティグループにルールを追加してインバウンド/アウトバウンドアクセスを承認する

このステップでは、セキュリティグループにルールを追加して、インバウンド/アウトバウンドアクセスを許可します。

ルールを追加するには
  1. 任意のホストからの Secure Shell (SSH) を使用して EC2 インスタンスに接続できるように、EC2 インスタンス (efs-walkthrough1-ec2-sg) のセキュリティグループへの受信 SSH 接続を認可します。

    $ aws ec2 authorize-security-group-ingress \ --group-id id of the security group created for EC2 instance \ --protocol tcp \ --port 22 \ --cidr 0.0.0.0/0 \ --profile adminuser \ --region us-west-2

    セキュリティグループに追加したインバウンドおよびアウトバウンドのルールがあることを確認します。

    aws ec2 describe-security-groups \ --region us-west-2 \ --profile adminuser \ --group-id security-group-id
  2. EFS マウントターゲット (efs-walkthrough1-mt-sg) のセキュリティグループへのインバウンドアクセスを許可します。

    コマンドプロンプトで、次の AWS CLI の authorize-security-group-ingress コマンドを adminuser プロファイルを使用して実行し、インバウンドルールを追加します。

    $ aws ec2 authorize-security-group-ingress \ --group-id ID of the security group created for Amazon EFS mount target \ --protocol tcp \ --port 2049 \ --source-group ID of the security group created for EC2 instance \ --profile adminuser \ --region us-west-2
  3. 両方のセキュリティグループがインバウンドアクセスを許可することを確認します。

    aws ec2 describe-security-groups \ --group-names efs-walkthrough1-ec2-sg efs-walkthrough1-mt-sg \ --profile adminuser \ --region us-west-2

ステップ 1.3: EC2 インスタンスを起動する

このステップでは、EC2 インスタンスを起動します。

EC2 インスタンスを起動するには
  1. EC2 インスタンスを起動するときに必要な次の情報を収集します。

    • [キーペア名]。キーペアを作成する手順については、「Amazon EC2 ユーザーガイド」の「Amazon EC2 インスタンスのキーペアを作成する」を参照してください。

    • インスタンスの起動に使用する Amazon マシンイメージ (AMI) の ID。

      EC2 インスタンスを起動するために使用する AWS CLI コマンドには、デプロイする Amazon マシンイメージ (AMI) の ID をパラメータとして指定する必要があります。この演習では、Amazon Linux HVM AMI を使用しています。

      注記

      ほとんどの汎用の Linux ベースの AMI を使用することができます。別の Linux AMI を使用する場合は、必ずご使用のディストリビューションのパッケージマネージャーを使用して、インスタンスに NFS クライアントをインストールします。また、必要に応じてソフトウェアパッケージを追加する必要がある場合もあります。

      Amazon Linux HVM AMI では、Amazon Linux AMI で最新の ID を見つけることができます。Amazon Linux AMI ID テーブルから次のように ID 値を選択します。

      • [US West Oregon (米国西部オレゴン)] リージョンを選択します。このチュートリアルでは、米国西部 (オレゴン) リージョン (us-west-2) 内にすべてのリソースを作成していることを前提としています。

      • [EBS-backed HVM 64-bit] タイプを選択します (CLI コマンドでインスタンスストアをサポートしない t2.micro インスタンスタイプを指定するため)。

    • EC2 インスタンス用に作成したセキュリティグループの ID。

    • AWS リージョン。このチュートリアルでは、us-west-2 リージョンを使用しています。

    • インスタンスを起動する VPC サブネット ID。サブネットのリストを取得するには、describe-subnets コマンドを使用します。

      $ aws ec2 describe-subnets \ --region us-west-2 \ --filters "Name=vpc-id,Values=vpc-id" \ --profile adminuser

      サブネット ID を選択した後、describe-subnets の結果から次の値を書き留めます。

      • サブネット ID – マウントターゲットを作成するときにこの値が必要です。この練習では、EC2 インスタンスを起動するのと同じサブネットにマウントターゲットを作成します。

      • サブネットのアベイラビリティーゾーン - この値は、マウントターゲットの DNS 名を構成するために必要です。この名前は、EC2 インスタンスにファイルシステムをマウントするために使用します。

  2. 次の AWS CLI run-instances コマンドを実行して、EC2 インスタンスを起動します。

    $ aws ec2 run-instances \ --image-id AMI ID \ --count 1 \ --instance-type t2.micro \ --associate-public-ip-address \ --key-name key-pair-name \ --security-group-ids ID of the security group created for EC2 instance \ --subnet-id VPC subnet ID \ --region us-west-2 \ --profile adminuser
  3. run-instances コマンドによって返されるインスタンス ID を書き留めます。

  4. 作成した EC2 インスタンスには、EC2 インスタンスに接続してファイルシステムをマウントするために使用するパブリック DNS 名が必要です。パブリック DNS 名の形式は次のとおりです。

    ec2-xx-xx-xx-xxx.compute-1.amazonaws.com

    次の CLI コマンドを実行して、パブリック DNS 名を書き留めます。

    aws ec2 describe-instances \ --instance-ids EC2 instance ID \ --region us-west-2 \ --profile adminuser

    パブリック DNS 名が見つからない場合は、EC2 インスタンスを起動した VPC の設定を確認してください。詳細については、「前提条件」を参照してください。

  5. (オプション) 作成した EC2 インスタンスに名前を割り当てます。これを行うには、インスタンスに割り当てる名前にキー名と値を設定したタグを追加します。この操作はは、次の AWS CLI create-tags コマンドを実行して行うことができます。

    $  aws ec2 create-tags \ --resources EC2-instance-ID \ --tags Key=Name,Value=Provide-instance-name  \ --region us-west-2 \ --profile adminuser

ステップ 2: EFS リソースを作成する

このステップでは、次の作業を行います。

  • 暗号化された EFS ファイルシステムを作成します。

  • ライフサイクル管理を有効にします。

  • EFS インスタンスを起動したアベイラビリティーゾーンにマウントターゲットを作成します。

ステップ 2.1: EFS ファイルシステムを作成する

このステップでは、EFS ファイルシステムを作成します。次のステップで、ファイルシステムのマウントターゲットを作成するときに使用する FileSystemId を書き留めます。

ファイルシステムを作成するには
  • オプションの Name タグを使用してファイルシステムを作成します。

    1. コマンドプロンプトで、次の AWS CLI create-file-system コマンドを実行します。

      $ aws efs create-file-system \ --encrypted \ --creation-token FileSystemForWalkthrough1 \ --tags Key=Name,Value=SomeExampleNameValue \ --region us-west-2 \ --profile adminuser

      次のレスポンスが返されます。

      { "OwnerId": "111122223333", "CreationToken": "FileSystemForWalkthrough1", "FileSystemId": "fs-c657c8bf", "CreationTime": 1548950706.0, "LifeCycleState": "creating", "NumberOfMountTargets": 0, "SizeInBytes": { "Value": 0, "ValueInIA": 0, "ValueInStandard": 0 }, "PerformanceMode": "generalPurpose", "Encrypted": true, "KmsKeyId": "arn:aws:kms:us-west-2:111122223333:a5c11222-7a99-43c8-9dcc-abcdef123456", "ThroughputMode": "bursting", "Tags": [ { "Key": "Name", "Value": "SomeExampleNameValue" } ] }
    2. [FileSystemId] の値を書き留めます。「ステップ2.3: マウントターゲットを作成する」でこのファイルシステムのマウントターゲットを作成するときに、この値が必要になります。

ステップ 2.2:ライフサイクル管理を有効にする

このステップでは、EFS 低頻度アクセス (IA) ストレージクラスを使用するために、ファイルシステムでライフサイクル管理を有効にします。詳細については、「EFS ファイルシステムのストレージライフサイクルの管理」および「EFS ストレージクラス」を参照してください。

ライフサイクル管理を有効にするには
  • コマンドプロンプトで、次の AWS CLI put-lifecycle-configuration コマンドを入力します。

    $ aws efs put-lifecycle-configuration \ --file-system-id fs-c657c8bf \ --lifecycle-policies TransitionToIA=AFTER_30_DAYS \ --region us-west-2 \ --profile adminuser

    次のレスポンスが返されます。

    { "LifecyclePolicies": [ { "TransitionToIA": "AFTER_30_DAYS" } ] }

ステップ2.3: マウントターゲットを作成する

このステップでは、EC2 インスタンスを起動したアベイラビリティーゾーンにファイルシステムのマウントターゲットを作成します。

  1. 以下の情報があることを確認してください。

    • マウント対象を作成するファイルシステムの ID (例: fs-example)。

    • ステップ 1: EC2 リソースを作成する で EC2 インスタンスを起動した VPC サブネット ID。

      このチュートリアルでは、EC2 インスタンスを起動したサブネットと同じサブネットにマウントターゲットを作成するため、サブネット ID (例えば subnet-example) が必要です。

    • 前のステップでマウントターゲット用に作成したセキュリティグループの ID。

  2. コマンドプロンプトで、次の AWS CLI create-mount-target コマンドを入力します。

    $ aws efs create-mount-target \ --file-system-id file-system-id \ --subnet-id subnet-id \ --security-group ID-of-the security-group-created-for-mount-target \ --region us-west-2 \ --profile adminuser

    次のレスポンスが返されます。

    { "MountTargetId": "fsmt-example", "NetworkInterfaceId": "eni-example", "FileSystemId": "fs-example", "PerformanceMode" : "generalPurpose", "LifeCycleState": "available", "SubnetId": "fs-subnet-example", "OwnerId": "account-id", "IpAddress": "xxx.xx.xx.xxx" }
  3. また、describe-mount-targets コマンドを使用して、ファイルシステムで作成したマウントターゲットの説明を取得することもできます。

    $ aws efs describe-mount-targets \ --file-system-id file-system-id \ --region us-west-2 \ --profile adminuser

ステップ 3: ファイルシステムを EC2 インスタンスにマウントしてテストする

このステップでは、次の作業を行います。

  • 必要な情報を収集します。

  • EC2 インスタンスに NFS クライアントをインストール。

  • EC2 インスタンスにファイルシステムをマウントしてテストします。

ステップ 3.1: 情報を収集する

このセクションの手順に従って、次の情報を確認してください。

  • EC2 インスタンスのパブリック DNS 名の形式は以下のとおりです。

    ec2-xx-xxx-xxx-xx.aws-region.compute.amazonaws.com
  • ファイルシステムの DNS 名。この DNS 名は、次の一般的な形式を使用して作成できます。

    file-system-id.efs.aws-region.amazonaws.com

    マウントターゲットを使用してファイルシステムをマウントする EC2 インスタンスは、ファイルシステムの DNS 名をマウントターゲットの IP アドレスに解決できます。

注記

Amazon EFS は、EC2 インスタンスがパブリック IP アドレスまたはパブリック DNS 名を持つことを要求するものではありません。前述の要件は、SSH を使用して VPC 外のインスタンスに接続するための、このチュートリアルでの一例です。

ステップ 3.2: EC2 インスタンスに NFS クライアントをインストールする

Windows または Linux、macOS X、またはその他の Unix バリアントを実行しているコンピュータから、EC2 インスタンスに接続できます。

NFS クライアントをインストールするには
  1. EC2 インスタンスに接続します。詳細については、「Amazon EC2 ユーザーガイド」の「EC2 インスタンスに接続する」を参照してください。

  2. SSH セッションを使用して、EC2 インスタンスで次のコマンドを実行します。

    1. (オプション) アップデートを入手して再起動します。

      $ sudo yum -y update $ sudo reboot

      再起動後、EC2 インスタンスに再接続します。

    2. NFS クライアントをインストールします。

      $ sudo yum -y install nfs-utils
      注記

      EC2 インスタンスの起動時に Amazon Linux AMI 2016.03.0 という Amazon Linux AMI を選択した場合、nfs-utils はデフォルトで既に AMI に組み込まれているため、インストールする必要はありません。

ステップ 3.3: ファイルシステムを EC2 インスタンスにマウントしてテストする

これで、EC2 インスタンスにファイルシステムをマウントします。

  1. ディレクトリを作成します (「efs-mount-point」)。

    $ mkdir ~/efs-mount-point
  2. EFS ファイルシステムをマウントします。

    $ sudo mount -t nfs -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport mount-target-DNS:/ ~/efs-mount-point

    EC2 インスタンスは、マウントターゲットの DNS 名を IP アドレスに解決できます。オプションでマウントターゲットの IP アドレスを直接指定することもできます。

    $ sudo mount -t nfs -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport mount-target-ip:/  ~/efs-mount-point
  3. これで EC2 インスタンスに EFS ファイルシステムがマウントされたので、ファイルを作成することができます。

    1. ディレクトリを変更します。

      $ cd ~/efs-mount-point
    2. ディレクトリの内容を一覧表示します。

      $ ls -al

      これは空である必要があります。

      drwxr-xr-x 2 root root 4096 Dec 29 22:33 . drwx------ 4 ec2-user ec2-user 4096 Dec 29 22:54 ..

    3. ファイルシステムのルートディレクトリは、作成時に root ユーザーが所有し、root ユーザーによって書き込みが可能なため、ファイルを追加する権限を変更する必要があります。

      $ sudo chmod go+rw .

      ls -al コマンドを実行すると、権限が変更されたことがわかります。

      drwxrwxrwx 2 root root 4096 Dec 29 22:33 . drwx------ 4 ec2-user ec2-user 4096 Dec 29 22:54 ..
    4. テキストファイルを作成します。

      $ touch test-file.txt
    5. ディレクトリのコンテンツを一覧表示します。

      $ ls -l

これで、EFS ファイルシステムが正常に作成され、VPC 内の EC2 インスタンスにマウントされました。

マウントしたファイルシステムは、再起動後も保持されません。ディレクトリを自動的に再マウントするには、fstab ファイルを使用します。Auto Scaling グループを使用して EC2 インスタンスを起動する場合は、起動設定でスクリプトを設定することもできます。

ステップ 4: クリーンアップする

作成したリソースが不要になった場合は、削除する必要があります。これは CLI で行うことができます。

  • EC2 リソース (EC2 インスタンスと 2 つのセキュリティグループ) を削除します。マウントターゲットを削除すると、Amazon EFS はネットワークインタフェースを削除します。

  • EFS リソース (ファイルシステム、マウントターゲット) を削除します。

このチュートリアルで作成した AWS リソースを削除するには
  1. このチュートリアルのために作成した EC2 インスタンスを終了します。

    $ aws ec2 terminate-instances \ --instance-ids instance-id \ --profile adminuser

    コンソールを使用して EC2 リソースを削除することもできます。手順については、「インスタンスの終了」を参照してください。

  2. マウントターゲットを削除します。

    ファイルシステムを削除する前に、そのファイルシステム用に作成されたマウントターゲットを削除する必要があります。マウントターゲットのリストを取得するには、describe-mount-targets CLI コマンドを使用します。

    $ aws efs describe-mount-targets \ --file-system-id file-system-ID \ --profile adminuser \ --region aws-region

    次に、delete-mount-target CLI コマンドを使用してマウントターゲットを削除します。

    $ aws efs delete-mount-target \ --mount-target-id ID-of-mount-target-to-delete \ --profile adminuser \ --region aws-region
  3. (オプション) 作成した 2 つのセキュリティグループを削除します。セキュリティグループを作成するための料金はかかりません。

    EC2 インスタンスのセキュリティグループを削除する前に、まずマウントターゲットのセキュリティグループを削除する必要があります。マウントターゲットのセキュリティグループには、EC2 セキュリティグループを参照するルールがあります。したがって、EC2 インスタンスのセキュリティグループを最初に削除することはできません。

    手順については、「Amazon EC2 ユーザーガイド」の「セキュリティグループを削除する」を参照してください。

  4. delete-file-system CLI コマンドを使用してファイルシステムを削除します。describe-file-systems CLI コマンドを使用すると、ファイルシステムのリストを取得できます。レスポンスからファイルシステム ID を取得できます。

    aws efs describe-file-systems \ --profile adminuser \ --region aws-region

    ファイルシステム ID を指定してファイルシステムを削除します。

    $ aws efs delete-file-system \ --file-system-id ID-of-file-system-to-delete \ --region aws-region \ --profile adminuser