Использование AWS S3 для хранения состояния DevStream

В нашей последней версии v0.6.0 поддерживается использование AWS S3 для хранения состояния DevStream.

В этом блоге мы собираемся продемонстрировать использование AWS S3 для хранения файлов состояния DevStream.

Терминология

Состояние: если вы еще не знаете о состоянии DevStream, пожалуйста, прочитайте этот документ, а также этот блог.

Бэкенд: где на самом деле хранится файл состояния. На данный момент это может быть либо local, либо s3.

Конфигурация

В основном конфигурационном файле у нас есть раздел для настройки состояния. В настоящее время поддерживаются локальное и S3.

Пример локального состояния:

varFile: variables-gitops.yaml

toolFile: tools-gitops.yaml

state:
  backend: local
  options:
    stateFile: devstream.state
Войти в полноэкранный режим Выход из полноэкранного режима

Пример S3:

varFile: variables-gitops.yaml

toolFile: tools-gitops.yaml

state:
  backend: s3
  options:
    bucket: devstream-remote-state
    region: ap-southeast-1
    key: devstream.state
Войти в полноэкранный режим Выход из полноэкранного режима

Подробнее о настройке состояния здесь.

Вкратце, мы можем использовать ключевое слово «backend», чтобы указать, где хранить состояние: локально или в S3 bucket. Если используется S3, необходимо указать ведро, регион и ключ S3.

Примеры конфигурационных файлов

В этом демо мы используем следующие конфигурации:

config.yaml:

varFile: variables-gitops.yaml

toolFile: tools-gitops.yaml

state:
  backend: s3
  options:
    bucket: devstream-test-remote-state
    region: ap-southeast-1
    key: devstream.state
Войти в полноэкранный режим Выход из полноэкранного режима

variables-gitops.yaml:

githubUsername: IronCore864
repoName: dtm-test-go
defaultBranch: main

dockerhubUsername: ironcore864

argocdNameSpace: argocd
argocdDeployTimeout: 5m
Войти в полноэкранный режим Выход из полноэкранного режима

tools-gitops.yaml:

tools:
- name: github-repo-scaffolding-golang
  instanceID: default
  options:
    owner: [[ githubUsername ]]
    org: ""
    repo: [[ repoName ]]
    branch: [[ defaultBranch ]]
    image_repo: [[ dockerhubUsername ]]/[[ repoName ]]
Вход в полноэкранный режим Выход из полноэкранного режима

Начало работы

Прежде чем читать дальше, сейчас самое время проверить, правильно ли вы настроили переменные окружения, связанные с AWS.

Для пользователей macOS/Linux сделайте следующее:

export AWS_ACCESS_KEY_ID=ID_HERE
export AWS_SECRET_ACCESS_KEY=SECRET_HERE
export AWS_DEFAULT_REGION=REGION_HERE
Войдите в полноэкранный режим Выйти из полноэкранного режима

Для получения дополнительной информации см. официальный документ здесь.

Примените

Затем запустите dtm apply:

tiexin@mbp ~/work/devstream-io/devstream $ ./dtm apply
2022-05-30 17:07:59 ℹ [INFO]  Apply started.
2022-05-30 17:07:59 ℹ [INFO]  Using dir <.devstream> to store plugins.
2022-05-30 17:07:59 ℹ [INFO]  Using s3 backend. Bucket: devstream-test-remote-state, region: ap-southeast-1, key: devstream.state.
2022-05-30 17:08:00 ℹ [INFO]  Tool (github-repo-scaffolding-golang/default) found in config but doesn't exist in the state, will be created.
Continue? [y/n]
Enter a value (Default is n): y

2022-05-30 17:08:08 ℹ [INFO]  Start executing the plan.
2022-05-30 17:08:08 ℹ [INFO]  Changes count: 1.
2022-05-30 17:08:08 ℹ [INFO]  -------------------- [  Processing progress: 1/1.  ] --------------------
2022-05-30 17:08:08 ℹ [INFO]  Processing: (github-repo-scaffolding-golang/default) -> Create ...
2022-05-30 17:08:12 ℹ [INFO]  The repo dtm-test-go has been created.
2022-05-30 17:08:29 ✔ [SUCCESS]  Tool (github-repo-scaffolding-golang/default) Create done.
2022-05-30 17:08:29 ℹ [INFO]  -------------------- [  Processing done.  ] --------------------
2022-05-30 17:08:29 ✔ [SUCCESS]  All plugins applied successfully.
2022-05-30 17:08:29 ✔ [SUCCESS]  Apply finished.
Войти в полноэкранный режим Выйти из полноэкранного режима

Как видно из вывода, используется бэкенд S3, а также показан используемый bucket и ключ, и в каком регионе находится этот bucket.

Проверка файла состояния

После apply, давайте загрузим файл состояния из S3 и проверим его:

tiexin@mbp ~/work/devstream-io/devstream $ aws s3 cp s3://devstream-test-remote-state/devstream.state .
Вход в полноэкранный режим Выйти из полноэкранного режима

Если мы откроем загруженный файл, то увидим нечто похожее на следующее:

github-repo-scaffolding-golang_default:
  name: github-repo-scaffolding-golang
  instanceid: default
  dependson: []
  options:
    branch: main
    image_repo: ironcore864/dtm-test-go
    org: ""
    owner: IronCore864
    repo: dtm-test-go
  resource:
    org: ""
    outputs:
      org: ""
      owner: IronCore864
      repo: dtm-test-go
      repoURL: https://github.com/IronCore864/dtm-test-go.git
    owner: IronCore864
    repoName: dtm-test-go
Вход в полноэкранный режим Выход из полноэкранного режима

что точно так же, как если бы мы использовали локальный бэкэнд для хранения состояния.


Понравилось это краткое руководство? Тогда я предлагаю вам ознакомиться с нашими последними DevOps блогами:

  • 9 экстраординарных лучших практик Terraform, которые изменят ваш мир Infra
  • Dagger (инструмент CI/CD, а не нож) в деталях — все, что вам нужно знать (по состоянию на апрель 2022 года)
  • Краткая история DMCA

Оцените статью
Procodings.ru
Добавить комментарий