[英]AWS : The config profile (MyName) could not be found
每次我想用 AWS 配置某些東西時,我都會收到以下錯誤:
"The config profile (myname) could not be found"
比如:aws 配置
我正在使用 Python 3.4,我想使用 AWS CLI Keyring 來加密我的憑證。
我認為http://docs.aws.amazon.com/lambda/latest/dg/setup-awscli.html 中的 AWS 文檔中缺少一些內容,它沒有提到您應該編輯文件~/.aws/config
以添加您的用戶名配置文件。 有兩種方法可以做到這一點:
編輯~/.aws/config
或
aws configure --profile "your username"
當我搬到一台新機器上時遇到了這個問題,我帶着我的 AWS_DEFAULT_PROFILE 環境變量,但不是我的 ~/.aws 目錄。 在我取消設置該變量或正確配置命名配置文件之前,我無法使用任何 awscli 命令。 但即使是aws configure
命令也被破壞了,讓事情變得有點棘手。 假設您有一個方便的類 Unix 外殼:
env | grep AWS_
env | grep AWS_
unset AWS_DEFAULT_PROFILE
aws --profile foo configure
exec $SHELL
aws iam get-user
你能在~/.aws/config
下檢查你的config
文件 - 你可能有一個名為 [myname] 的無效部分,像這樣(這是一個例子)
[default]
region=us-west-2
output=json
[myname]
region=us-east-1
output=text
只需刪除 [myname] 部分(包括此配置文件的所有內容),您就可以再次運行aws
cli
使用配置文件有點棘手。 文檔可以在以下位置找到: https ://docs.aws.amazon.com/cli/latest/topic/config-vars.html(但您需要注意像 AWS_PROFILE 這樣的 env 變量)
將配置文件與 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
`
環境變量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
將覆蓋位於所提供的配置文件的憑據AWS_PROFILE
。
使用如下
[profilename]
region=us-east-1
output=text
示例命令
aws --profile myname CMD opts
你真的設置了你的特定用戶嗎? AWS 中的演練設置指南解釋了如何設置默認用戶,以及如何設置其他用戶。 如果您沒有完成完整的設置,您將只有一個默認塊,而您的 myName 將不會被創建。
面臨類似的問題,發現下面的鏈接比此處提供的答案更有幫助。 我猜這是由於提供了答案后對 AWS CLI 進行了更新。
https://serverfault.com/questions/792937/the-config-profile-adminuser-could-not-be-found
從本質上講,它有助於創建兩個不同的文件(即一個用於一般配置相關信息,第二個用於憑據相關信息)。
確保您在正確的 VirtualEnvironment 中。 我更新了 PyCharm,出於某種原因不得不再次將我的項目指向我的 VE。 打開終端,嘗試 zappa 更新時我不在我的 VE 中(並出現此錯誤)。 重啟PyCharm,一切恢復正常。
就我而言,我將 Docker 方法用於 AWS CLI 工具,但我對說明的閱讀不夠深入,無法意識到我必須使我的憑證目錄對 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...
以防萬一有人試圖在無頭服務器上執行此操作(在我的情況下為 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
在 Nginx 和 Gunicorn 中部署 Flask 應用程序時,我遇到了同樣的問題。
這可能對與我面臨同樣問題的人有所幫助
我的案例:使用 AWS 憑證生成 rds AUTH 令牌
在開發模式下它工作正常並且能夠從.aws文件夾中獲取 AWS Config
當我嘗試通過Nginx-Gunicorn運行它時,它失敗了,即使我為相應的文件夾和服務授予了所有 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 中配置的相應用戶並執行aws configure
以 root 用戶身份登錄
請注意,如果未找到啟動服務的用戶的 aws 配置文件,則可能會發生此問題。
對我來說,問題是該服務正在啟動 root 用戶,因此無法找到 AWS 配置文件。 我通過從非 root 用戶啟動服務來修復它,所以可以找到 AWS 配置。
如果您使用 Windows 並通過 Windows Note 應用程序編寫配置/憑據,該應用程序會生成一個擴展名為“.txt”的文件。 因此,您可以刪除文件擴展名。 就我而言,它奏效了。
對我來說,這是因為我的.aws/config
文件看起來像這樣:
[profile myname]
aws_access_key_id = ....
aws_secret_access_key = ....
region=us-west-1
我認為原因是我基於我的.aws/credentials
文件,這需要 Zappa 的[profile myname]
以及其他一些 aws/elastic beanstalk 工具。
當我將config
更改為此時,效果很好:
[myname]
aws_access_key_id = ....
aws_secret_access_key = ....
region=us-west-1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.