You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Makefile调用AWS-CLI时提示找不到配置文件Error 255

解决Makefile中AWS CLI无法识别配置文件的问题

我之前也踩过这个坑!你明明在命令行里能正常执行AWS CloudFormation打包命令,但放到Makefile里用变量引用profile就报错The config profile (abc) could not be found,实在让人头疼对吧?下面给你分析几种可能的原因和对应的解决办法:

原因1:Makefile的子shell不继承当前Shell的环境变量

Makefile在执行命令时,会启动一个全新的子shell,这个子shell不会自动继承你当前终端里的所有环境变量——比如如果你自定义了AWS_CONFIG_FILE或者AWS_SHARED_CREDENTIALS_FILE路径,子shell里是读不到这些的,导致AWS CLI找不到你的配置文件。

解决办法:

  • 方法一:在Makefile开头显式指定AWS配置文件路径(如果是默认路径可以省略,但加上更稳妥):
PROFILE = abc
# 指定默认的AWS配置文件路径,如果你自定义过路径就改成你的路径
AWS_CONFIG_FILE ?= $(HOME)/.aws/config
AWS_SHARED_CREDENTIALS_FILE ?= $(HOME)/.aws/credentials
.PHONY: package
package:
	aws cloudformation package \
	--profile $(PROFILE) \
	--template-file template.yaml \
	--s3-bucket cfts \
	--s3-prefix _temp \
	--output-template-file _o.yaml
  • 方法二:执行make命令时手动传递环境变量:
make package AWS_CONFIG_FILE=~/.aws/config AWS_SHARED_CREDENTIALS_FILE=~/.aws/credentials

原因2:Makefile命令的换行反斜杠后有多余空格

你用反斜杠\来换行拆分AWS命令时,一定要注意反斜杠后面不能有任何空格或制表符,必须直接换行。如果反斜杠后有空格,会导致命令被截断,--profile $(PROFILE)可能没被正确解析,看起来就像是找不到配置文件。

解决办法:
检查你的Makefile每一行的反斜杠,确保后面没有多余字符,修正后的代码如下:

PROFILE = abc
.PHONY: package
package:
	aws cloudformation package \
	--profile $(PROFILE) \
	--template-file template.yaml \
	--s3-bucket cfts \
	--s3-prefix _temp \
	--output-template-file _o.yaml

原因3:变量展开出现问题

有时候Makefile的变量定义或展开可能出现意料之外的问题,比如变量名写错、定义时有特殊字符等。

解决办法:
先把变量替换成硬编码的值测试,看看能不能正常执行:

.PHONY: package
package:
	aws cloudformation package \
	--profile abc \
	--template-file template.yaml \
	--s3-bucket cfts \
	--s3-prefix _temp \
	--output-template-file _o.yaml

如果这个能成功,说明是变量PROFILE的问题,检查PROFILE = abc这一行,确保等号前后的空格没问题,或者有没有不小心加了引号之类的多余字符。

原因4:排查执行时的实际环境

如果上面的方法都没用,你可以在Makefile里加一些调试输出,看看执行时的变量和环境变量到底是什么:

PROFILE = abc
.PHONY: package
package:
	@echo "当前使用的PROFILE: $(PROFILE)"
	@echo "AWS配置文件路径: $(AWS_CONFIG_FILE)"
	@echo "AWS凭证文件路径: $(AWS_SHARED_CREDENTIALS_FILE)"
	aws cloudformation package \
	--profile $(PROFILE) \
	--template-file template.yaml \
	--s3-bucket cfts \
	--s3-prefix _temp \
	--output-template-file _o.yaml

执行make package后,看看打印出来的信息是不是符合预期,这样就能快速定位到底是变量没传递对,还是环境变量的问题了。

内容的提问来源于stack exchange,提问作者Balu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:20:42