我有带有 Name=product 标签的 Lambda。
我想使用 Terraform 获取它们,查看aws_lambda_function,我只能通过 function_name 获取单个 lambda
data "aws_lambda_function" "existing" {
function_name = var.function_name
}
Run Code Online (Sandbox Code Playgroud) 我在 terraform 模块中定义了自定义资源:
resource "aws_alb_target_group" "whatever"
{
....
}
Run Code Online (Sandbox Code Playgroud)
事实证明whatever这个名字不好,我需要更新它。
经典的方法是登录到每个环境并执行terraform state mv,但是我有很多环境,并且没有自动化执行此类操作。
如何在不手动移动状态的情况下更改资源名称(仅通过编辑 terraform 模块和应用计划)?
我正在使用 AWS 模块在 terraform 中构建 lambda,我的代码如下:
\nmodule "lambda_function" {\n\n# * Lambda module configs\n source = "terraform-aws-modules/lambda/aws"\n version = "3.0.0"\n\n # * Lambda Configs\n function_name = "${var.function_name}-${var.env}"\n description = "My Project"\n handler = local.constants.lambda.HANDLER\n runtime = local.constants.lambda.VERSION\n memory_size = 128\n cloudwatch_logs_retention_in_days = 14\n source_path = "./function/"\n timeout = local.constants.lambda.TIMEOUT\n create_async_event_config = true\n maximum_retry_attempts = local.constants.lambda.RETRIES_ATTEMPT\n \n layers = [\n data.aws_lambda_layer_version.layer_requests.arn\n ]\n\n environment_variables = {\n AWS_ACCOUNT = var.env\n SLACK_HOOK_CHANNEL = var.SLACK_HOOK_CHANNEL\n }\n\n tags = {\n Name = "${var.function_name}-${var.env}"\n }\n\n trusted_entities = …Run Code Online (Sandbox Code Playgroud) amazon-web-services amazon-vpc aws-lambda terraform terraform-provider-aws
我正在使用 terraform 并通过模块配置资源。在某些环境中我想创建一个模块,在其他环境中则不想,最好的方法是什么?尝试使用计数方法:
module "module_name" {
create = var.create_module
source = "../../modules/module"
}
Run Code Online (Sandbox Code Playgroud)
模块内部当然包含检查是否创建资源的资源:
resource "some resource" "main" {
count = var.create == true ? 1 : 0
Run Code Online (Sandbox Code Playgroud)
由于我在模块内使用 count,我在模型中的所有资源(数十个)上收到以下错误:
Because some_resource.main has "count" set, its attributes must
be accessed on specific instances.
For example, to correlate with indices of a referring resource, use:
some_resource.main[count.index]
Run Code Online (Sandbox Code Playgroud)
有没有办法在模块或根内部使用 count,而不重构 [count.index] 的整个代码(谁知道可能会导致许多其他问题)?
我正在尝试使用 Terraform 配置 AWS Aurora Postgres Serverless v2。我在这里阅读了文档,它说,它只需要这些参数:
\nengine_mode设置"provisioned"serverlessv2_scaling_configuration在集群中resource "aws_rds_cluster_instance"instance_class设置为"db.serverless"但我返回了这个错误
\n\xe2\x95\xb7\n\xe2\x94\x82 Error: Unsupported block type\n\xe2\x94\x82 \n\xe2\x94\x82 on ../../modules/postgres_serverless_v2/main.tf line 70, in resource "aws_rds_cluster" "pg":\n\xe2\x94\x82 70: serverlessv2_scaling_configuration {\n\xe2\x94\x82 \n\xe2\x94\x82 Blocks of type "serverlessv2_scaling_configuration" are not expected here.\nRun Code Online (Sandbox Code Playgroud)\n当我尝试寻找解决方案时,我不太确定下一步该做什么,但每个人似乎对此都没有问题。
\n下面是我的代码片段:
\nresource "aws_rds_cluster" "pg" {\n cluster_identifier = "${var.namespace}-${var.env_name}-${var.name}-pg-v2"\n engine = "aurora-postgresql"\n engine_version = null\n engine_mode = "provisioned" # still using serverless. requirement …Run Code Online (Sandbox Code Playgroud) amazon-web-services terraform terraform-provider-aws aws-aurora-serverless
我的地形部署遇到了一个小问题。
新的任务定义是在部署期间创建的。然后我也在网络控制台中看到了这一点。ecs 现在应该实际使用这个新任务定义并更新它。相反,会再次部署最新的修订版。
我的期望是,如果我创建一个新的任务定义并将 arn 从该定义传递到 ecs,它将被部署。
不幸的是,我不知道从这里该去哪里。
我使用以下配置创建了一个 ecs 服务:
resource "aws_ecs_service" "service" {
name = "${var.appPrefix}-api-service-${var.envPrefix}"
cluster = var.ecsClusterId
task_definition = aws_ecs_task_definition.ecsTaskDefinition.arn
platform_version = "1.3.0"
desired_count = 1
deployment_minimum_healthy_percent = 50
deployment_maximum_percent = 200
launch_type = "FARGATE"
scheduling_strategy = "REPLICA"
wait_for_steady_state = true
force_new_deployment = true
network_configuration {
security_groups = [var.ecsSecurityGroupId]
subnets = [var.privateSubnet1Id, var.privateSubnet2Id]
assign_public_ip = false
}
load_balancer {
target_group_arn = var.targetGroupId
container_name = var.containerName
container_port = var.httpPort
}
lifecycle {
ignore_changes = [task_definition, desired_count]
} …Run Code Online (Sandbox Code Playgroud) amazon-web-services amazon-ecs terraform aws-fargate terraform-provider-aws
我确实有 SQS 的默认策略,如下所示。参考了文档 - https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/sqs_queue_policy
如果需要 sns 订阅,我想将该策略附加到默认策略之上。
默认策略如下
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sqs:SendMessage*"
],
"Resource": [
"${aws_sqs_queue.queue.arn}"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
附加政策如下
{
"Sid": "topic-subscription-arn-test",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "SQS:SendMessage",
"Resource": ["${aws_sqs_queue.queue.arn}"],
"Condition": {
"ArnLike": {
"aws:SourceArn": "arn-test"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我刚刚尝试过,但政策被覆盖了。有什么想法可以使用 Terraform 附加策略吗?提前致谢。正在寻找这种方法的某种想法吗?可能有超过 2 个策略,因此我正在尝试附加这些策略。
amazon-sqs amazon-web-services terraform terraform-provider-aws
当我尝试运行“Terraform init”时出现错误,我在这里缺少什么?
\n\xe2\x94\x82 Error: Variables not allowed\n\xe2\x94\x82 \n\xe2\x94\x82 on ../../resources/s3-bucket/main.tf line 12, in resource "aws_s3_bucket" "s3-bucket":\n\xe2\x94\x82 12: prevent_destroy = var.prevent_destroy\n\xe2\x94\x82 \n\xe2\x94\x82 Variables may not be used here.\n\xe2\x95\xb5\n\n\xe2\x95\xb7\n\xe2\x94\x82 Error: Unsuitable value type\n\xe2\x94\x82 \n\xe2\x94\x82 on ../../resources/s3-bucket/main.tf line 12, in resource "aws_s3_bucket" "s3-bucket":\n\xe2\x94\x82 12: prevent_destroy = var.prevent_destroy\n\xe2\x94\x82 \n\xe2\x94\x82 Unsuitable value: value must be known\nRun Code Online (Sandbox Code Playgroud)\n资源:
\n resource "aws_s3_bucket" "s3-bucket" {\n bucket = var.bucket_name\n tags = {\n Name = var.tags_name\n Environment = var.tags_environment\n }\n versioning { enabled = var.versioning }\n lifecycle {\n …Run Code Online (Sandbox Code Playgroud) amazon-s3 amazon-web-services terraform terraform-provider-aws
我有一个现有的 VPC,它有 4 个 CIDR,我需要检索这些 CIDR 并将它们作为入站规则添加到安全性中。有没有办法在 Terraform 中做到这一点?我没有找到一种方法来做到这一点 Terraform
data "aws_vpc" "example_vpc" {
id = "vpc-xxxxx" # Replace with the ID of your VPC
}
output "vpc_cidr_block" {
value = "${data.aws_vpc.example_vpc.cidr_block}"
}
Run Code Online (Sandbox Code Playgroud)
我已尝试上面的代码片段,但输出值仅给出主要 CIDR。
Terraform 版本:v0.14.5
terraform ×10
amazon-ecs ×1
amazon-rds ×1
amazon-s3 ×1
amazon-sqs ×1
amazon-vpc ×1
aws-fargate ×1
aws-lambda ×1
devops ×1