在Lambda子模块中创建额外AWS策略时触发无效索引错误
问题解决:Terraform Lambda模块多策略配置错误
错误原因
你当前的policy_jsons配置是把两个JSON策略合并成了单个字符串放到列表里,所以var.policy_jsons实际是长度为1的列表,但你设置了number_of_policy_jsons = 2,模块内部用count循环时,当count.index=1就会找不到对应元素,触发索引越界错误。
正确配置方式
需要将每个独立的IAM策略JSON作为policy_jsons列表的一个单独元素,每个策略用单独的heredoc块包裹:
number_of_policy_jsons = 2 policy_jsons = [ <<-EOT { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "xray:*" ], "Resource": ["*"] } ] } EOT, <<-EOT { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:*" ], "Resource": ["*"] } ] } EOT ]
额外说明
- 确保每个策略JSON是列表的独立元素,用逗号分隔不同的heredoc块
- 也可以直接使用JSON字符串(不需要heredoc),只要保证每个策略是列表的一个元素:
policy_jsons = [ "{\"Version\": \"2012-10-17\", \"Statement\": [{\"Effect\": \"Allow\", \"Action\": [\"xray:*\"], \"Resource\": [\"*\"]}]}", "{\"Version\": \"2012-10-17\", \"Statement\": [{\"Effect\": \"Allow\", \"Action\": [\"s3:*\"], \"Resource\": [\"*\"]}]}" ] number_of_policy_jsons的值要和policy_jsons列表的长度严格保持一致,避免再次出现索引不匹配问题
内容的提问来源于stack exchange,提问作者16069229
相关产品推荐
相关产品推荐

