GitLab CI Pipeline调用Terraform创建的Lambda函数参数语法错误求助
问题修复方案
核心错误点及修正
你的invoke阶段存在3个语法错误,导致Lambda函数名参数失效:
- 变量赋值语法错误:Shell中变量赋值不能有空格,且无需使用
set命令,直接赋值即可 - 变量引用错误:变量名是
func_name,引用时应该用$func_name而非$func-name(Shell变量名不允许包含减号) - 引号解析问题:单引号包裹的变量不会被Shell解析,需要改用双引号或直接引用
修正后的invoke阶段代码
invoke: stage: invoke script: - func_name="${CI_COMMIT_REF_NAME}-hello-world" - aws lambda invoke --function-name "$func_name" response.json dependencies: - apply
额外建议:修复before_script中的环境变量设置
原配置中before_script里的set命令不符合Bash语法,正确的环境变量设置应该用export:
before_script: - export TF_VAR_AWS_ACCESS_KEY=${AWS_ACCESS_KEY_ID} - export TF_VAR_AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} - rm -rf .terraform - terraform --version - terraform init
完整修正后的GitLab CI配置
stages: - validate - plan - apply - invoke image: name: hashicorp/terraform:light entrypoint: - '/usr/bin/env' - 'PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' before_script: - export TF_VAR_AWS_ACCESS_KEY=${AWS_ACCESS_KEY_ID} - export TF_VAR_AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} - rm -rf .terraform - terraform --version - terraform init validate: stage: validate script: - terraform validate plan: stage: plan script: - terraform plan -out "planfile" dependencies: - validate artifacts: paths: - planfile apply: stage: apply script: - terraform apply -input=false "planfile" dependencies: - plan invoke: stage: invoke script: - func_name="${CI_COMMIT_REF_NAME}-hello-world" - aws lambda invoke --function-name "$func_name" response.json dependencies: - apply
内容的提问来源于stack exchange,提问作者Baskaran Thulukanam
相关产品推荐
相关产品推荐

