gpt4 book ai didi

bash - 创建存储帐户后无法立即创建 azure 容器

转载 作者:行者123 更新时间:2023-12-04 15:43:53 24 4
gpt4 key购买 nike

我正在尝试从 terraform 创建一个存储帐户,并使用它的一些访问 key 来创建一个 blob 容器。我的 terraform 配置是从 bash 文件给出的,因此,最重要的步骤之一如下:

customer_prefix=4pd
customer_environment=dev

RESOURCE_GROUP_NAME=$customer_prefix
az group create --name $RESOURCE_GROUP_NAME --location westeurope

# Creating Storage account
STORAGE_ACCOUNT_NAME=4pdterraformstates
az storage account create --resource-group $RESOURCE_GROUP_NAME --name $STORAGE_ACCOUNT_NAME --sku Standard_LRS --encryption-services blob

# We are getting the storage account key to access to it when we need to store the terraform .tf production state file
ACCOUNT_KEY=$(az storage account keys list --resource-group $RESOURCE_GROUP_NAME --account-name $STORAGE_ACCOUNT_NAME --query [0].value -o tsv)


# Creating a blob container
CONTAINER_NAME=4pd-tfstate
az storage container create --name $CONTAINER_NAME --account-name $STORAGE_ACCOUNT_NAME --account-key $ACCOUNT_KEY

source ../terraform_apply_template.sh

我从 .bash 文件发送这些 az cli 命令,因此,我在那里发送其他 TF_VAR_azurerm ... 变量

最后,当我执行 bash 第一个 bash 文件时,调用 terraform_apply_template.sh 创建计划并应用它。如下:

#!/bin/bash
#Terminates script execution after first failed (returned non-zero exit code) command and treat unset variables as errors.
set -ue

terraform init -backend-config=$statefile -backend-config=$storage_access_key -backend-config=$storage_account_name

#TF:
function tf_plan {
terraform plan -out=$outfile
}

case "${1-}" in
apply)
tf_plan && terraform apply $outfile
;;

apply-saved)
if [ ! -f $outfile ]; then tf_plan; fi
terraform apply $outfile
;;

*)
tf_plan

echo ""
echo "Not applying changes. Call one of the following to apply changes:"
echo " - '$0 apply': prepares and applies new plan"
echo " - '$0 apply-saved': applies saved plan ($outfile)"
;;
esac

但我的输出如下,azurerm 后端已初始化,名为 4pdterraformstates 的存储帐户已创建,还有 4pd-tfstate > blob 容器,

enter image description here

但在实践中这个 Action 并不有效,我得到以下输出:

Initializing the backend...

Successfully configured the backend "azurerm"! Terraform will automatically
use this backend unless the backend configuration changes.

Error: Failed to get existing workspaces: storage: service returned error: StatusCode=404, ErrorCode=ContainerNotFound, ErrorMessage=The specified container does not exist.
RequestId:2db5df4e-f01e-014c-369d-272246000000
Time:2019-06-20T19:21:01.6931098Z, RequestInitiated=Thu, 20 Jun 2019 19:21:01 GMT, RequestId=2db5df4e-f01e-014c-369d-272246000000, API Version=2016-05-31, QueryParameterName=, QueryParameterValue=

寻找类似的行为,I have found this issue in the azurerm provider terraform repository

并且还根据 this issue直接在 terraform 存储库中创建它看起来像是网络操作错误......但奇怪的是它被修复了..

我使用的是terraform v0.12.1版本

⟩ terraform version
Terraform v0.12.2

根据 @Gaurav-Mantri 的回答,有必要等到存储帐户被配置后才能继续执行与存储帐户本身相关的其他任务。

Creation of a storage account is an asynchronous process. When you execute az storage account create to create a storage account, request is sent to Azure and you get an accepted response back (if everything went well).

The whole process to create (provision) a storage account takes some time (maximum 1 minute in my experience) and until the storage account is provisioned, no operations are allowed on that storage account.

如何在创建存储帐户后包含等待过程?看来仅使用 bash sleep 命令或使用 read 命令暂停 bash shell 一段时间是不够的..

最佳答案

存储帐户的创建是一个异步过程。当您执行 az storage account create 创建存储帐户时,请求将发送到 Azure,并且您会收到 accepted 响应(如果一切顺利)。

创建(配置)存储帐户的整个过程需要一些时间(根据我的经验,最多需要 1 分钟),并且在配置存储帐户之前,不允许对该存储帐户进行任何操作。

这就是您收到错误的原因,因为您在发送创建请求后立即尝试执行操作。

不确定您将如何执行此操作,但您需要做的是等待配置存储帐户。您可以定期获取存储帐户的属性(例如每 5 秒一次)并检查其配置状态。一旦配置状态成功,您就可以尝试创建容器。到时候你的请求应该会成功。

关于bash - 创建存储帐户后无法立即创建 azure 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56693069/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com