教程:使用创建EFS文件系统并将其挂载到EC2实例上 AWS CLI - Amazon Elastic File System

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

教程:使用创建EFS文件系统并将其挂载到EC2实例上 AWS CLI

创建加密EFS文件系统,将其挂载到您的EC2实例上VPC,然后使用测试设置 AWS CLI。

注意

开始使用在本教程中,您将使用控制台创建 Amazon EC2 和EFS资源。在本教程中,您将使用 AWS CLI 来做同样的事情,主要是为了熟悉 Amazon。EFS API

在本教程中,你将在自己的账户中创建以下 AWS 资源:

  • 亚马逊EC2资源:

    • 两个安全组(用于您的EC2实例和EFS文件系统)。

      您可以将规则添加到这些安全组中,以授权适当的入站/出站访问。这样做可以EC2instance让你使用标准的 NFSv4 .1 TCP 端口通过装载目标连接到文件系统。

    • 你中的一个EC2实例VPC。

  • 亚马逊EFS资源:

    • 文件系统。

    • 文件系统的挂载目标。

      要在EC2实例上装载文件系统,您需要在中创建挂载目标VPC。您可以在中的每个可用区中创建一个挂载目标VPC。有关更多信息,请参阅 亚马逊是如何EFS运作的

然后,在您的EC2实例上测试文件系统。教程结尾处的清理步骤为您提供了删除这些资源的信息。

本教程在美国西部(俄勒冈)区域创建了所有这些资源 (us-west-2)。无论 AWS 区域 您使用哪种方式,请务必始终如一地使用它。您的所有资源(您的VPC、资源和EC2EFS资源)都必须处于相同状态。 AWS 区域

先决条件

  • 您可以使用您的根凭证 AWS 账户 登录控制台并尝试入门练习。但是, AWS Identity and Access Management (IAM) 建议您不要使用您的根证书 AWS 账户。而是在您的账户中创建一个管理员用户,并使用这些凭证来管理您的账户中的资源。而是在您的账户中创建一个管理员用户,并使用这些凭证来管理您的账户中的资源。有关更多信息,请参阅《用户指南》中的 “AWS IAM Identity Center 为IAM身份中心用户分配 AWS 账户 访问权限”。

  • 您可以使用在账户中创建的默认值VPC或自定义VPC值。在本演练中,默认VPC配置有效。但是,如果您使用自定义VPC,请验证以下内容:

  • 您需要设置 AWS CLI 并添加管理员用户配置文件。

设置 AWS CLI

按照以下说明设置 AWS CLI 和用户配置文件。

要设置 AWS CLI
  1. 下载并配置 AWS CLI。有关说明,请参阅《AWS Command Line Interface 用户指南》 AWS CLI中的 “入门”。

  2. 设置配置文件。

    您将用户凭据存储在 AWS CLI config文件中。本教程中的示例CLI命令指定管理员用户配置文件。在 config 文件中创建 adminuser 配置文件。也可以在 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资源

在此步骤中,您将执行以下操作:

  • 创建两个安全组。

  • 在安全组中添加规则以授权额外访问。

  • 启动 EC2 实例。您将在下一步中在此实例上创建并装载EFS文件系统。

步骤 1.1:创建两个安全组

在本节中,您将在中VPC为您的EC2实例和EFS挂载目标创建安全组。在本教程的稍后部分,您将这些安全组分配给EC2实例和EFS挂载目标。有关安全组的信息,请参阅适用于 Linux 实例的 Amazon EC2 安全组

创建安全组
  1. 使用create-security-groupCLI以下命令创建两个安全组:

    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身份证件。

      $ 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

    两个安全组都应当只有一条允许所有出站流量的出站规则。

    在下一节中,您将授权额外访问,以便:

    • 使您能够连接到您的EC2实例。

    • 启用EC2实例和EFS挂载目标之间的流量(在本教程的后面部分将这些安全组与挂载目标相关联)。

步骤 1.2:在安全组中添加规则以授权入站/出站访问

在该步骤中,您将在安全组中添加规则以授权入站/出站访问。

添加规则
  1. 授权传入的 Secure Shell (SSH) 连接到您的EC2实例的安全组 (efs-walkthrough1-ec2-sg),这样您就可以SSH从任何主机使用连接到您的EC2实例。

    $ 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命令来添加入站规则。

    $ 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实例时需要提供的以下信息:

    • 密钥对名称。有关创建密钥对的说明,请参阅亚马逊EC2用户指南中的为您的亚马逊EC2实例创建密钥对

    • 您要启动的 Amazon 系统映像 (AMI) 的 ID。

      用于启动EC2实例的 AWS CLI 命令需要您要部署的 Amazon 系统映像 (AMI) 的 ID 作为参数。本练习使用亚马逊 Linux HVM AMI。

      注意

      您可以使用大多数基于 Linux 的通用型AMIs。如果您使用其他 LinuxAMI,请确保使用发行版的软件包管理器在实例上安装NFS客户端。此外,您可能还需要添加一些软件包。

      对于亚马逊 Linux HVMAMI,你可以在亚马逊 Linux IDs 上找到最新版本AMI。您可以按如下方式从 Amazon Linux AMI IDs 表中选择 ID 值:

      • 选择美国西部(俄勒冈)区域。本演练假定您将在美国西部(俄勒冈州)区域(us-west-2)创建所有资源。

      • 选择EBS支持的 HVM 64 位类型(因为在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 CLIcreate-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. 确保您已获得以下信息:

    • 您为其创建挂载目标的文件系统 (例如 fs-example) 的 ID。

    • VPC您在其中启动EC2实例的子网 ID 步骤 1:创建EC2资源

      在本教程中,您在启动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 用户指南中的 Connect 到您的EC2实例

  2. 使用会SSH话在EC2实例上执行以下命令:

    1. (可选) 获取更新并重启。

      $ sudo yum -y update $ sudo reboot

      重启后,重新连接到您的EC2实例。

    2. 安装NFS客户端。

      $ sudo yum -y install nfs-utils
      注意

      如果您在启动实例时选择亚马逊 Linu AMI x AMI 2016.03.0 A EC2 mazon Linux,则无需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. 刚创建的文件系统的根目录由根用户拥有并且只能由根用户写入,因此您需要更改权限以添加文件。

      $ 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文件系统并将其挂载到您的EC2实例上VPC。

重启后挂载的文件系统将不复存在。为了自动重新挂载目录,可以使用 fstab 文件。如果您使用 Auto Scaling 组启动EC2实例,则还可以在启动配置中设置脚本。

步骤 4:清除

如果不再需要使用创建的资源,应将其删除。你可以用CLI.

  • 移除EC2资源(EC2实例和两个安全组)。当您EFS删除挂载目标时,Amazon 会删除网络接口。

  • 移除EFS资源(文件系统、挂载目标)。

删除在本演练中创建的 AWS 资源
  1. 终止您为本教程创建的EC2实例。

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

    您也可以使用控制台删除EC2资源。有关说明,请参阅终止实例

  2. 删除挂载目标。

    只有在删除为文件系统创建的挂载目标后才能删除文件系统。您可以使用describe-mount-targetsCLI命令获取挂载目标列表。

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

    然后使用delete-mount-targetCLI命令删除挂载目标。

    $ aws efs delete-mount-target \ --mount-target-id ID-of-mount-target-to-delete \ --profile adminuser \ --region aws-region
  3. (可选) 删除您创建的两个安全组。创建安全组不需要支付费用。

    在删除EC2实例的安全组之前,必须先删除挂载目标的安全组。挂载目标的安全组有一条引用该EC2安全组的规则。因此,您不能先删除EC2实例的安全组。

    有关说明,请参阅 Amazon EC2 用户指南中的删除您的安全组

  4. 使用delete-file-systemCLI命令删除文件系统。您可以使用describe-file-systemsCLI命令获取文件系统的列表。可以从响应中获得文件系统 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