VK Object Storage
Мақалада Terraform көмегімен VK Object Storage бакеттері мен объектілерін жасау және баптау мысалдары келтірілген.
Желілерді жасау кезінде келесі ресурстар (resource) пайдаланылады:
- aws_s3_bucket — бакетті жасау;
- aws_s3_object — объектіні жасау;
- aws_s3_bucket_lifecycle_configuration — бакет объектілерінің өмірлік циклін басқару;
- aws_s3_bucket_acl — басқа пайдаланушыларға немесе жобаларға бакетке қол жеткізуді басқару;
- aws_s3_bucket_cors_configuration — ресурстарды доменаралық пайдалану ережелерін (CORS) басқару.
Ресурстардың толық сипаттамасы — провайдер құжаттамасында.
-
Инстансты жасау жоспарланған аймақ үшін қолжетімді ресурстармен және квоталармен танысыңыз. Әртүрлі аймақтар үшін әртүрлі квоталар бапталуы мүмкін.
Қажет болса, квоталарды арттырыңыз.
-
Егер әлі орнатылмаған болса, Terraform орнатыңыз.
-
Провайдерді баптаңыз:
-
Платформамен жұмыс істейтін директорияны жасаңыз және соған өтіңіз.
-
aws_provider.tfфайлын жасаңыз және оған келесі мазмұнды қосыңыз:terraform {required_providers {aws = {source = "hashicorp/aws"version = "< 5.85.0"}}}provider "aws" {region = "<РЕГИОН>"access_key = "<ПУБЛИЧНЫЙ_КЛЮЧ_ДОСТУПА>"secret_key = "<СЕКРЕТНЫЙ_КЛЮЧ>"skip_credentials_validation = trueskip_metadata_api_check = trueskip_requesting_account_id = trueskip_region_validation = trueendpoints {s3 = "<ДОМЕН>"}}Мұнда:
-
<РЕГИОН>— VK Object Storage сервисін орналастыру аймағы. Баптау аккаунттың аймағына сәйкес болуы керек:ru-msk— Мәскеу аймағы;kz-ast— Қазақстан аймағы.
-
<ПУБЛИЧНЫЙ_КЛЮЧ_ДОСТУПА>,<СЕКРЕТНЫЙ_КЛЮЧ>— объектілік сақтау қоймасына қол жеткізуге арналған кілт идентификаторы мен құпия кілт. -
<ДОМЕН>— аккаунт аймағына байланысты сақтау қоймасына қол жеткізуге арналған URL. Мүмкін мәндер:https://hb.ru-msk.vkcloud-storage.ru— Мәскеу аймағының домені;https://hb.kz-ast.bizmrg.com— Қазақстан аймағының домені.
-
-
-
Terraform инициализациялау үшін команданы орындаңыз:
terraform initTerraform жұмысына қажет қосымша файлдар жасалады.
Төмендегі мысалда example-bucket бакеті жасалады, оған object-one және object-two объектілері қосылады.
Келесі мазмұны бар main.tf Terraform конфигурация файлын жасаңыз:
# Создание бакетаresource "aws_s3_bucket" "example-bucket" {bucket = "example-bucket"force_destroy = true}# Создание объектовresource "aws_s3_object" "object-one" {bucket = aws_s3_bucket.example-bucket.bucketkey = "object-one"source = "docs/readme.md"acl = "private"etag = filemd5("docs/readme.md")}resource "aws_s3_object" "object-two" {bucket = aws_s3_bucket.example-bucket.bucketkey = "tmp/object-two"source = "docs/video.mp4"acl = "private"source_hash = filemd5("docs/video.mp4")}
Мұнда:
-
bucket— бакет атауы:-
bucket = "example-bucket"—example-bucketатауымен бакет жасалады. Атауға қойылатын талаптар:- 4-тен 63-ке дейін таңбадан тұрады;
- әріптен немесе саннан басталып, солармен аяқталады;
- тек кіші латын әріптерінен, сандардан және келесі таңбалардан тұрады:
.,-; - барлық аймақтардағы VK Cloud платформасы шегінде бірегей болады.
Бакет атауы оның ішіндегі объектілердің URL мекенжайларында болады, сондықтан атауда құпия ақпаратты қолданбаңыз.
Егер хостинг үшін бакет жасасаңыз, атауда мыналарды пайдалану ұсынылмайды:
- IP мекенжайлар және соларға ұқсас пішімдер (мысалы,
192.168.5.4), себебі бакет атауы мен сайттың IP мекенжайы шатастырылуы мүмкін. - басындағы
xn--: одан кейінгінің бәрін браузер паникод ретінде қабылдайды.
-
bucket = aws_s3_bucket.example-bucket.bucket— объектіні жасау кезінде бакетті жасайтын ресурс көрсетіледі. Бұл мысалда объектaws_s3_bucketресурсы жасайтынexample-bucketбакетіне орналастырылады.
-
-
(Опционалды)
force_destroy— бұл параметр бакет ішінде объектілер болса да, оны жоюға рұқсат береді. Қолжетімді мәндер:trueжәнеfalse. Әдепкі мәні —false. -
key— объект кілті. Объект бакетке жүктелгеннен кейінгі атауы. -
source— бакетке жүктелетін файлға дейінгі құрылғыңыздағы жол. -
acl— объект үшін ACL баптаулары. Қолжетімді мәндер:private,public-read,auth-read. -
etag— объект нұсқасының идентификаторы.filemd5("path/to/source")көмегімен орнатылады. Бұл параметрді тек 16 МБ-тан кіші объектілер үшін пайдаланыңыз. 16 МБ-тан үлкен объектілер үшінsource_hashпайдаланыңыз, себебі олар multipart құрауыш жүктеу әдісімен жүктеледі. -
source_hash— объект нұсқасының идентификаторы. Бұл параметрetagпараметріне ұқсас, бірақ объект өлшеміне шектеу жоқ.filemd5("path/to/source")көмегімен орнатылады.
Төмендегі мысалда tmp префиксі бар объектілерді бір күннен кейін бакеттен жоятын автоматты жою ережесі (lifecycle) қосылады.
main.tf файлына келесі мазмұнды қосыңыз:
resource "aws_s3_bucket_lifecycle_configuration" "example-bucket-lifecyle" {bucket = aws_s3_bucket.example-bucket.idrule {id = "tmp"filter {prefix = "tmp/"}expiration {days = 1}status = "Enabled"}}
Мұнда:
-
id— ереже идентификаторы. Тек сандар, латын әріптері және-,_,.таңбаларына рұқсат етіледі. Идентификатор бакет шегінде бірегей болуы керек. -
prefix— объект кілтінің префиксі: ереже тек көрсетілген префикстік кілттері бар объектілерге қолданылады. Сүзгіде тек бір кілт болуы мүмкін. Префикстік кілттердің мысалдары:image/,pre/,image/photo. -
expiration— параметрде объектілер жойылатын күндер саны көрсетіледі. -
status— ереже күйі:"Enabled"— ереже белсенді;"Disabled"— ереже белсенді емес.
Төмендегі мысалда пайдаланушы ID-і және жоба ID-і бойынша бакеттің ACL-ын оқуға құқықтар беріледі.
main.tf файлына келесі мазмұнды қосыңыз:
data "aws_canonical_user_id" "current" {}resource "aws_s3_bucket_acl" "example-bucket-acl" {bucket = aws_s3_bucket.example-bucket.idaccess_control_policy {# Oбязательная часть: определяет полные права доступа для текущего пользователя (владельца бакета)owner {id = data.aws_canonical_user_id.current.id}grant {grantee {id = data.aws_canonical_user_id.current.idtype = "CanonicalUser"}permission = "FULL_CONTROL"}# Права доступа к бакету выдаются по ID пользователяgrant {grantee {id = "1f417590-xxxx-xxxx-xxxx-edacf23b1f96"type = "CanonicalUser"}permission = "READ_ACP"}# Права доступа к бакету выдаются по ID проектаgrant {grantee {email_address = "mcs1234567890"type = "AmazonCustomerByEmail"}permission = "READ_ACP"}}}
Мұнда:
data "aws_canonical_user_id" "current" {}— деректер көзі ағымдағы пайдаланушының канондық идентификаторын (Canonical User ID) алады.id = "1f417590-xxxx-xxxx-xxxx-edacf23b1f96"— бакетке қол жеткізу құқықтары берілетін пайдаланушының канондық идентификаторы (Canonical User ID). Пайдаланушының канондық идентификаторын қалай білуге болады.email_address = "mcs1234567890"— бакетке қол жеткізу құқықтары берілетін PID (жоба идентификаторы). PID-ті қалай білуге болады.permission— қол жеткізу құқықтарының түрі. Қолжетімді мәндер:READ,WRITE,READ_ACP,WRITE_ACP,FULL_CONTROL.
Төмендегі мысалда CORS ережелері бапталады.
main.tf файлына келесі мазмұнды қосыңыз:
resource "aws_s3_bucket_cors_configuration" "example-bucket-cors" {bucket = aws_s3_bucket.example-bucket.idcors_rule {allowed_headers = ["*"]allowed_methods = ["PUT", "POST"]allowed_origins = ["https://example-website.com"]expose_headers = ["etag"]max_age_seconds = 3000}cors_rule {allowed_methods = ["GET"]allowed_origins = ["*"]}}
Мұнда:
- (Опционалды)
allowed_headers— бакет объектілеріне сұрауда рұқсат етілген тақырыптар тізімі. Үлгіні анықтау үшін*таңбасын пайдалануға болады. allowed_methods— бакет объектілеріне сұрауда рұқсат етілген әдістер тізімі. Қолжетімді мәндер:GET,PUT,HEAD,POST,DELETE.allowed_origins— бакетке қол жеткізуге рұқсат етілген URL тізімі. Үлгіні анықтау үшін*таңбасын пайдалануға болады.- (Опционалды)
expose_headers— пайдаланушылар өз қолданбаларынан қол жеткізе алатын жауаптағы тақырыптар тізімі. Төменгі регистрде көрсетіледі. - (Опционалды)
max_age_seconds— браузер көрсетілген URL үшін жауапты кэштейтін секундтар саны.
-
Terraform конфигурация файлдарын бір директорияға орналастырыңыз:
aws_provider.tf;network.tf.
-
Осы директорияға өтіңіз.
-
Конфигурация файлдарының дұрыс екенін және қажетті өзгерістер бар екенін тексеріңіз:
terraform validate && terraform plan -
Өзгерістерді қолданыңыз:
terraform applyРастауды сұрағанда
yesенгізіңіз. -
Операцияның аяқталуын күтіңіз.
Бакет пен объектілердің сәтті жасалғанына, конфигурацияның бапталғанына көз жеткізіңіз:
-
AWS CLI арқылы VK Object Storage жүйесіне қосылыңыз.
-
Бакет пен объектілердің жасалғанын тексеріңіз. Команданы орындаңыз:
aws s3 ls s3://example-bucket/ --endpoint-url https://hb.ru-msk.vkcloud-storage.ruМұнда:
-
example-bucket— Terraform арқылы жасалған бакет атауы. -
endpoint-url— VK Object Storage сервисінің домені, ол аккаунттың аймағына сәйкес болуы керек:https://hb.ru-msk.vkcloud-storage.ru— Мәскеу аймағының домені;https://hb.kz-ast.bizmrg.com— Қазақстан аймағының домені.
Жауапта жасалған бакет және оған қосылған объектілер тізімі қайтарылады.
-
-
Бакет үшін автоматты тазарту ережелерінің бапталғанын тексеріңіз. Команданы орындаңыз:
aws s3api get-bucket-lifecycle-configuration \--endpoint-url https://hb.ru-msk.vkcloud-storage.ru \--bucket example-bucket -
Басқа пайдаланушылар үшін бакетке қол жеткізу құқықтарының бапталғанын тексеріңіз:
aws s3api get-bucket-acl \--endpoint-url https://hb.ru-msk.vkcloud-storage.ru \--bucket example-bucket -
Бакет үшін CORS ережелерінің бапталғанын тексеріңіз:
aws s3api get-bucket-cors \--endpoint-url https://hb.ru-msk.vkcloud-storage.ru \--bucket example-bucket
Егер Terraform көмегімен жасалған ресурстар енді қажет болмаса, оларды жойыңыз:
-
Terraform конфигурация файлдары бар директорияға өтіңіз.
-
Команданы орындаңыз:
terraform destroyРастауды сұрағанда
yesенгізіңіз. -
Операцияның аяқталуын күтіңіз.