Я хочу развернуть облачную функцию Google, и я хочу сделать это с помощью terraform. Я также хочу создать учетную запись службы, которая будет действовать как учетная запись службы по умолчанию для запуска этой функции, как описано на Идентификатор функции› Идентификатор функции. Идентификатор этой учетной записи службы - dataflowdemo
.
Я создал учетную запись службы, которую хочу использовать для запуска своих развертываний (не такую, как учетная запись службы, упомянутая в предыдущем абзаце), идентификатор этой учетной записи службы deployer
:
export PROJECT=myproject
gcloud iam service-accounts create --project $PROJECT deployer
Я загрузил ключевой файл, на который я могу ссылаться в '$ GOOGLE_APPLICATION_CREDENTIALS', как указано на странице Terraform Google Provider ›Добавление учетных данных:
export GOOGLE_APPLICATION_CREDENTIALS=$(pwd)/deployer.json
gcloud iam service-accounts keys create \
--project $PROJECT \
--iam-account deployer@${PROJECT}.iam.gserviceaccount.com $GOOGLE_APPLICATION_CREDENTIALS
и предоставили ему необходимые разрешения
gcloud projects add-iam-policy-binding $PROJECT --member="serviceAccount:deployer@${PROJECT}.iam.gserviceaccount.com" --role="roles/storage.admin"
gcloud projects add-iam-policy-binding $PROJECT --member="serviceAccount:deployer@${PROJECT}.iam.gserviceaccount.com" --role="roles/cloudfunctions.admin"
gcloud projects add-iam-policy-binding $PROJECT --member="serviceAccount:deployer@${PROJECT}.iam.gserviceaccount.com" --role="roles/iam.serviceAccountAdmin"
gcloud projects add-iam-policy-binding $PROJECT --member="serviceAccount:deployer@${PROJECT}.iam.gserviceaccount.com" --role="roles/iam.roleAdmin"
Код terraform довольно прост: он создает учетную запись службы dataflowdemo
и указывает эту учетную запись службы в качестве учетной записи службы, отличной от используемой по умолчанию для облачной функции. Код доступен по адресу https://github.com/jamiekt/dataflowcademo/tree39b03e03e05e05e08e05e06e08e06e08e08e6 а>.
Я запускаю развертывание terraform следующим образом:
terraform init && terraform apply --auto-approve
и впоследствии он терпит неудачу:
Ошибка: googleapi: ошибка 400: запрошена недопустимая учетная запись службы функции: serviceAccount: [email protected]. Чтобы узнать, как подробная документация по устранению неполадок., badRequest
Я перешел по ссылке, указанной в сообщении об ошибке, в котором говорится:
Однако для использования учетной записи службы времени выполнения, отличной от используемой по умолчанию, разработчик должен иметь разрешение iam.serviceAccounts.actAs для этой нестандартной учетной записи. Это разрешение автоматически предоставляется пользователю, который создает учетную запись службы времени выполнения, отличную от используемой по умолчанию.
Программа развертывания функции (т.е. учетная запись службы deployer
) - это та же учетная запись, которая создала функцию, поэтому я очень смущен, почему это не удается.
Кто-нибудь может сказать мне, где я ошибаюсь и что мне нужно сделать, чтобы это исправить?