#amazon-web-services #amazon-s3 #terraform #test-kitchen #inspec
#amazon-веб-сервисы #amazon-s3 #terraform #тест-кухня #проверка
Вопрос:
Есть ли у кого-нибудь интересные идеи о том, как обрабатывать учетные данные поставщика Terraform для AWS с учетом этих вариантов использования:
- Распределенные среды (prod / pre / qa / test / dev) с отдельными учетными записями AWS
- Удаленное состояние серверной части S3 для всех сред в одной учетной записи AWS
- Протестируйте кухню с помощью InSpec.
Мой текущий рабочий процесс требует изменения AWS_ACCESS_KEY
и AWS_SECRET_KEY
в зависимости от операции:
terraform init
— требуется доступ к удаленному состоянию серверной части S3terraform plan/apply
— требуется доступ к определенной среде удаленное состояние- Нефункционально (один набор учетных данных не имеет доступа как к env, так и к удаленному состоянию)
kitchen converge
— требуется доступ к тестовой среде удаленное состояние- Нефункционально (по той же причине, что и выше)
kitchen verify
— требуется доступ к тестовой среде.
Идеи
- Я хотел бы сохранить удаленное состояние S3 в соответствующих учетных записях среды, но переменные, похоже, не поддерживаются в конфигурации Terraform
backend
.
Ответ №1:
Вам понадобится основная учетная запись, чтобы иметь возможность выполнять роль в каждой учетной записи env для выполнения изменений, в то время как удаленная основная учетная запись сохранит все состояния. Это хороший способ работы с terraform worspaces Предполагая, что у вас есть два рабочих пространства, prod и dev, вы можете попробовать что-то вроде этого:
variable "workspace_roles" {
default = {
dev = "arn:aws:iam::<dev account id>:role/terra_role"
prod = "arn:aws:iam::<prodaccount id>:role/terra_role"
}
}
provider "aws" {
assume_role = var.workspace_roles[terraform.workspace]
}
Комментарии:
1. Спасибо, я видел, что это рекомендовано и в других местах. Это будет частью решения. Мне просто нужно выяснить, как обращаться с Kitchen, поскольку он использует либо переменные AWS env, либо ~/.aws/credentials .
2. @XeonFibre вы можете передать
shared_credentials_profile
kitchen config, чтобы указать профиль, который вы хотите использовать.