本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
教程:使用创建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,请验证以下内容:
-
DNS主机名已启用。有关更多信息,请参阅《Amazon VPC 用户指南》VPC中的DNS属性。
-
互联网网关已连接到您的VPC。有关更多信息,请参阅《亚马逊VPC用户指南》中的使用互联网网关连接互联网。
-
VPC子网配置为请求在VPC子网中启动的实例的公有 IP 地址。有关更多信息,请参阅 Amazon VPC 用户指南中的您VPCs和子网的 IP 地址。
-
VPC路由表包括一条规则,用于将所有互联网流量发送到互联网网关。
-
-
您需要设置 AWS CLI 并添加管理员用户配置文件。
设置 AWS CLI
按照以下说明设置 AWS CLI 和用户配置文件。
要设置 AWS CLI
-
下载并配置 AWS CLI。有关说明,请参阅《AWS Command Line Interface 用户指南》 AWS CLI中的 “入门”。
-
设置配置文件。
您将用户凭据存储在 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 区域。
-
在命令提示符处输入以下命令来验证设置。两个命令都没有显式提供凭证,所以将使用默认配置文件的凭证。
-
尝试 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身份证件。$ 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:在安全组中添加规则以授权入站/出站访问
在该步骤中,您将在安全组中添加规则以授权入站/出站访问。
添加规则
-
授权传入的 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
-
授予对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-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实例时需要提供的以下信息:
-
密钥对名称。有关创建密钥对的说明,请参阅亚马逊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实例上挂载文件系统。
-
-
-
运行以下 AWS 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实例必须具有用于连接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有关更多信息,请参阅 先决条件 。
-
(可选)为您创建的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
标签。-
在命令提示符处,运行以下 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" } ] }
-
记下
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实例的可用区中为文件系统创建挂载目标。
-
确保您已获得以下信息:
-
您为其创建挂载目标的文件系统 (例如
fs-example
) 的 ID。 -
VPC您在其中启动EC2实例的子网 ID 步骤 1:创建EC2资源。
在本教程中,您在启动EC2实例的同一子网中创建挂载目标,因此您需要子网 ID(例如
subnet-example
)。 -
在上一步中您为挂载目标创建的安全组的 ID。
-
-
在命令提示符处,运行以下 AWS 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 用户指南中的 Connect 到您的EC2实例。
-
使用会SSH话在EC2实例上执行以下命令:
-
(可选) 获取更新并重启。
$
sudo yum -y update
$ sudo reboot重启后,重新连接到您的EC2实例。
-
安装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实例上。
-
创建目录 (” 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 -
现在,您已经在EC2实例上安装了EFS文件系统,可以创建文件了。
-
更改目录。
$
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文件系统并将其挂载到您的EC2实例上VPC。
重启后挂载的文件系统将不复存在。为了自动重新挂载目录,可以使用 fstab
文件。如果您使用 Auto Scaling 组启动EC2实例,则还可以在启动配置中设置脚本。
步骤 4:清除
如果不再需要使用创建的资源,应将其删除。你可以用CLI.
-
移除EC2资源(EC2实例和两个安全组)。当您EFS删除挂载目标时,Amazon 会删除网络接口。
-
移除EFS资源(文件系统、挂载目标)。
删除在本演练中创建的 AWS 资源
-
终止您为本教程创建的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 用户指南中的删除您的安全组。
-
使用
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