Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何让Terraform根据用户所在的帐户抛出特定的错误消息?

如何让Terraform根据用户所在的帐户抛出特定的错误消息?
EN

Stack Overflow用户
提问于 2020-02-17 20:18:11
回答 2查看 2.2K关注 0票数 1

我有一个执行域委托的terraform模块。对于几个变量,有一些针对硬编码值的验证,以检查用户是否使用了有效的输入,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
resource "null_resource" "validate_region" {
  count = contains(local.regions, var.region) == true ? 0 : "Please provide a valid AWS region. E.g. (us-west-2)"
}

其中local.regions是硬编码的,而var.region是用户设置的变量。上面的代码的工作原理是,当用户设置错误的变量时,它会抛出如下错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Error: Incorrect value type

  on .terraform/foo/main.tf line 46, in resource "null_resource" "validate_region":
  46:   count = contains(local.regions, var.region) == true ? 0 : "Please provide a valid AWS region. E.g. (us-west-2)"

Invalid expression value: a number is required.

现在我需要验证用户当前使用的AWS帐户是否正确。在本例中,由用户在其变量中设置正确帐户的帐户id,我的代码需要提取运行模块的帐户的帐户id,并将其与用户的变量进行比较。我尝试过这样的东西:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data "aws_caller_identity" "account" {}

resource "null_resource" "validate_account" {
  count = data.aws_caller_identity.account.account_id == var.primary_account_id ? 0 : "Please check that you are using the AWS creds for the primary account for this domain."
}

data "aws_route53_zone" "primary" {
  name = local.primary_name
}

"{data.aws_caller_identity.account.account_id == var.primary_account_id}" ? 0部分上进行了各种语法更改,以使逻辑正常工作,但没有成功。我希望它像区域验证一样抛出一个错误,它将显示我编写的错误消息。相反(取决于语法),它将对正确的帐户按预期工作,并为不正确的帐户抛出一个Error: no matching Route53Zone found错误,或者它将抛出一个完全不同的错误,可能是因为语法搞砸了。

我怎么才能让它工作呢?有可能吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-18 00:02:22

我算出了这个区块:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data "aws_route53_zone" "primary" {
  name = local.primary_name
}

在帐户验证资源块之前运行。添加如下所示的depends_on

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data "aws_route53_zone" "primary" {
  name       = local.primary_name
  depends_on = [null_resource.validate_account,
  ]
}

一切都很好。

票数 1
EN

Stack Overflow用户

发布于 2020-02-18 08:46:37

这里的另一个选项可以简化您正在做的事情,即设置区域和帐户约束,以便Terraform将自动使用正确的区域,如果凭据不是用于正确的帐户,则会失败。

您可以在aws提供程序块中对此进行定义。示例如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
provider "aws" {
  region              = "eu-west-1"
  allowed_account_ids = ["123456789012"]
}

现在,如果您尝试使用其他AWS帐户的凭据,则Terraform将在计划阶段失败:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Error: AWS Account ID not allowed: 234567890123
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60269812

复制
相关文章
Linux ln命令 - 建立文件/目录链接
ln -s abc cde 建立abc 的软连接 (注意-s的参数)
sinnoo
2021/07/27
8.9K0
Docker查看容器命令(docker ps)
查看容器 #查看容器 docker ps # 查看正在运行的容器 查看所有容器 # 查看所有容器 docker ps –a 非root用户 查看容器 #查看容器 sudo docker ps # 查看正在运行的容器 查看所有容器 # 查看所有容器 sudo docker ps –a
用户9006224
2022/12/21
2.2K0
Docker(11)- docker ps 命令详解
作用 列出容器 语法格式 docker ps [OPTIONS] options 说明 option 作用 -a, --all 显示全部容器(默认只显示运行中的容器) -f, --filter filter 根据提供的 filter 过滤输出 -n, --last int 列出最近创建的 n 个容器(默认-1,代表全部) -l, --latest 显示最近创建的容器(包括所有状态的容器) -s, --size 显示总的文件大小 --no-trunc 显示完整的镜像 ID -q, --quiet 静默模式,
小菠萝测试笔记
2020/11/11
3K2
Docker(11)- docker ps 命令详解
Docker--docker ps 命令与结果解析
命令详解 意义:列出容器相关信息 格式:docker ps [options] 参数列表: 参数 解释 无参 默认显示正在运行的容器 -a 显示所有的容器,包括未运行的 -f 根据条件过滤显示的内容 --format 指定返回值的模板文件 -l 显示最近创建的容器 -n 列出最近创建的n个容器 --no-trunc 不截断输出 -q 静默模式,只显示容器ID -s 显示总的文件大小 命令 docker ps 获取的结果示例 CONTAINER ID IMAG
洋仔聊编程
2019/01/15
2.7K0
Docker--docker ps 命令与结果解析
里面包含ps的详细使用教程,虽然是英文的但是实例有一点英语功底就可以看懂,其中包含ps的模糊查询等。
洋仔聊编程
2020/08/02
1.7K0
迁移docker工作目录
目的:为了解决 /var/lib/docker/overlay2 占用大 /var 分区空间不够问题
louiezhou001
2021/11/01
1.5K0
安装docker后修改docker文件目录
docker会下载容器,运行会挂载磁盘,所以我们需要把docker装在大容量的分区。
Ryan-Miao
2019/07/08
1.7K0
【目标检测】开源 | TIDE:目标检测错误分析工具
论文地址: http://arxiv.org/pdf/2008.08115v2.pdf
CNNer
2020/11/03
2.2K0
【目标检测】开源 | TIDE:目标检测错误分析工具
ln命令
ln命令用来为文件创建链接,链接类型分为硬链接和软链接两种,软链接又称符号链接,默认的链接类型是硬链接,如果要创建符号链接必须使用-s选项,符号链接文件不是一个独立的文件,其很多属性依赖于源文件,所以给符号链接文件设置存取权限是没有意义的。
WindRunnerMax
2020/08/27
9660
Docker之修改docker默认的目录
 默认情况下Docker会使用/var/lib/docker,此目录会放镜像好容器及卷的信息,有时候,我们想换到其它目录,而不是此目录下,那么怎么处理呢?
克虏伯
2019/08/22
3K1
Linux ln命令
Linux ln命令是一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接。
狼啸风云
2020/05/07
4.4K0
Docker永久挂载本地目录
有时我们的docker需要用到本地的数据集,虽然我们可以用docker cp的方式进行拷贝,但是通常如果数据集很大,所以直接拷贝到容器里显然不现实,所以我们需要把数据集的路径挂载到容器。但是普通的docker mount命令又有一个缺点,就是每次开启这个容器都得输这个命令,所以要想长期挂载这个目录下面的方法:
marsggbo
2020/06/12
4.7K0
docker:(3)docker容器挂载宿主主机目录
有一项重要的参数 -v 目录挂载,就是让容器内部目录和宿主主机目录关联起来,这样就可以直接操作宿主主机目录而不用再操作具体容器了
肖哥哥
2018/08/02
2.5K0
docker 错误记录
windows和Linux的换行符存在差异,Windows下写的脚本拷贝到Linux系统,会导致#!/bin/bash后面多个^M,因此提示找不到文件。
luoheng
2022/08/29
4020
简述linux系统的目录层次结构_docker 目录
Linux 的文件系统是采用层级形式的树状目录结构,最上层为根目录“/”,然后在根目录下创建其他目录。在 Linux 操作系统当中,是没有像我们在 Windows 系统中一样的界面的,我们能看到的就是各级文件,也就是目录结构。Linux 操作系统中,一切皆文件,Linux 会将所有硬件设备也映射为文件来管理。
全栈程序员站长
2022/11/09
1.9K0
简述linux系统的目录层次结构_docker 目录
linux工具箱_docker ps命令
GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。 对于一名Linux下工作的c++程序员,gdb是必不可少的工具;
全栈程序员站长
2022/10/05
1.9K0
【⚠️windows删除文件夹抽风了⚠️】“错误0x80070091:目录不是空的”问题处理
windows有时候会抽风,删除东西会出现异常。有次删除文件夹时就出现无法删除的情况,提示“一个意外错误使您无法删除该文件夹。如果您继续收到此错误,可以使用错误代码来搜索有关此问题的帮助。错误0x80070090:目录不是空的”。在网上搜索了一大圈,总结了一个比较靠谱的方法,现在分享给大家(核心就是把文件夹变成非空文件夹):
全栈程序员站长
2022/07/25
3.4K0
【⚠️windows删除文件夹抽风了⚠️】“错误0x80070091:目录不是空的”问题处理
检查当前终端是不是 Docker
要确定当前运行的终端是否在 Docker 容器内,可以检查容器特定的文件和环境变量。以下是一种方法,通过查看 /proc/1/cgroup 文件来判断:
宋天伦
2023/10/21
4190
linux ln 软连接_ln命令建立软链接
[root@ www.linuxidc.com ~]# ln -s /home/kk/ss.sh ~ #如果不写目标地址,即在当前目录建接立链接
全栈程序员站长
2022/11/11
9.8K0
ln命令详解
本文介绍了ln命令的详细用法,包括创建硬连接和符号连接,以及使用ln命令创建目录的硬连接和符号连接。同时,文章还介绍了ln命令的参数和实例,以及使用这些参数的优点。
诺谦
2018/01/03
1.9K0
ln命令详解

相似问题

JavaScript添加天数

50

momentJS在JavaScript中没有正确地添加天数

37

Javascript日期添加天数

13

在循环Javascript中添加天数

334

在javascript中添加日期天数

33
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文