AWS:找不到配置文件 (MyName)
Posted
技术标签:
【中文标题】AWS:找不到配置文件 (MyName)【英文标题】:AWS : The config profile (MyName) could not be found 【发布时间】:2016-03-12 03:11:31 【问题描述】:每次我想使用 AWS 进行配置时,都会收到以下错误:
"The config profile (myname) could not be found"
喜欢:aws 配置
我正在使用 Python 3.4,我想使用 AWS CLI Keyring 来加密我的凭证。
【问题讨论】:
另见:serverfault.com/questions/491124/… 这发生在我身上,因为启动服务的用户是root用户,所以找不到AWS配置文件,当我用ubuntu用户启动服务时,它找到了配置,问题解决了! 【参考方案1】:当我搬到一台新机器时遇到了这个问题,我随身携带了 AWS_DEFAULT_PROFILE 环境变量,但没有携带我的 ~/.aws 目录。在我取消设置该变量或正确配置命名配置文件之前,我无法让任何 awscli 命令工作。但即使是aws configure
命令也被破坏了,这让事情变得有点棘手。假设你手边有一个类 Unix 的 shell:
env | grep AWS_
如果您没有看到此处列出的AWS_DEFAULT_PROFILE
或AWS_PROFILE
,则此答案不适用于您。
临时删除默认配置文件:unset AWS_DEFAULT_PROFILE
和/或unset AWS_PROFILE
配置相关配置文件:aws --profile foo configure
重置默认配置文件变量:exec $SHELL
测试您的新设置:aws iam get-user
【讨论】:
AWS_PROFILE
环境变量存在同样的问题。只需unset AWS_PROFILE
然后执行 aws configure * 命令。
我不小心删除了我的 .aws 文件夹。您的向导帮助了我。【参考方案2】:
请注意,如果找不到启动服务的用户的 aws 配置文件,则可能会发生此问题。
对我来说,问题是服务正在启动 root 用户,因此它无法找到 AWS 配置文件。我通过使服务从非 root 用户启动来修复它,因此可以找到 AWS 配置。
【讨论】:
【参考方案3】:我在 nginx 和 Gunicorn 中部署 Flask 应用程序时遇到了同样的问题。
这可能对遇到与我相同问题的人有所帮助
我的案例:使用 AWS 凭证生成 rds AUTH 令牌
在开发模式下,它工作正常并且能够从 .aws 文件夹中获取 AWS Config
当我尝试通过 Nginx-Gunicorn It gets failed 运行它时,即使我授予了相应文件夹和服务的所有 root 权限。
我已将 AccessKey 和 SecretKey 存储在环境变量中 并使用这些凭据创建身份验证令牌
import boto3,os
S3_KEY=os.environ['aws_access_key']
S3_SECRET=os.environ['aws_secret_access_key']
def generate_iam_rds_token(server,region,port,user,S3_KEY,S3_SECRET):
s3_conn = boto3.client('rds', region_name=region,
aws_access_key_id=S3_KEY,
aws_secret_access_key=S3_SECRET)
pwd = s3_conn.generate_db_auth_token(server, port, user, Region=region)
return pwd
#call the method to get a token
server='https://example.com'
region='ap-west-3'
port='port_number'
user='db_user_name'
pwd_token=generate_iam_rds_token(server,region,port,user,S3_KEY,S3_SECRET)
SQLALCHEMY_DATABASE_URI = 'postgresql+psycopg2://user:pwd@host:port/db'.format(user=user,host=host,port=port,db=db,pwd=pwd)
注意:在 Ubuntu 操作系统中,使用 sudo -s
或您在 gunicorn 中配置的相应用户以 root 用户身份登录
和
做aws configure
【讨论】:
【参考方案4】:以防万一有人试图在无头服务器上执行此操作(在我的情况下是 CI 运行器,将 EKS 集群配置添加到 kubeconfig)。
我必须这样做的原因是,运行程序与所讨论的 EKS 集群位于不同的 AWS 账户中(并且 aws eks 命令在同一个账户中查找)。
我确实有一种方法可以对正确的 AWS 账户进行身份验证,该账户使用有效的凭据填充 ~/.aws/credentials。
首先我进行身份验证以填充 ~/.aws/credentials 那么
cp ~/.aws/credentials ~/.aws/config
sed -i 's/profilename/profile profilename/g' ~/.aws/config
然后当我按照它运行时
aws eks update-kubeconfig --name cluster-name --profile profilename --region us-east-1
【讨论】:
【参考方案5】:在我的例子中,我在 AWS CLI 工具中使用了 Docker 方法,但我没有充分阅读说明以意识到我必须让我的凭证目录对 docker 容器可见。 https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-docker.html
而不是
docker run --rm -it amazon/aws-cli:latest command args...
我需要做的:
docker run --rm -it -v ~/.aws:/root/.aws amazon/aws-cli:latest command args...
【讨论】:
【参考方案6】:在我的例子中,我在具有旧值的环境变量中使用了名为“AWS_PROFILE”的变量。
【讨论】:
【参考方案7】:使用配置文件有点棘手。文档可在以下位置找到: https://docs.aws.amazon.com/cli/latest/topic/config-vars.html (但您需要注意 AWS_PROFILE 等环境变量)
通过 aws cli 使用配置文件需要一个配置文件(默认为 ~/.aws/config
或使用 AWS_CONFIG_FILE
设置)。
一个示例配置文件供参考:
`
[profile PROFILE_NAME]
output=json
region=us-west-1
aws_access_key_id=foo
aws_secret_access_key=bar
`
Env 变量 AWS_PROFILE
通知 AWS cli 有关要从 AWS config 使用的配置文件。它不是像 AWS_ACCESS_KEY_ID
/AWS_SECRET_ACCESS_KEY
这样的配置文件的替代品,用于 ~/.aws/credentials
。
另一个有趣的事实是,如果设置了AWS_PROFILE
并且设置了AWS_ACCESS_KEY_ID
和AWS_SECRET_ACCESS_KEY
环境变量,那么AWS_ACCESS_KEY_ID
和AWS_SECRET_ACCESS_KEY
提供的凭据将覆盖@提供的配置文件中的凭据987654334@.
【讨论】:
【参考方案8】:确保您处于正确的虚拟环境中。我更新了 PyCharm,由于某种原因不得不再次将我的项目指向我的 VE。打开终端,尝试 zappa 更新时我不在我的 VE 中(并收到此错误)。重启PyCharm,一切恢复正常。
【讨论】:
【参考方案9】:对我来说,这是因为我的 .aws/config
文件看起来像这样:
[profile myname]
aws_access_key_id = ....
aws_secret_access_key = ....
region=us-west-1
我认为原因是我基于我的 .aws/credentials
文件,这需要 [profile myname]
用于 Zappa,也许还有其他一些 aws/elastic beanstalk 工具。
当我将 config
更改为此时,效果很好:
[myname]
aws_access_key_id = ....
aws_secret_access_key = ....
region=us-west-1
【讨论】:
配置文件需要 [profile XXX] 但凭证文件不需要配置文件前缀。【参考方案10】:我认为 http://docs.aws.amazon.com/lambda/latest/dg/setup-awscli.html 中的 AWS 文档中缺少某些内容,它没有提到您应该编辑文件 ~/.aws/config
以添加您的用户名配置文件。有两种方法可以做到这一点:
编辑~/.aws/config
或
aws configure --profile "your username"
【讨论】:
上述其他答案很有用,但我认为您强调了一些重要的事情:如果您在 aws configure 命令行实用程序中查看 aws configure --profile 协议,它将自动更新 .aws/配置文件,更简单。起初我尝试在 VIM 中对其进行编辑,但无法正确编辑。 另外:我认为您必须使 lambda 和 IAM 默认区域相同才能使其正常工作。下拉框中的区域名称比较模糊,但是区域名称到区域的映射在这里:docs.aws.amazon.com/general/latest/gr/rande.html 在没有指定 output=json 或文本的情况下,我的构建也失败了。 您能解释一下如何使用aws configure
创建一个新的个人资料吗?看来您需要手动引导配置文件。谢谢。
我已经通过编辑 ~/.aws/config 和 ~/.aws/credentials 解决了我的问题【参考方案11】:
如下使用
[profilename]
region=us-east-1
output=text
示例 cmd
aws --profile myname CMD opts
【讨论】:
我认为方括号中应该没有“profile”? @MarkusKöhler:正确,有同样的问题。他们在某些地方的文档另有说明:docs.aws.amazon.com/lambda/latest/dg/setup-awscli.html(可能已过时)【参考方案12】:遇到类似问题,发现下面的链接比此处提供的答案更有帮助。我猜这是由于提供了答案后 AWS CLI 的更新。
https://serverfault.com/questions/792937/the-config-profile-adminuser-could-not-be-found
本质上,它有助于创建两个不同的文件(即一个用于一般配置相关信息,第二个用于凭据相关信息)。
【讨论】:
【参考方案13】:您是否真的设置了您的特定用户? AWS 中的演练设置指南介绍了如何设置默认用户,以及如何设置其他用户。如果您没有完成完整的设置,您将只有一个默认块,并且您的 myName 不会被创建..
【讨论】:
【参考方案14】:您能否检查~/.aws/config
下的config
文件- 您可能有一个名为[myname] 的无效部分,类似这样(这是一个示例)
[default]
region=us-west-2
output=json
[myname]
region=us-east-1
output=text
只需删除 [myname] 部分(包括此配置文件的所有内容),您就可以再次运行 aws
cli
【讨论】:
以上是关于AWS:找不到配置文件 (MyName)的主要内容,如果未能解决你的问题,请参考以下文章
AWS CloudFormation 模板“找不到启动配置名称”