如何在没有提示的情况下自动在Amazon AWS EC2上运行aws configure而不进行交互?

时间:2018-02-08 22:48:28

标签: amazon-web-services amazon-s3 amazon-ec2 aws-cli

我正在尝试设置Amazon AWS EC2实例以与s3通信。基本命令是

aws configure

然后按照提示输入

AWS Access Key ID [None]: my-20-digit-id
AWS Secret Access Key [None]: my-40-digit-secret-key
Default region name [None]: us-east-1
Default output format [None]: text

然而,我真正想要的是拥有命令

aws configure

自动没有交互,即没有提示并等待输入

我知道

有文件
~.aws/credentials
~.aws/config

我放了那些4键=值对。并且"凭证"文件看起来像

[default]
aws_secret_access_key = my-40-digit-secret-key
aws_access_key_id = my-20-digit-id

而" config"文件看起来像

[default]
region = us-east-1
output = text

但是,使用〜/ .aws /中的那些文件,我进入〜/ .aws /,并在命令行中输入并输入命令

aws configure

我仍然有提示问我

AWS Access Key ID [None]:
AWS Secret Access Key [None]:
Default region name [None]:
Default output format [None]:

如果我没有在提示符下输入有效值,我就无法连接到s3,例如通过命令

aws s3 ls s3://mybucket

我转向amazon aws文档页面的帮助。在此页面,它提到了此选项

"命令行选项 - 区域,输出格式和配置文件可以指定为命令选项以覆盖默认设置。"

作为aws configure的第一个选项

https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html

但是,它没有提到如何使用命令行选项。我试过这样的事情

aws configure --region us-east-1

但我仍然有

AWS Access Key ID [None]:
AWS Secret Access Key [None]:
Default region name [None]:
Default output format [None]:

就像我没有选择" - 区域us-east-1"

如果我尝试

aws configure --aws_access_key_id my-20-digit-id --aws_secret_access_key my-40-digit-secret-key --region us-east-1

我明白了

usage: aws [options] <command> <subcommand> [parameters]
aws: error: argument subcommand: Invalid choice, valid choices are:

我如何运行命令

aws configure

自动,没有提示,没有互动。

请帮忙! TIA

编辑并响应helloV,因为主帖中的格式比评论更清晰。 我尝试了上面提到的命令helloV,但是我收到了错误

aws configure set aws_access_key_id my-20-digit-id
usage: aws [options] <command> <subcommand> [parameters]
aws: error: argument subcommand: Invalid choice, valid choices are:

谢谢。 继续&#34; aws configure set&#34; 在我已经设置了与s3的连接的另一个EC2实例上,我输入

aws configure set region us-east-1

运行并返回命令提示符&#34;&gt;&#34;

aws configure set aws_access_key_id my-20-digit-id

运行并返回命令提示符&#34;&gt;&#34;

aws configure set aws_secret_access_key my-40-digit-secret-key

运行并返回命令提示符&#34;&gt;&#34;

aws configure

运行,但附带提示并等待交互

AWS Access Key ID [****************ABCD]:
AWS Secret Access Key [****************1234]:
Default region name [us-east-1]:
Default output format [text]:

helloV: 这是我的屏幕看起来像

ubuntu@ip-11111:~/.aws$ more config
[default]
region = us-east-1
output = text
ubuntu@ip-11111:~/.aws$ more credentials
[default]
aws_secret_access_key = my-40-digit-secret-key
aws_access_key_id = my-20-digit-id
ubuntu@ip-11111:~/.aws$ aws s3 ls s3://

我得到了这个

Unable to locate credentials. You can configure credentials by running "aws configure".

在此之后,我运行

aws configure list
  Name                    Value             Type    Location
  ----                    -----             ----    --------
profile                <not set>             None    None
access_key                <not set>             None    None
secret_key                <not set>             None    None
region                us-east-1      config_file    ~/.aws/config

看起来它没有检查〜/ .aws / credentials文件,但〜/ .aws / config文件在列表中。

3 个答案:

答案 0 :(得分:5)

我终于明白了。使用

等导出
export AWS_ACCESS_KEY_ID=my-20-digit-id
export AWS_SECRET_ACCESS_KEY=my-40-digit-secret-key
export AWS_DEFAULT_REGION=us-east-1

然后运行

aws s3 ls s3://

会奏效。不要像其他人提到的那样运行“aws configure”。

谢谢大家。

答案 1 :(得分:3)

这些命令对我有用。如果这对您不起作用。首次尝试使用互动模式aws configure

aws --profile default configure set aws_access_key_id "my-20-digit-id"

aws --profile default configure set aws_secret_access_key "my-40-digit-secret-key"

答案 2 :(得分:1)

您很好地描述了该文件。为什么不创建一个文件并将其放在正确的位置?我刚试过......它与运行aws configure

完全一样

更新:您提到要从EC2实例访问S3。在这种情况下,您根本不应该使用凭据。您应该使用角色而不是