我试图让travis-ci运行一个自定义部署脚本,用于awscli将部署推送到我的登台服务器.
在我的.travis.yml文件中,我有这个:
before_deploy:
- 'curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"'
- 'unzip awscli-bundle.zip'
- './awscli-bundle/install -b ~/bin/aws'
- 'export PATH=~/bin:$PATH'
- 'aws configure'
Run Code Online (Sandbox Code Playgroud)
我已经设置了以下环境变量:
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_DEFAULT_REGION
Run Code Online (Sandbox Code Playgroud)
在travis-ciWeb界面中使用正确的值.
但是当aws configure运行时,它会停止并等待用户输入.如何告诉它使用我定义的环境变量?
configuration amazon-web-services continuous-deployment travis-ci aws-cli
我遵循以下说明:
https://bioconda.github.io/recipes/awscli/README.html#installation
Run Code Online (Sandbox Code Playgroud)
执行: conda install awscli
结果:
Fetching package metadata: ....
Solving package specifications: .
Error: Package missing in current osx-64 channels:
- awscli
You can search for this package on anaconda.org with
anaconda search -t conda awscli
You may need to install the anaconda-client command line client with
conda install anaconda-client
Run Code Online (Sandbox Code Playgroud) 我正在使用 aws sso 登录,但我不知道如何确定我是否已经登录或者是否需要再次登录,我发现执行此操作的唯一方法是运行我知道的命令权限并检查是否发生错误。
aws sso logout
aws sqs list-queues # error
aws sso login # brower accept
aws sqs list-queues # success
Run Code Online (Sandbox Code Playgroud)
我的目标是自动化一些脚本,并且仅在需要时要求登录。
通过阅读了/多/资源如何利用在推出EC2实例临时AWS凭据,我似乎无法得到一个非常简单的POC运行.
期望:
脚步:
IAM角色EC2使用IAM指定的上述角色启动新实例; SSH在aws configure和(成功)填充的详细信息设置凭据http://169.254.169.254/latest/meta-data/iam/security-credentials/iam-role-nameAWS CLI直接使用该文件进行访问IAM 角色:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": "arn:aws:s3:::bucket-name/file.png"
}
]
}
Run Code Online (Sandbox Code Playgroud)
当我使用它AWS CLI来访问该文件时,抛出此错误:
A client error (Forbidden) occurred when calling the HeadObject operation: Forbidden
Completed 1 part(s) with ... file(s) remaining
Run Code Online (Sandbox Code Playgroud)
我错过了哪一步?
在EC2实例中使用AWS CLI时,如何指定我要使用实例配置文件凭据?文档说:
Instance profile credentials – these credentials can be used on EC2
instances with an assigned instance role, and are delivered through
the Amazon EC2 metadata service.
Run Code Online (Sandbox Code Playgroud)
这是自动的还是我需要调用元数据服务并将返回的凭据保存到~/.aws/credentials文件中...然后拨打电话?
我正在尝试设置S3静态网站托管,但它似乎在我的任何没有Content-TypeAWS控制台中设置的元数据字段的对象上返回403 .我无法弄清楚如何使用AWS CLI工具执行此操作.
使用该--metadata选项似乎工作:
$ aws s3api put-object --bucket <bucket> --key foo.html --body foo.html --metadata Content-Type=text/html
{
"ETag": "\"fd5ff7743e5ed1e1c304eb1c34e8e39f\""
}
$ aws s3api head-object --bucket <bucket> --key foo.html
{
"AcceptRanges": "bytes",
"ContentType": "binary/octet-stream",
"LastModified": "Wed, 15 Apr 2015 06:39:48 GMT",
"ContentLength": 189,
"ETag": "\"fd5ff7743e5ed1e1c304eb1c34e8e39f\"",
"Metadata": {
"content-type": "text/html"
}
}
Run Code Online (Sandbox Code Playgroud)
但是Content-Type对象上的字段在AWS控制台的"元数据"部分中不可见,当我尝试在浏览器中访问该文件时,我得到403.
使用该--content-type选项也不起作用:
$ aws s3api put-object --bucket <bucket> --key foo.html --body foo.html --content-type text/html
{
"ETag": "\"fd5ff7743e5ed1e1c304eb1c34e8e39f\""
}
$ aws s3api head-object …Run Code Online (Sandbox Code Playgroud) 我想将一个IAM角色添加到AWS中的现有EC2实例.我尝试使用AWS CLI.但是,我找不到办法做到这一点.
我有一个S3存储桶,大约有400万个文件,总共需要500GB.我需要将文件同步到一个新的存储桶(实际上更改存储桶的名称就足够了,但由于这是不可能的,我需要创建一个新存储桶,将文件移到那里,然后删除旧存储桶).
我正在使用AWS CLI的s3 sync命令,它可以完成这项工作,但需要花费很多时间.我想减少时间,以便依赖系统停机时间最短.
我试图从我的本地机器和EC2 c4.xlarge实例运行同步,并且在时间上没有太大差异.
我注意到,当我使用--exclude和--include选项分割多个批次的作业并从单独的终端窗口并行运行时,可以稍微减少所花费的时间,即
aws s3 sync s3://source-bucket s3://destination-bucket --exclude "*" --include "1?/*"
aws s3 sync s3://source-bucket s3://destination-bucket --exclude "*" --include "2?/*"
aws s3 sync s3://source-bucket s3://destination-bucket --exclude "*" --include "3?/*"
aws s3 sync s3://source-bucket s3://destination-bucket --exclude "*" --include "4?/*"
aws s3 sync s3://source-bucket s3://destination-bucket --exclude "1?/*" --exclude "2?/*" --exclude "3?/*" --exclude "4?/*"
Run Code Online (Sandbox Code Playgroud)
还有什么我可以做的更快加速同步吗?另一种类型的EC2实例更适合这项工作吗?将作业分成多个批次是一个好主意,是否有类似"最佳" sync进程的数量可以在同一个桶上并行运行?
更新
我倾向于在关闭系统之前同步存储桶的策略,执行迁移,然后再次同步存储桶以仅复制同时更改的少量文件.但是,sync即使在没有差异的存储桶上运行相同的命令也需要花费很多时间.
首先,我安装了 AWS-CLI 并且我已经使用“AWS configure”来设置我的密钥,我还使用“Docker login”命令登录并且当我输入 Get-ECRLoginCommand 时我成功了。它有效并为我返回结果。
但是当我尝试使用命令时:
(Get-ECRLoginCommand).Password | docker login --username AWS --password-stdin 837859123533.dkr.ecr.ap-east-1.amazonaws.com/spring-boot
Run Code Online (Sandbox Code Playgroud)
我收到一个错误,如下所示:
保存凭据时出错:存储凭据时出错 - 错误:退出状态 1,输出:
error storing credentials - err: exit status 1, out:存根收到错误数据。``
要在 CLI 中担任 AWS 角色,我执行以下命令:
aws sts assume-role --role-arn arn:aws:iam::123456789123:role/myAwesomeRole --role-session-name test --region eu-central-1
Run Code Online (Sandbox Code Playgroud)
这给了我一个遵循架构的输出:
{
"Credentials": {
"AccessKeyId": "someAccessKeyId",
"SecretAccessKey": "someSecretAccessKey",
"SessionToken": "someSessionToken",
"Expiration": "2020-08-04T06:52:13+00:00"
},
"AssumedRoleUser": {
"AssumedRoleId": "idOfTheAssummedRole",
"Arn": "theARNOfTheRoleIWantToAssume"
}
}
Run Code Online (Sandbox Code Playgroud)
然后我手动复制和粘贴 , 的值AccessKeyId,SecretAccessKey并SessionToken在像这样的一堆导出中:
export AWS_ACCESS_KEY_ID="someAccessKeyId"
export AWS_SECRET_ACCESS_KEY="someSecretAccessKey"
export AWS_SESSION_TOKEN="someSessionToken"
Run Code Online (Sandbox Code Playgroud)
最终承担起这个角色。
我怎么能一次性做到这一点?我的意思是,无需手动干预将aws sts ...命令的输出复制和粘贴到exports.
aws-cli ×10
amazon-ec2 ×4
amazon-s3 ×3
amazon-ecr ×1
amazon-iam ×1
anaconda ×1
aws-sts ×1
docker ×1
powershell ×1
python ×1
travis-ci ×1