Created
April 21, 2020 17:04
-
-
Save nikolaymatrosov/685434e644206022259dbeff115236f7 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Конфгурируем Yandex.Cloud provider | |
provider "yandex" { | |
zone = "ru-central1-a" | |
} | |
// Объявляем переменную с названием Организации на гитхабе. | |
// К сожалению github provider не создает ресурсы `github_actions_secret` в личных репах | |
// https://github.com/terraform-providers/terraform-provider-github/issues/422 | |
// К счастью базовая функциональность организаций теперь бесплатна. | |
variable "github_organization" { | |
type = string | |
} | |
// Конфигурируем github provider. | |
provider "github" { | |
organization = var.github_organization | |
} | |
// Создаем Сервисный аккаунт в нашем облаке. | |
resource "yandex_iam_service_account" "gatsby" { | |
name = "gatsby" | |
description = "service account to publish Gatsby" | |
} | |
// Определяем переменную с именем каталога | |
variable "folder_name" { | |
type = string | |
default = "default" | |
} | |
data "yandex_resourcemanager_folder" "default" { | |
name = var.folder_name | |
} | |
// Выдаем прав сервисному аккаунту в Облаке | |
resource "yandex_resourcemanager_cloud_iam_member" "gatsby-iam" { | |
cloud_id = data.yandex_resourcemanager_folder.default.cloud_id | |
role = "editor" | |
member = "serviceAccount:${yandex_iam_service_account.gatsby.id}" | |
} | |
// Создаем статический ключ с которым будем ходить в Object Storage | |
// Для создания бакета, а потом и из Github чтобы заливать готовый сайт | |
resource "yandex_iam_service_account_static_access_key" "gatsby-static-key" { | |
service_account_id = yandex_iam_service_account.gatsby.id | |
description = "static access key for object storage" | |
} | |
// Заводим переменную с именем бакета | |
variable "bucket_name" { | |
type = string | |
} | |
// И созадем сам бакет | |
resource "yandex_storage_bucket" "gatsby-demo" { | |
bucket = var.bucket_name | |
acl = "public-read" | |
access_key = yandex_iam_service_account_static_access_key.gatsby-static-key.access_key | |
secret_key = yandex_iam_service_account_static_access_key.gatsby-static-key.secret_key | |
// В дефолтном примере сгенеренные страницы называются именно та | |
website { | |
index_document = "index.html" | |
error_document = "404.html" | |
} | |
// Заодно можно дополнительно указать CORS правила | |
cors_rule { | |
allowed_headers = [ | |
"*"] | |
allowed_methods = [ | |
"GET", | |
"PUT", | |
"POST", | |
"DELETE", | |
"HEAD"] | |
allowed_origins = [ | |
"https://${var.bucket_name}.website.yandexcloud.net"] | |
expose_headers = [ | |
"ETag"] | |
max_age_seconds = 3000 | |
} | |
} | |
// Теперь приступим к созданию нового репозитория в нашей организации | |
variable "repo_name" { | |
type = string | |
} | |
resource "github_repository" "repo" { | |
name = var.repo_name | |
} | |
// И пропишем секреты, которые мы будем использовать из Github Action | |
resource "github_actions_secret" "AWS_S3_BUCKET" { | |
repository = var.repo_name | |
secret_name = "AWS_S3_BUCKET" | |
plaintext_value = var.bucket_name | |
} | |
resource "github_actions_secret" "AWS_ACCESS_KEY_ID" { | |
repository = var.repo_name | |
secret_name = "AWS_ACCESS_KEY_ID" | |
plaintext_value = yandex_iam_service_account_static_access_key.gatsby-static-key.access_key | |
} | |
resource "github_actions_secret" "AWS_SECRET_ACCESS_KEY" { | |
repository = var.repo_name | |
secret_name = "AWS_SECRET_ACCESS_KEY" | |
plaintext_value = yandex_iam_service_account_static_access_key.gatsby-static-key.secret_key | |
} | |
// Ну и наконец запишем только что созданный апстрим в наш конфиг локального репозитория | |
resource "null_resource" "git_origin" { | |
provisioner "local-exec" { | |
command = "git remote add origin [email protected]:${var.github_organization}/${var.repo_name}.git" | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
прикольно