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:

要确定您的会话中可能有哪些特定于 AWS 的变量:env | grep AWS_ 如果您没有看到此处列出的AWS_DEFAULT_PROFILEAWS_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_IDAWS_SECRET_ACCESS_KEY 环境变量,那么AWS_ACCESS_KEY_IDAWS_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 - 找不到 Cloudfront 堆栈

AWS CloudFormation 模板“找不到启动配置名称”

AWS EC2 启动配置用户数据 - 找不到命令

使用 AWS 设备场进行 XC UI 测试时出现错误“跳过设置测试:找不到足够的套件来执行”?

Spring的配置文件找不到

LINUX下找不到网卡配置文件