本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
教程:使用 Amazon CLI 创建 EFS 文件系统并将其挂载到 EC2 实例上
创建加密的 EFS 文件系统,将其挂载到 VPC 中的 EC2 实例上,然后使用 Amazon CLI 测试设置。
注意
在开始使用教程中,您使用控制台创建 Amazon EC2 和 EFS 资源。在本教程中,您将使用 Amazon CLI 创建它们,主要目的是熟悉 Amazon EFS API。
在本教程中,您将在您的账户中创建以下 Amazon 资源:
-
Amazon EC2 资源:
-
两个安全组(一个用于 EC2 实例,一个用于 EFS 文件系统)。
您可以将规则添加到这些安全组中,以授权适当的入站/出站访问。这样做允许您的 EC2 实例使用标准 NFSv4.1 TCP 端口,通过挂载目标连接到文件系统。
-
您的 VPC 中的 EC2 实例。
-
-
Amazon EFS 资源:
-
文件系统。
-
文件系统的挂载目标。
为了将文件系统挂载到 EC2 实例上,需要在您的 VPC 中创建一个挂载目标。您可以在 VPC 中的每个可用区分别创建一个挂载目标。有关更多信息,请参阅 Amazon EFS 的工作原理。
-
然后,在 EC2 实例上测试文件系统。教程结束时的清理步骤提供了删除这些资源的信息。
本教程在美国西部(俄勒冈州)区域(us-west-2
)创建所有这些资源。不论使用哪个 Amazon Web Services 区域,都请确保使用方式一致。您的所有资源(您的 VPC、EC2 资源和 EFS 资源)必须位于同一 Amazon Web Services 区域中。
先决条件
-
您可以使用 Amazon Web Services 账户的根凭证登录到控制台并尝试入门练习。但是,Amazon Identity and Access Management(IAM)建议您不要使用您的 Amazon Web Services 账户的根凭证。而是在您的账户中创建一个管理员用户,并使用这些凭证来管理您的账户中的资源。而是在您的账户中创建一个管理员用户,并使用这些凭证来管理您的账户中的资源。有关更多信息,请参阅《Amazon IAM Identity Center 用户指南》中的为 IAM Identity Center 用户分配 Amazon Web Services 账户访问权限。
-
您可以使用默认 VPC,也可以使用在您的账户中创建的自定义 VPC。对于本演练,可以使用默认的 VPC 配置。但是,如果您使用自定义 VPC,请验证以下情况:
-
已启用 DNS 主机名。有关更多信息,请参阅《Amazon VPC 用户指南》中的 VPC 中的 DNS 属性。
-
Internet 网关已连接到您的 VPC。有关更多信息,请参阅 Amazon VPC 用户指南中的使用互联网网关连接到互联网。
-
已配置 VPC 子网来为 VPC 子网中启动的实例请求公有 IP 地址。有关更多信息,请参阅《Amazon VPC 用户指南》中的为 VPC 和子网分配 IP 地址。
-
VPC 路由表包含一个规则,以将 Internet 范围的所有流量发送到 Internet 网关。
-
-
您需要设置 Amazon CLI 并添加 adminuser 配置文件。
设置 Amazon CLI
按照以下说明来设置 Amazon CLI 和用户配置文件。
设置 Amazon CLI
-
下载并配置 Amazon CLI。有关说明,请参阅《Amazon Command Line Interface User Guide》中的 Get started with the Amazon CLI。
-
设置配置文件。
将用户凭证存储在 Amazon CLI
config
文件中。本教程中的示例 CLI 命令指定 adminuser 配置文件。在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上述配置文件还设置默认 Amazon Web Services 区域。如果没有在 CLI 命令中指定区域,则假定为 us-west-2 区域。
-
在命令提示符处输入以下命令来验证设置。两个命令都没有显式提供凭证,所以将使用默认配置文件的凭证。
-
尝试 help 命令
您也可以通过添加
--profile
参数来显式指定用户配置文件。aws help
aws help \ --profile adminuser
-
步骤 1:创建 EC2 资源
在此步骤中,您将执行以下操作:
-
创建两个安全组。
-
在安全组中添加规则以授权额外访问。
-
启动一个 EC2 实例。在下一步中,您将创建一个 EFS 文件系统并将其挂载到该实例上。
步骤 1.1:创建两个安全组
在本部分中,您将在 VPC 中为 EC2 实例和 EFS 挂载目标创建安全组。在教程的稍后部分,您要将这些安全组分配给 EC2 实例和 EFS 挂载目标。有关安全组的信息,请参阅 Linux 实例的 Amazon EC2 安全组。
创建安全组
-
使用
create-security-group
CLI 命令创建两个安全组:-
为您的 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
-
为 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" }
-
-
验证安全组。
aws ec2 describe-security-groups \ --group-ids
list of security group IDs separated by space
\ --profileadminuser
\ --region us-west-2两个安全组都应当只有一条允许所有出站流量的出站规则。
在下一节中,您将授权额外访问,以便:
-
您能够连接到 EC2 实例。
-
启用 EC2 实例与 EFS 挂载目标之间的流量(在本教程的稍后部分,您要将这些安全组与它们关联)。
-
步骤 1.2:在安全组中添加规则以授权入站/出站访问
在该步骤中,您将在安全组中添加规则以授权入站/出站访问。
添加规则
-
授权与 EC2 实例安全组 (
efs-walkthrough1-ec2-sg
) 的传入安全 Shell (SSH) 连接,以便可以从任何主机使用 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
-
授权到 EFS 挂载目标安全组(
efs-walkthrough1-mt-sg
)的入站访问。在命令提示符处,使用 adminuser 配置文件运行下面的 Amazon 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-groupID of the security group created for EC2 instance
\ --profile adminuser \ --region us-west-2 -
确认两个安全组现在都授权了入站访问。
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 实例
-
收集在启动 EC2 实例时需要提供的以下信息:
-
密钥对名称。有关创建密钥对的说明,请参阅《Amazon EC2 用户指南》中的为您的 Amazon EC2 实例创建密钥对。
-
要启动的 Amazon 系统映像 (AMI) 的 ID。
您用来启动 EC2 实例的 Amazon CLI 命令需要您想要作为参数部署的亚马逊机器映像(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-2)创建所有资源。
-
选择 EBS 支持的 HVM 64 位类型(因为您在 CLI 命令中指定
t2.micro
实例类型,它不支持实例存储)。
-
-
您为 EC2 实例创建的安全组的 ID。
-
Amazon Web Services 区域。本演练使用 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 实例上。
-
-
-
运行以下 Amazon CLI
run-instances
命令来启动 EC2 实例。$ aws ec2 run-instances \ --image-id
AMI ID
\ --count 1 \ --instance-type t2.micro \ --associate-public-ip-address \ --key-namekey-pair-name
\ --security-group-idsID of the security group created for EC2 instance
\ --subnet-idVPC subnet ID
\ --region us-west-2 \ --profile adminuser -
记下
run-instances
命令返回的实例 ID。 -
您创建的 EC2 实例必须有公有 DNS 名称,以便用来连接 EC2 实例并向其中挂载文件系统。公有 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 的配置。有关更多信息,请参阅 先决条件。
-
(可选)将一个名称分配给您创建的 EC2 实例。为此,请添加一个标签,其中键名和值设置为要分配给实例的名称。您可以使用以下 Amazon 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
标签。-
在命令提示符处,运行以下 Amazon 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" } ] }
-
记下
FileSystemId
的值。在步骤 2.3:创建挂载目标中为该文件系统创建挂载目标时需要该值。
-
步骤 2.2:启用生命周期管理
在该步骤中,您将在文件系统上启用生命周期管理,以便使用 EFS 不频繁访问(IA)存储类。要了解更多信息,请参阅管理 EFS 文件系统的存储生命周期策略和EFS 存储类。
启用生命周期管理
在命令提示符下,运行以下 Amazon 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 实例的可用区中为文件系统创建一个挂载目标。
-
确保您已获得以下信息:
-
您为其创建挂载目标的文件系统 (例如
fs-example
) 的 ID。 -
您在步骤 1:创建 EC2 资源中启动了 EC2 实例的 VPC 子网 ID。
在本教程中,您在启动了 EC2 实例的同一子网中创建挂载目标,因此您需要子网 ID(例如,
subnet-example
)。 -
在上一步中您为挂载目标创建的安全组的 ID。
-
-
在命令提示符下,运行以下 Amazon CLI
create-mount-target
命令。$ aws efs create-mount-target \ --file-system-id
file-system-id
\ --subnet-idsubnet-id
\ --security-groupID-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" }
-
您还可以使用
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 客户端
-
连接到您的 EC2 实例。有关更多信息,请参阅《Amazon EC2 用户指南》中的连接到您的 EC2 实例。
-
在 EC2 实例上通过使用 SSH 会话执行以下命令:
-
(可选) 获取更新并重启。
$
sudo yum -y update
$ sudo reboot重启后,重新连接到您的 EC2 实例。
-
安装 NFS 客户端。
$
sudo yum -y install nfs-utils
注意
如果在启动 EC2 实例时选择 Amazon Linux AMI 2016.03.0 Amazon Linux AMI,则不需要安装
nfs-utils
,因为它已默认包含在此 AMI 中。
-
步骤 3.3:将文件系统挂载到 EC2 实例上并测试
现在,将文件系统挂载到 EC2 实例上。
-
创建一个目录 ("efs-mount-point")。
$
mkdir ~/efs-mount-point
-
挂载 EFS 文件系统。
$
sudo mount -t nfs -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport
mount-target-DNS
:/ ~/efs-mount-pointEC2 实例可以将挂载目标的 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 -
您已经将 EFS 文件系统挂载到 EC2 实例上,接下来就可以创建文件了。
-
更改目录。
$
cd ~/efs-mount-point
-
列出目录的内容。
$
ls -al
它应该是空的。
drwxr-xr-x 2 root root 4096 Dec 29 22:33 . drwx------ 4 ec2-user ec2-user 4096 Dec 29 22:54 ..
-
刚创建的文件系统的根目录由根用户拥有并且只能由根用户写入,因此您需要更改权限以添加文件。
$
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 ..
-
创建 文本文件。
$
touch test-file.txt
-
列出目录的内容。
$
ls -l
-
现在,您已成功创建一个 EFS 文件系统并将其挂载到您的 VPC 中的 EC2 实例上。
重启后挂载的文件系统将不复存在。为了自动重新挂载目录,可以使用 fstab
文件。如果您使用 Auto Scaling 组来启动 EC2 实例,则也可以在启动配置中设置脚本。
步骤 4:清除
如果不再需要使用创建的资源,应将其删除。可以使用 CLI 删除。
-
移除 EC2 资源(EC2 实例和两个安全组)。当您删除挂载目标时,Amazon EFS 会删除网络接口。
-
删除 EFS 资源(文件系统、挂载目标)。
删除本演练中创建的 Amazon 资源
-
终止为本教程创建的 EC2 实例。
$ aws ec2 terminate-instances \ --instance-ids
instance-id
\ --profile adminuser您还可以使用控制台删除 EC2 资源。有关说明,请参阅终止实例。
-
删除挂载目标。
只有在删除为文件系统创建的挂载目标后才能删除文件系统。可以使用
describe-mount-targets
CLI 命令获得挂载目标列表。$ aws efs describe-mount-targets \ --file-system-id
file-system-ID
\ --profile adminuser \ --regionaws-region
然后,使用
delete-mount-target
CLI 命令删除挂载目标。$ aws efs delete-mount-target \ --mount-target-id
ID-of-mount-target-to-delete
\ --profile adminuser \ --regionaws-region
-
(可选) 删除您创建的两个安全组。创建安全组不需要支付费用。
必须先删除挂载目标的安全组,然后再删除 EC2 实例的安全组。挂载目标的安全组包含一个引用 EC2 安全组的规则。因此,不能先删除 EC2 实例的安全组。
有关说明,请参阅《Amazon EC2 User Guide》中的 Delete your security group。
-
通过
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
\ --regionaws-region
\ --profile adminuser