Не думаю, что вам это действительно нужно.
В общем, есть переменные, которые вы можете вставить в качестве входных данных, и вы можете снабдить эти переменные значениями.Если вам нужна какая-то логика / принятие решений, лучше всего иметь в вашем CI / CD переменные пиплэйна (то есть регион и область источника) или выполнять какую-либо логику в скриптах перед запуском terraform.
Так что в моем случаеВ бамбуке у нас есть разные переменные в плане развертывания, и у каждого из них есть своя среда (dev-test-stag-prod) и регион (то есть us-east-1).Когда он выполняется, он устанавливает переменную terraform для данной среды и региона.
До этого у нас есть две учетные записи, одна - песочница, а другая - «производственная», но в «производственной» есть этот dev, test, stag, prod, так что тестирование и некоторая интеграция также тестируются там.Сначала мы просто используем песочницу, чтобы попробовать наше развертывание.Поскольку я не хочу настраивать доступ к AWS в каждой сборке, я использовал этот метод перед запуском terraform apply
:
if [ "$PROD_BUILD" = "true" ]
then
echo "PROD build is used, the PROD AWS tokens will be used"
export TF_VAR_CERTIFICATE_DOMAIN=$PROD_TERRAFORM_CERTIFICATE_DOMAIN
export AWS_ACCESS_KEY_ID=${PROD_AWS_ACCESS_KEY_ID}
export AWS_SECRET_ACCESS_KEY=${PROD_AWS_SECRET_ACCESS_KEY}
export S3_TERRAFORM_STATE_BUCKET=$PROD_S3_TERRAFORM_STATE_BUCKET
export S3_TERRAFORM_STATE_REGION=$PROD_S3_TERRAFORM_STATE_REGION
else
echo "DEV build is used, the DEV AWS tokens will be used"
export TF_VAR_CERTIFICATE_DOMAIN=$DEV_TERRAFORM_CERTIFICATE_DOMAIN
export AWS_ACCESS_KEY_ID=${DEV_AWS_ACCESS_KEY_ID}
export AWS_SECRET_ACCESS_KEY=${DEV_AWS_SECRET_ACCESS_KEY}
export S3_TERRAFORM_STATE_BUCKET=$DEV_S3_TERRAFORM_STATE_BUCKET
export S3_TERRAFORM_STATE_REGION=$DEV_S3_TERRAFORM_STATE_REGION
fi