我正在使用用户数据 powershell 脚本设置 EC2 启动模板,并且希望能够在脚本本身中使用 templatefile。我能够通过自动缩放启动配置来做到这一点,因为它接受用户数据作为字符串。对于 EC2 启动模板,它要求它是一个 base64 编码的字符串,但它似乎不接受这一点:
user_data = "${base64encode(<<EOF
<powershell>
$file_content = @"
${templatefile("myfile.txt", var.myfilevars)}
"@
</powershell>
EOF"
)}"
Run Code Online (Sandbox Code Playgroud)
上述内容是否有可行的变体?或者另一种方式来实现这一点?
搜索后,我发现我可以使用Terraforming Tool来将 AWS 云基础设施导出为 terraform 代码。
如何将我现有的 Google 云基础设施导出到 terraform?GCP 是否有任何类似或本机工具?
我正在尝试此模块中的示例 https://registry.terraform.io/modules/terraform-aws-modules/security-group/aws/3.10.0
主要.tf:
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
name = "${var.environment}-project-vpc"
cidr = "10.0.0.0/16"
#
# Important!
# https://github.com/terraform-aws-modules/terraform-aws-vpc/issues/403
# Only append or delete from the end of the list
#
azs = ["us-east-2a", "us-east-2b", "us-east-2c"]
private_subnets = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"]
public_subnets = ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"]
enable_nat_gateway = true
single_nat_gateway = true
one_nat_gateway_per_az = false
enable_dns_hostnames = true
enable_dns_support = true
tags = module.project_config.tags
}
module "bastion_sg" {
source = "terraform-aws-modules/security-group/aws"
name = "bastion-service"
description = "Security group for …Run Code Online (Sandbox Code Playgroud) terraform terraform-provider-aws terraform0.12+ terraform-aws-modules
无法使用 terraform 在 azure 中为 nsg 安全规则提供目标端口范围。Terraform v0.12.28provider.azurerm v2.18.0
security_rule {
name = "databricks-control-plane-inbound-rule"
priority = 110
direction = "Inbound"
access = "Allow"
protocol = "Tcp"
source_port_range = "*"
destination_port_range = 225557
}
Run Code Online (Sandbox Code Playgroud)
错误:发送请求失败:StatusCode=400 -- 原始错误:
代码 =“SecurityRuleInvalidPortRange”消息 =“安全规则的端口范围无效。提供的值:225557。值应为整数或带有“-”分隔符的整数范围。有效范围0-65535。” 详情=[]
我正在编写一个 terraform 模块,它接受一个list实体,每个实体都entity与一个别名列表相关联。我在访问别名对象并传入 时遇到问题each.key。非常感谢任何帮助。
resource "vault_identity_entity_alias" "alias" {
provider = vault.this
for_each = [
for entity in var.entities : {
for alias in entity.aliases :
alias.name => alias
}
]
name = each.key
mount_accessor = lookup(vault_auth_backend.b[each.key], "accessor", null)
canonical_id = vault_identity_entity.entity[each.value.entity].id
}
Run Code Online (Sandbox Code Playgroud)
变量定义
variable "entities" {
description = "A collection of entities where each entity is associated with a list aliases "
type = list(object({
name = string
policies = list(string)
metadata = map(string) …Run Code Online (Sandbox Code Playgroud) 当我使用 Terraform 代码自动创建具有各种资源(例如 Redis、SQL、GKE 等)的新 GCP 项目时,出现以下错误:
Error: error creating NodePool: googleapi: Error 403:
(1) insufficient regional quota to satisfy request: resource "CPUS": request requires '35.0' and is short '24.0'. project has a quota of '24.0' with '24.0' available. View and manage quotas at https://console.cloud.google.com/iam-admin/quotas?usage=USED&project=<PROJECT_ID>
(2) insufficient regional quota to satisfy request: resource "IN_USE_ADDRESSES": request requires '10.0' and is short '4.0'. project has a quota of '8.0' with '8.0' available. View and manage quotas at https://console.cloud.google.com/iam-admin/quotas?usage=USED&project=<PROJECT_ID>., forbidden
Run Code Online (Sandbox Code Playgroud)
我尝试运行的 Terraform 代码: …
我想通过 terraform 根据 ECS 集群的任务状态更改设置 Cloudwatch 事件规则。当任务进入“已停止”或“正在运行”状态时,我希望收到通知。
每当任一事件发生时,这条规则都会起作用并匹配吗?然后,我将相应地创建资源“aws_cloudwatch_event_target”:
resource "aws_cloudwatch_event_rule" "ecs-sns-rule" {
name = "ecs task state change"
event_pattern = <<PATTERN
{
"source": [
"aws.ecs"
],
"detail-type": [
"ECS Task State Change"
],
"detail": {
"lastStatus": [
"STOPPED",
"RUNNING"
],
"clusterArn": "arn:aws:ecs:us-west-2:XXXXXXXXX:Cluster/XXXXXXXX"
}
}
PATTERN
}
Run Code Online (Sandbox Code Playgroud) 我在我的 vpc 中创建了 4 个子网,其中 2 个是公共子网,2 个是私有子网。我需要将 2 个公共子网关联到一个路由表,将 2 个私有子网关联到另一个路由表。查看文档,aws_route_table_association似乎只接受一个subnet_id.
如何添加多个,subnets如图所示?
resource "aws_route_table_association" "public-test" {
subnet_id = -> I need to add 2 public subnets here
route_table_id = aws_route_table.public-test.id
}
resource "aws_route_table_association" "private-test" {
subnet_id = -> I need to add 2 private subnets here
route_table_id = aws_route_table.private-test.id
}
Run Code Online (Sandbox Code Playgroud)
以下是子网和路由:
resource "aws_subnet" "public-test-a" {
vpc_id = aws_vpc.vpc-test-02.id
cidr_block = "10.0.0.0/28"
map_public_ip_on_launch = true
availability_zone = var.AZ[0]
tags = {
Name …Run Code Online (Sandbox Code Playgroud) 最近AWS发布了基于HTTPS的API网关(不是REST)。我们使用 Terraform 来管理 AWS 资源,并且我们有一个服务来创建 AWS HTTPS API 网关资源,存在一个安全问题,即我们允许任何 IP/系统调用 API,因此我们计划添加一个策略(资源策略)以限制仅访问特定 IP。对于 REST API 网关来说,实现这一点很容易,因为我们有aws_api_gateway_rest_api_policy资源来通过 Terraform 创建策略并将其附加到网关,但对于 HTTPS API 网关却无法实现同样的效果。我们使用aws_apigatewayv2_api创建 HTTPS 网关资源,但找不到附加策略的资源,或者在创建网关本身时没有指定策略的选项。如果您能了解如何将策略附加到基于 HTTPS 的 API,我们将不胜感激。谢谢。
amazon-web-services terraform aws-api-gateway terraform-provider-aws
在 terraform 中创建具有共享负载均衡的 ElasticBeanstalk 环境时,是否可以将默认侦听器规则设置为使用 HTTPS:443 侦听器而不是 HTTP:80 侦听器?
我的 ALB 将端口 80 作为侦听器,将流量从 http 重定向到 https。现在,当 beanstalk 创建环境时,它会在 HTTP:80 侦听器中创建侦听器规则,但我不希望它这样做。在控制台中,我可以创建一个具有共享 ALB 的环境,并选择默认侦听器端口为 443(HTTPS),并将在 443 侦听器中创建默认规则,这正是我想要发生的情况。
我正在使用 terraform 构建此项目,并且在 ElasticBeanstalk常规选项的常规选项中,我没有看到将默认侦听器规则设置为使用 HTTPS:443 作为 elbv2 设置的选项。
amazon-web-services amazon-elastic-beanstalk terraform aws-application-load-balancer