Allow for custom_iam_policy_arns that are unknown during terraform apply
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 35/100
- Tipo de issue
- Bug
- Clareza
- Razoavelmente clara
- Status de atividade
- Estagnada
- Stack de tecnologia
- aws, terraform
- Domínio
- cloud, infrastructure
Direção de pesquisa
Comece pelo recurso gerado aws_iam_role_policy_attachment.custom em iam-role.tf, na linha 89, e inspecione como local.custom_iam_policy_arns_map é usado em for_each. Reproduza a configuração de exemplo e, em seguida, verifique se plan e apply conseguem lidar com um ARN de policy disponível no momento do apply e criar o anexo da policy junto com a função Lambda.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Describe the Bug
Getting below mentioned error:
╷
│ Error: Invalid for_each argument
│
│ on .terraform\modules\data_science_lambda.data_science_lambda\iam-role.tf line 89, in resource "aws_iam_role_policy_attachment" "custom":
│ 89: for_each = local.enabled ? local.custom_iam_policy_arns_map : {}
│ ├────────────────
│ │ local.custom_iam_policy_arns_map will be known only after apply
│ │ local.enabled is true
│
│ The "for_each" map includes keys derived from resource attributes that
│ cannot be determined until apply, and so Terraform cannot determine the
│ full set of keys that will identify the instances of this resource.
│
│ When working with unknown values in for_each, it's better to define the map
│ keys statically in your configuration and place apply-time results only in
│ the map values.
│
│ Alternatively, you could use the -target planning option to first apply
│ only the resources that the for_each value depends on, and then apply a
│ second time to fully converge.
╵
=====================================================
Expected Behavior
Policy should be created and alingned with Lambda role at runtime along with AWS Lambda function
Steps to Reproduce
Sample Code:
locals {
enabled = module.this.enabled
custom_iam_policy_arns = [ aws_iam_policy.custom_s3_policy.arn ]
s3_lambda_environment = var.abc_lambda_env == null ? null : { variables = var.abc_lambda_env }
}
data "aws_iam_policy_document" "custom_s3_policy" {
version = "2012-10-17"
statement {
actions = [
"s3:ListBucket"
]
resources = [
"arn:aws:s3:::${data.terraform_remote_state.abc_bucket_id.outputs.bucket_id}"
]
}
statement {
actions = [
"secretsmanager:DescribeSecret",
"secretsmanager:GetSecretValue",
"secretsmanager:ListSecrets",
"secretsmanager:ListSecretVersionIds"
]
resources = [
"*"
]
}
}
resource "aws_iam_policy" "custom_s3_policy" {
name = "${module.this.id}-access-policy"
description = "Custom policy to allow access to one S3 bucket only."
policy = data.aws_iam_policy_document.custom_s3_policy.json
tags = module.this.tags
}
data "terraform_remote_state" "abc_bucket_id" {
backend = "s3"
config = {
bucket = var.abc_tfstate_bucket_name
key = var.abc_s3_bucket_key
region = "XXX"
}
}
module "abc_lambda" {
source = "cloudposse/lambda-function/aws"
version = "0.5.5"
enabled = true
function_name = "${module.this.id}"
description = "Lambda test."
s3_bucket = var.s3_lambda_s3_bucket
s3_key = var.s3_lambda_s3_key
runtime = var.s3_lambda_runtime
handler = var.s3_lambda_handler
lambda_environment = local.s3_lambda_environment
architectures = ["x86_64"]
memory_size = var.s3_lambda_memory_size
ephemeral_storage_size = var.s3_lambda_storage_size
timeout = var.s3_lambda_timeout
custom_iam_policy_arns = local.custom_iam_policy_arns
context = module.this.context
vpc_config = var.abc_lambda_vpc_config
}
resource "aws_lambda_permission" "allow_s3" {
statement_id = "AllowExecutionFromS3"
action = "lambda:InvokeFunction"
function_name = module.abc_lambda.function_name
principal = "s3.amazonaws.com"
source_arn = data.terraform_remote_state.abc_bucket_id.outputs.bucket_arn
}
Screenshots
No response
Environment
No response
Additional Context
No response
- Linguagem predominante
- HCL
- Estrelas
- 36
- Forks
- 44
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de cloudposse/terraform-aws-lambda-function
-
bug
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 58/100
-
Warning: Deprecated attributeTalvez já em andamento @arnoldasbrazys assumiu há 414 dias. Abertabug
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 55/100
cloudposse/terraform-aws-lambda-function#89 · 1 reação ·
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 45/100
cloudposse/terraform-aws-lambda-function#84 · 3 reações ·
-
bug
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 35/100
cloudposse/terraform-aws-lambda-function#62 · 1 comentário ·
-
bug
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 55/100
cloudposse/terraform-aws-lambda-function#43 · 2 comentários · 4 reações ·
Todas as issues de cloudposse/terraform-aws-lambda-function
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
Mantenedores costumam responder em até 1 dia
-
volcengine_vpc: perpetual diff on user_cidr_blocks (known after apply) when VPC has no user CIDRsAberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
volcengine/terraform-provider-volcengine#242 · 1 reação ·
-
fix(storage-resize-images): kit/extension parity – BUCKET_REGION offers europe-north2 and northamerica-south1, which can't deployTalvez já em andamento Um pull request vinculado a esta issue está aberto ou já foi mesclado. Abertakits type: bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
firebase/extensions#3268 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 78/100
Uninett/argus-helm#18 ·
-
Needs: Triage :mag: Product: Terraform (AVM)
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
Azure/Azure-Landing-Zones#4313 ·