#1.AWS CLIのセットアップ#
default プロファイルを作成する。
aws configure --profile default
AWS Access Key ID [****************S3OI]:
AWS Secret Access Key [****************Hl/8]:
Default region name [ap-northeast-1]:
Default output format [json]:
#2.EC2リソースの準備#
##2-1.セキュリティグループの作成##
EC2用のセキュリティグループ (ec2-efs-sg) の作成
aws ec2 create-security-group --group-name ec2-efs-sg --description ec2-efs-sg --vpc-id <vpc-id>
{
"GroupId": "sg-0477dba8701c82358"
}
EC2用のセキュリティグループ (efs-ec2-sg) の作成
aws ec2 create-security-group --group-name efs-ec2-sg --description efs-ec2-sg --vpc-id <vpc-id>
{
"GroupId": "sg-077ebe172984f9ba6"
}
作成されたかセキュリティグループをそれぞれ確認する
aws ec2 describe-security-groups --group-ids <GroupId>
{
"SecurityGroups": [
{
"IpPermissionsEgress": [
{
"IpProtocol": "-1",
"PrefixListIds": [],
"IpRanges": [
{
"CidrIp": "0.0.0.0/0"
}
],
"UserIdGroupPairs": [],
"Ipv6Ranges": []
}
],
"Description": "ec2-efs-sg",
"IpPermissions": [],
"GroupName": "ec2-efs-sg",
"VpcId": "<VpcId>",
"OwnerId": "<OwnerId>",
"GroupId": "<GroupId>"
}
]
}
##2-2.セキュリティグループにルールを追加する##
EC2側のセキュリティグループにルールを追加する。(ec2-efs-sg)
aws ec2 authorize-security-group-ingress --group-id <group-id> --protocol tcp --port 22 --cidr 0.0.0.0/0
efs側のセキュリティグループにルールを追加する。(efs-ec2-sg)
aws ec2 authorize-security-group-ingress --group-id <group-id> --protocol tcp --port 2049 --source-group <source-group ID>
大きな反応はないので、ルールが追加されたかそれぞれ確認する。
aws ec2 describe-security-groups --group-id <group-id>
{
"SecurityGroups": [
{
"IpPermissionsEgress": [
{
"IpProtocol": "-1",
"PrefixListIds": [],
"IpRanges": [
{
"CidrIp": "0.0.0.0/0"
}
],
"UserIdGroupPairs": [],
"Ipv6Ranges": []
}
],
"Description": "ec2-efs-sg",
"IpPermissions": [
{
"PrefixListIds": [],
"FromPort": 22,
"IpRanges": [
{
"CidrIp": "0.0.0.0/0"
}
],
"ToPort": 22,
"IpProtocol": "tcp",
"UserIdGroupPairs": [],
"Ipv6Ranges": []
}
],
"GroupName": "efs-ec2-sg",
"VpcId": "<VpcId>",
"OwnerId": "<OwnerId>",
"GroupId": "<GroupId>"
}
]
}
##2-3.EC2 インスタンスを起動する##
EC2を配置するサブネットIDを確認しておきます。
aws ec2 describe-subnets
EC2 インスタンスを作成する。
aws ec2 run-instances --image-id <AMI ID> --count 1 --instance-type t2.micro --associate-public-ip-address --key-name <key-name> --security-group-ids <security-group-ids> --subnet-id <VPC subnet ID>
"InstanceId": "i-0b74bccd242bbea63",
接続するための、パブリックIP、パブリックDNSを確認しておく。
aws ec2 describe-instances --instance-ids <InstanceId>
"PublicIp": "<PublicIp>",
"PublicDnsName": "<PublicDNS>",
#3.EFSリソースの作成#
##3-1.EFSファイルシステムを作成する##
aws efs create-file-system --creation-token FileSystemForWalkthrough1
"FileSystemId": "fs-f25534d3",
##3-2.ライフサイクル管理の有効化(オプション)##
ライフサイクル管理を有効にします。
なお、AmazonLinux2を利用してやりましたが、最近リリースされた機能のため、CLIが最新でないとできません。
aws efs put-lifecycle-configuration --file-system-id fs-f25534d3 --lifecycle-policies TransitionToIA=AFTER_30_DAYS
##3-3.マウントターゲットを作成する##
aws efs create-mount-target --file-system-id <file-system-id> --subnet-id <subnet-id> --security-group <efs-ec2 security-group>
#4.EFS ファイルシステムを EC2 インスタンスにマウントしてする#
##4-1.NFS クライアントのインストール##
EC2インスタンスに接続し、NFS クライアントをインストールします。
sudo yum -y install nfs-utils
##4-2.EC2 インスタンスへのファイルシステムをマウント##
ディレクトリを作成し、EC2インスタンスへファイルシステムをへマウントします。
mkdir ~/efs-mount-point
sudo mount -t nfs -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport <mount-target-DNS>:/ ~/efs-mount-point
cd ~/efs-mount-point
#5.テストする#
ディレクトリを移動する。
cd ~/efs-mount-point
ls -la
drwxr-xr-x 2 root root 6144 Jul 17 05:59 .
drwx------ 4 ec2-user ec2-user 118 Jul 17 07:46 ..
ファイルシステムのルートディレクトリは、作成時に root ユーザーが所有し、root ユーザーによって書き込みが可能なため、ファイルを追加する権限を変更する必要があります。
sudo chmod go+rw .
ls -la
drwxrwxrwx 2 root root 6144 Jul 17 05:59 .
drwx------ 4 ec2-user ec2-user 118 Jul 17 07:46 ..
ファイルを作成してみる。
touch test-file.txt
ls -l
-rw-rw-r-- 1 ec2-user ec2-user 0 Jul 17 07:55 test.txt