Продолжение.
Начало – в посте AWS: миграция RTFM, часть #1: ручное создание инфраструктуры – VPC, подсети, IGW, NAT GW, маршруты и EC2.
Далее мы создадим S3 корзины (для CDN и хранения логов), MariaDB RDS базу данных (для будущего WordPress на Zeus) и Elastic Block Storage – в котором будут храниться данные (файлы WordPress) для подключения к Zeus.
Содержание этой части:
Содержание
AIM
Добавим пользователя AIM, которому будет разрешено всё в будущей инфраструктуре – позже он будет использоваться при создании стека CloudFormation, а сейчас через него мы разрешим доступ к S3, RDS и так далее.
Создаём группу:
$ aws iam create-group --group-name rtfm_migrate { "Group": { "Path": "/", "CreateDate": "2016-08-29T14:12:58.061Z", "GroupId": "AGPAIOKQIEB5VMNDRN4KE", "Arn": "arn:aws:iam::264418146286:group/rtfm_migrate", "GroupName": "rtfm_migrate" } }
Пользователя:
$ aws iam create-user --user-name rtfm_migrate { "User": { "UserName": "rtfm_migrate", "Path": "/", "CreateDate": "2016-08-29T14:15:05.952Z", "UserId": "AIDAIJ54QWZEURLNSAP5E", "Arn": "arn:aws:iam::264418146286:user/rtfm_migrate" } }
Добавляем его в группу:
$ aws iam add-user-to-group --user-name rtfm_migrate --group-name rtfm_migrate
Проверяем:
$ aws iam get-group --group-name rtfm_migrate { "Group": { "Path": "/", "CreateDate": "2016-08-29T14:12:58Z", "GroupId": "AGPAIOKQIEB5VMNDRN4KE", "Arn": "arn:aws:iam::264418146286:group/rtfm_migrate", "GroupName": "rtfm_migrate" }, "Users": [ { "UserName": "rtfm_migrate", "Path": "/", "CreateDate": "2016-08-29T14:15:05Z", "UserId": "AIDAIJ54QWZEURLNSAP5E", "Arn": "arn:aws:iam::264418146286:user/rtfm_migrate" } ] }
Проверяем разрешенные политики пользователя:
$ aws iam list-user-policies --user-name rtfm_migrate { "PolicyNames": [] }
Подключаем политику arn:aws:iam::aws:policy/AdministratorAccess – “всё и везде”:
$ aws iam attach-user-policy --user-name rtfm_migrate --policy-arn arn:aws:iam::aws:policy/AdministratorAccess
Проверяем:
$ aws iam list-attached-user-policies --user-name rtfm_migrate { "AttachedPolicies": [ { "PolicyName": "AdministratorAccess", "PolicyArn": "arn:aws:iam::aws:policy/AdministratorAccess" } ] }
S3
Потребуется как минимум три корзины – для бекапов, CloudFront CDN и логов.
Создаём их:
$ aws s3 mb s3://rtfmbackup make_bucket: s3://rtfmbackup/ $ aws s3 mb s3://rtfmcdn make_bucket: s3://rtfmcdn/ $ aws s3 mb s3://rtfmlogs make_bucket: s3://rtfmlogs/
Проверяем:
$ aws s3api list-buckets --query '[Buckets[*]]' --output text | grep rtfm 2016-08-29T08:43:13.000Z rtfmbackup 2016-08-29T08:43:20.000Z rtfmcdn 2016-08-29T08:43:25.000Z rtfmlogs
Корзина rtfmcdn будет использоваться для доступа к статичным файлам для всех, поэтому – проверяем права доступа:
$ aws s3api get-bucket-acl --bucket rtfmcdn { "Owner": { "DisplayName": "user", "ID": "a8e627b97012bf714c8308e668fe092628e6e69006499397b6cb8f337322a7b1" }, "Grants": [ { "Grantee": { "Type": "CanonicalUser", "DisplayName": "user", "ID": "a8e627b97012bf714c8308e668fe092628e6e69006499397b6cb8f337322a7b1" }, "Permission": "FULL_CONTROL" } ] }
Напомню – по умолчанию доступ к корзине (bucket-level permissions) и объектам в ней (object level) запрещён всем, кроме владельца:
$ aws s3 cp empty.html s3://rtfmcdn/ upload: ./empty.html to s3://rtfmcdn/empty.html $ curl https://s3-eu-west-1.amazonaws.com/rtfmcdn/empty.html <?xml version="1.0" encoding="UTF-8"?> <Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>74633A6F245429F9</RequestId><HostId>2wFrAHw1LF3+Ql9zEG4jOljyeBUcWZCdIWgxTBrIAeX7aJJ1BDwtOykUNq+VrfPG5rND6dHvBQc=</HostId></Error>
Сгенерировать policy можно с помощью AWS Policy Generator.
Сохраним в json:
$ cat s3_rtfm_cdn_policy.json { "Id": "Policy1472461631550", "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1472461623419", "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::rtdmcdn/*", "Principal": "*" } ] }
И с помощью put-bucket-policy
– добавляем правило:
$ aws s3api put-bucket-policy --bucket rtfmcdn --policy file://s3_rtfm_cdn_policy.json
Проверяем:
$ aws s3api get-bucket-policy --bucket rtfmcdn { "Policy": "{\"Version\":\"2012-10-17\",\"Id\":\"Policy1472461631550\",\"Statement\":[{\"Sid\":\"Stmt1472461623419\",\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":\"s3:GetObject\",\"Resource\":\"arn:aws:s3:::rtfmcdn/*\"}]}" }
$ curl https://s3-eu-west-1.amazonaws.com/rtfmcdn/empty.html This is empty file
Далее – генерируем политику доступа для корзин rtfmbackup и rtfmlogs, используя пользователя AIM, которого создали в начале, и вписываем в JSON-файл:
$ cat s3_rtfm_aim_policy.json { "Id": "Policy1472480683447", "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1472480681830", "Action": "s3:*", "Effect": "Allow", "Resource": "arn:aws:s3:::rtfmbackup/*", "Principal": { "AWS": [ "arn:aws:iam::264418146286:user/rtfm_migrate" ] } } ] }
Добавляем к rtfmbackup и повторяем для logs (отредактировав строку "Resource"
):
$ aws s3api put-bucket-policy --bucket rtfmbackup --policy file://s3_rtfm_aim_policy.json
Проверяем:
$ aws s3api get-bucket-policy --bucket rtfmbackup { "Policy": "{\"Version\":\"2012-10-17\",\"Id\":\"Policy1472480683447\",\"Statement\":[{\"Sid\":\"Stmt1472480681830\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"arn:aws:iam::264418146286:user/rtfm_migrate\"},\"Action\":\"s3:*\",\"Resource\":\"arn:aws:s3:::rtfmbackup/*\"}]}" }
$ aws s3api get-bucket-policy --bucket rtfmlogs { "Policy": "{\"Version\":\"2012-10-17\",\"Id\":\"Policy1472480683447\",\"Statement\":[{\"Sid\":\"Stmt1472480681830\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"arn:aws:iam::264418146286:user/rtfm_migrate\"},\"Action\":\"s3:*\",\"Resource\":\"arn:aws:s3:::rtfmlogs/*\"}]}" }
Проверяем.
Добавляем файл:
$ aws s3 cp empty.html s3://rtfmbackup upload: ./empty.html to s3://rtfmbackup/empty.html
Пытаемся его получить напрямую:
$ curl https://s3-eu-west-1.amazonaws.com/rtfmbackup/empty.html <?xml version="1.0" encoding="UTF-8"?> <Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>27DE0EF704F9BFEC</RequestId><HostId>vqRepDmnPfVRrPmrhwFifgBHujVYBqGO/0fR8zmc7BUIY9rTvSw+CTJvYU56nszugIRdvhTGlWI=</HostId></Error>
И с помощью simulate-principal-policy:
$ aws iam simulate-principal-policy --policy-source-arn arn:aws:iam::264418146286:user/rtfm_migrate --action-names s3:GetObject --resource-arns arn:aws:s3:::rtfmbackup { "EvaluationResults": [ { "EvalDecision": "allowed", "MissingContextValues": [], "EvalActionName": "s3:GetObject", "MatchedStatements": [ { "SourcePolicyId": "AdministratorAccess", "StartPosition": { "Column": 17, "Line": 3 }, "EndPosition": { "Column": 6, "Line": 8 } } ], "EvalResourceName": "arn:aws:s3:::rtfmbackup" } ], "IsTruncated": false }
"EvalDecision": "allowed"
– ОК, права на доступ к корзине есть.
Получаем данные доступа для пользователя rtfm_migrate
:
$ aws iam create-access-key --user-name rtfm_migrate { "AccessKey": { "UserName": "rtfm_migrate", "Status": "Active", "CreateDate": "2016-08-29T15:48:43.463Z", "SecretAccessKey": "lqA***5vA", "AccessKeyId": "AKI***DXA" } }
И проверяем с авторизацией при помощи s3cmd:
$ ./s3cmd get s3://rtfmbackup/empty.html empty.html download: 's3://rtfmbackup/empty.html' -> 'empty.html' [1 of 1] 19 of 19 100% in 5s 3.44 B/s done
MariaDB RDS
Следующий шаг – создание инстанса сервера баз данных MariaDB.
Хороший FAQ тут>>>.
Сравнение Amazon Aurora и MariaDB RDS есть вот тут>>>.
Для RDS потребуется создать DB subnet group с двумя подсетями в разных Availability Zones.
Процесс выгглядит так:
- создаём вторую подсеть;
- группируем RDS подсети;
- создаём секьюрити группу;
- создаём DB инстанс.
Создаём вторую приватную подсеть в отличной от первой приватной подсети Availability-зоне для Multi-AZ deployment.
Напомню конфигурацию сети, созданную в предыдущей части:
- VPC:
--vpc-id vpc-1cc0477
8- публичная сеть:
subnet-04ae0d5c
- приватная сеть:
subnet-f7ae0daf
- публичная сеть:
Проверяем текущую зону имеющейся приватной подсети:
$ aws ec2 describe-subnets --subnet-id subnet-f7ae0daf --query '[Subnets[*].AvailabilityZone]' --output text eu-west-1b
Добавляем ещё одну, но в зоне eu-west-1a
:
$ aws ec2 create-subnet --vpc-id vpc-1cc04778 --cidr-block 10.0.3.0/24 --availability-zone eu-west-1a { "Subnet": { "VpcId": "vpc-1cc04778", "CidrBlock": "10.0.3.0/24", "State": "pending", "AvailabilityZone": "eu-west-1a", "SubnetId": "subnet-3b6df54d", "AvailableIpAddressCount": 251 } }
Добавляем теги:
$ aws ec2 create-tags --resources subnet-3b6df54d --tags Key=Name,Value=rtfm_migrate_priv_net2
С помощью create-db-subnet-group
создаём группу подсетей:
$ aws rds create-db-subnet-group --db-subnet-group-name rtfmdbs --db-subnet-group-description "RTFM MariaDB instance" --subnet-ids subnet-f7ae0daf subnet-3b6df54d { "DBSubnetGroup": { "Subnets": [ { "SubnetStatus": "Active", "SubnetIdentifier": "subnet-f7ae0daf", "SubnetAvailabilityZone": { "Name": "eu-west-1b" } }, { "SubnetStatus": "Active", "SubnetIdentifier": "subnet-3b6df54d", "SubnetAvailabilityZone": { "Name": "eu-west-1a" } } ], "DBSubnetGroupName": "rtfmdbs", "VpcId": "vpc-1cc04778", "DBSubnetGroupDescription": "RTFM MariaDB instance", "SubnetGroupStatus": "Complete" } }
VPC Security Group
DB security group controls access to a DB instance that is not in a VPC, a VPC security group controls access to a DB instance (or other AWS instances) inside a VPC, and an EC2 security group controls access to an EC2 instance.
Одна VPC Security Group уже имеется:
$ aws ec2 describe-security-groups --filters Name=vpc-id,Values=vpc-1cc04778 --query '[SecurityGroups[*].GroupId]' --output text sg-914e7ef6
Текущие правила в ней:
$ aws ec2 describe-security-groups --group-ids sg-914e7ef6 --query '[SecurityGroups[*].IpPermissions[*].{FromPort:FromPort,IpRanges:IpRanges}]' --output text 80 IPRANGES 0.0.0.0/0 None 22 IPRANGES 194.***.***.0/24 443 IPRANGES 0.0.0.0/0
Создаём новую группу, в которой разрешим доступ из приватной подсети, которая используется для EC2-инстанса Zeus:
$ aws ec2 create-security-group --group-name rtfm_rds_rivate --description "RTFM RDS DB access" --vpc-id vpc-1cc04778 { "GroupId": "sg-80d3d2e7" }
Добавляем правило для доступа к RDS из приватной посети для Zeus:
$ aws ec2 authorize-security-group-ingress --group-id sg-80d3d2e7 --protocol tcp --port 3306 --cidr 10.0.2.0/24
Создание RDS
Описание типов DB инстансов тут>>>.
Выбираем Burst. Хорошее сравнение Burstable vs. Fixed Performance есть тут>>>.
Создаём с помощью create-db-instance:
$ aws rds create-db-instance --db-instance-identifier rtfm-mariadb-1 --db-instance-class db.t2.small --engine mariadb --master-username setevoy --master-user-password p@ssw0rd --vpc-security-group-ids sg-80d3d2e7 --db-subnet-group-name rtfmdbs --multi-az --no-publicly-accessible --allocated-storage 5
Проверяем:
$ aws rds describe-db-instances --db-instance-identifier rtfm-mariadb-1 { "DBInstances": [ { "PubliclyAccessible": false, "MasterUsername": "setevoy", "MonitoringInterval": 0, "LicenseModel": "general-public-license", "VpcSecurityGroups": [ { "Status": "active", "VpcSecurityGroupId": "sg-80d3d2e7" } ], "InstanceCreateTime": "2016-09-03T09:37:15.501Z", "CopyTagsToSnapshot": false, "OptionGroupMemberships": [ { "Status": "in-sync", "OptionGroupName": "default:mariadb-10-0" } ], "PendingModifiedValues": { "MultiAZ": true }, "Engine": "mariadb", "MultiAZ": false, "DBSecurityGroups": [], "DBParameterGroups": [ { "DBParameterGroupName": "default.mariadb10.0", "ParameterApplyStatus": "in-sync" } ], "AutoMinorVersionUpgrade": true, "PreferredBackupWindow": "02:18-02:48", "DBSubnetGroup": { "Subnets": [ { "SubnetStatus": "Active", "SubnetIdentifier": "subnet-f7ae0daf", "SubnetAvailabilityZone": { "Name": "eu-west-1b" } }, { "SubnetStatus": "Active", "SubnetIdentifier": "subnet-3b6df54d", "SubnetAvailabilityZone": { "Name": "eu-west-1a" } } ], "DBSubnetGroupName": "rtfmdbs", "VpcId": "vpc-1cc04778", "DBSubnetGroupDescription": "RTFM MariaDB instance", "SubnetGroupStatus": "Complete" }, "ReadReplicaDBInstanceIdentifiers": [], "AllocatedStorage": 5, "BackupRetentionPeriod": 1, "PreferredMaintenanceWindow": "mon:22:19-mon:22:49", "Endpoint": { "HostedZoneId": "Z29XKXDKYMONMX", "Port": 3306, "Address": "rtfm-mariadb-1.chcmj9clr1dt.eu-west-1.rds.amazonaws.com" }, "DBInstanceStatus": "modifying", "EngineVersion": "10.0.24", "AvailabilityZone": "eu-west-1b", "StorageType": "standard", "DbiResourceId": "db-XSFKEBVS6OJ7QUJJYPUHYM4W3M", "CACertificateIdentifier": "rds-ca-2015", "StorageEncrypted": false, "DBInstanceClass": "db.t2.small", "DbInstancePort": 0, "DBInstanceIdentifier": "rtfm-mariadb-1" } ] }
Пробуем подключиться с рабочей машины:
$ telnet rtfm-mariadb-1.chcmj9clr1dt.eu-west-1.rds.amazonaws.com 3306 Trying 10.0.2.221...
ОК, разрешение имени происходит по внутреннему IP 10.0.2.221 – снаружи доступа нет.
Подключаемся на Bastion, и пробуем с него (публичная подсеть):
$ ssh [email protected] -i ~/.ssh/rtfm_migrate.pem # bash bash-4.3# telnet rtfm-mariadb-1.chcmj9clr1dt.eu-west-1.rds.amazonaws.com 3306 Trying 10.0.2.221...
ОК, теперь с Bastion – на Zeus:
bash-4.3# ssh [email protected] -i .ssh/rtfm_migrate.pem CoreOS stable (1068.9.0) Last login: Sat Sep 3 09:43:12 2016 from 10.0.1.243 core@ip-10-0-2-101 ~ $
Устанавливаем telnet
(привык я к нему).
Запускаем Toolbox/Fedora:
core@ip-10-0-2-101 ~ $ /usr/bin/toolbox latest: Pulling from library/fedora 2bf01635e2a0: Pull complete Digest: sha256:64a02df6aac27d1200c2572fe4b9949f1970d05f74d367ce4af994ba5dc3669e Status: Downloaded newer image for fedora:latest core-fedora-latest Spawning container core-fedora-latest on /var/lib/toolbox/core-fedora-latest. Press ^] three times within 1s to kill container. [root@ip-10-0-2-101 ~]# dnf install telnet -y
И через MySQL-клиент:
# dnf install mysql [root@ip-10-0-2-101 ~]# mysql -h rtfm-mariadb-1.chcmj9clr1dt.eu-west-1.rds.amazonaws.com -u setevoy -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 23 Server version: 10.0.24-MariaDB MariaDB Server Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | innodb | | mysql | | performance_schema | +--------------------+
RDS готова к использованию.
EBS
Добавляем EBS для подключения к Zeus.
Общая информация по созданию EBS – тут>>>, типы разделов – тут>>>.
Создаём с помощью create-volume
в той же зоне, что и EC2 Zeus:
$ aws ec2 create-volume --size 10 --region eu-west-1 --availability-zone eu-west-1b --volume-type gp2 { "AvailabilityZone": "eu-west-1b", "Encrypted": false, "VolumeType": "gp2", "VolumeId": "vol-098cdfb8", "State": "creating", "Iops": 100, "SnapshotId": "", "CreateTime": "2016-09-03T10:23:20.304Z", "Size": 10 }
Добавляем теги:
$ aws ec2 create-tags --resources vol-098cdfb8 --tags Key=Name,Value=rtfm_migrate_zeus_vol_1
Проверяем текущие устройства на Zeus:
core@ip-10-0-2-101 ~ $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 8G 0 disk |-xvda1 202:1 0 128M 0 part /boot |-xvda2 202:2 0 2M 0 part |-xvda3 202:3 0 1G 0 part /usr |-xvda4 202:4 0 1G 0 part |-xvda6 202:6 0 128M 0 part /usr/share/oem |-xvda7 202:7 0 64M 0 part `-xvda9 202:9 0 5.7G 0 part /
Далее, с помощью attach-volume
– подключаем его к Zeus:
$ aws ec2 attach-volume --volume-id vol-098cdfb8 --instance-id i-0113158d --device /dev/xvdc { "AttachTime": "2016-09-03T10:25:56.589Z", "InstanceId": "i-0113158d", "VolumeId": "vol-098cdfb8", "State": "attaching", "Device": "/dev/xvdc" }
На CoreOS проверяем:
core@ip-10-0-2-101 ~ $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 8G 0 disk |-xvda1 202:1 0 128M 0 part /boot |-xvda2 202:2 0 2M 0 part |-xvda3 202:3 0 1G 0 part /usr |-xvda4 202:4 0 1G 0 part |-xvda6 202:6 0 128M 0 part /usr/share/oem |-xvda7 202:7 0 64M 0 part `-xvda9 202:9 0 5.7G 0 part / xvdc 202:32 0 10G 0 disk
И через fdisk
:
ip-10-0-2-101 core # fdisk -l Disk /dev/xvda: 8 GiB, 8589934592 bytes, 16777216 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: 8398C29B-7038-48BA-9E57-F36900F47EAA Device Start End Sectors Size Type /dev/xvda1 4096 266239 262144 128M EFI System /dev/xvda2 266240 270335 4096 2M BIOS boot /dev/xvda3 270336 2367487 2097152 1G unknown /dev/xvda4 2367488 4464639 2097152 1G unknown /dev/xvda6 4464640 4726783 262144 128M Linux filesystem /dev/xvda7 4726784 4857855 131072 64M unknown /dev/xvda9 4857856 16777182 11919327 5.7G unknown Disk /dev/xvdc: 10 GiB, 10737418240 bytes, 20971520 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes
Подключение раздела на CoreOS вообще отдельная тема, быстро можно посмотреть тут>>> и тут>>>.
Проверяем текущую файловую систему:
ip-10-0-2-101 core # df -T /dev/xvda6 Filesystem Type 1K-blocks Used Available Use% Mounted on /dev/xvda6 ext4 110576 64 101340 1% /usr/share/oem
Форматируем новый раздел:
ip-10-0-2-101 core # mkfs.ext4 -L rtfm_migrate_zeus_vol_1 /dev/xvdc mke2fs 1.42.13 (17-May-2015) Creating filesystem with 2621440 4k blocks and 655360 inodes Filesystem UUID: 74497db2-b63e-446b-9183-b88a6da3b67b Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done
В каталоге /etc/systemd/system
создаём systemd
юнит для монтирования раздела – /etc/systemd/system/data-www.mount
:
#cloud-config coreos: units: - name: data-www.mount command: start content: | [Mount] What=/dev/xvdc Where=/data/www Type=ext4
Проверяем текущие точки монтирования:
ip-10-0-2-101 core # mount | grep xvd /dev/xvda9 on / type ext4 (rw,relatime,seclabel,data=ordered) /dev/xvda3 on /usr type ext4 (ro,relatime,seclabel,block_validity,delalloc,barrier,user_xattr,acl) /dev/xvda6 on /usr/share/oem type ext4 (rw,nodev,relatime,seclabel,commit=600,data=ordered) /dev/xvda1 on /boot type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro)
Монтируем новый диск:
# systemctl start data-www.mount # systemctl status data-www.mount ● data-www.mount - /data/www Loaded: loaded (/etc/systemd/system/data-www.mount; bad; vendor preset: disabled) Active: active (mounted) since Sat 2016-09-03 10:46:58 UTC; 5s ago Where: /data/www What: /dev/xvdc Process: 1261 ExecMount=/bin/mount /dev/xvdc /data/www -t ext4 (code=exited, status=0/SUCCESS) Tasks: 0 Memory: 108.0K CPU: 5ms Sep 03 10:46:58 ip-10-0-2-101.eu-west-1.compute.internal systemd[1]: Mounting /data/www... Sep 03 10:46:58 ip-10-0-2-101.eu-west-1.compute.internal systemd[1]: Mounted /data/www.
И ещё раз проверяем:
ip-10-0-2-101 core # mount | grep xvd /dev/xvda9 on / type ext4 (rw,relatime,seclabel,data=ordered) /dev/xvda3 on /usr type ext4 (ro,relatime,seclabel,block_validity,delalloc,barrier,user_xattr,acl) /dev/xvda6 on /usr/share/oem type ext4 (rw,nodev,relatime,seclabel,commit=600,data=ordered) /dev/xvda1 on /boot type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro) /dev/xvdc on /data/www type ext4 (rw,relatime,seclabel,data=ordered)
ip-10-0-2-101 core # ls -l /data/www/ total 16 drwx------. 2 root root 16384 Sep 3 10:39 lost+found
Готово.
Ссылки по теме
Tutorial: Create an Amazon VPC for Use with an Amazon RDS DB Instance
Scenarios for Accessing a DB Instance in a VPC
Tutorial: Create an Amazon VPC for Use with an Amazon RDS DB Instance
Simple Stateful Services with CoreOS and AWS
Using IAM Policy Conditions for Fine-Grained Access Control
Writing IAM Policies: How to Grant Access to an Amazon S3 Bucket
AWS: CloudFront – описание, примеры