如何检查 AWS ECR 身份验证令牌是否未过期?
How to check if AWS ECR authentication token is not expired?
我正在使用 AWS ECR
存储 docker 图像。在我的管道工作流程中,要将图像推送到 ECR,我需要获取身份验证令牌以向 AWS ECR 进行身份验证 docker。我通过 运行 aws ecr get-login-password
命令来做到这一点。这一切都很好。
现在,当我不得不重复这个时,理想情况下我不想立即获得新令牌,因为前一个令牌的有效期为 12 小时。如何检查现有令牌是否仍然有效且未过期?找不到任何 aws cli
命令来执行此操作?
为了防止多个令牌从同一台机器登录,我们实现了 crone 作业以定期刷新令牌。
这就是我们为部署解决该问题的方式。
先决条件:
- AWS 凭据已在计算机上配置
- 机器上安装了 AWS cli
对于Linux/Unix机器
- 为令牌刷新创建 shell 脚本 refreshToken.sh。
#!/bin/bash
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin <YOUR_AWS_ACCOUNT_ID>.dkr.ecr.us-east-1.amazonaws.com
将文件放在 /opt/ecr-cred-refresh
位置
执行以下命令创建一个cron作业来定期刷新令牌。
crontab -e
- 在编辑器中放入以下文本以每 12 小时刷新一次令牌
0 */12 * * * /etc/ecr-cred-refresh/refreshToken.sh
对于Windows机器
- 为令牌刷新创建一个 bat 文件 refreshToken.bat。
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin <YOUR_AWS_ACCOUNT_ID>.dkr.ecr.us-east-1.amazonaws.com
创建计划任务。转到控制 Panel\All 控制面板 Items\Administrative 工具
单击任务计划程序。
- 单击“操作”选项卡并select创建任务。
- 提供姓名等基本信息
- 单击触发器选项卡。点击新建。
- 提供触发器详细信息。
- 现在单击操作选项卡。并创建一个指向 refreshToken.bat.
的新操作
- 保存
@Amit 发布的每 12 小时自动刷新令牌的解决方案是解决问题的一种方法,但我们已经采用其他人建议的方法,即使用逻辑来“登录错误” .
一组简单的命令可以为我们完成此操作:
docker push <aws_account_id>.dkr.ecr.<region>.amazonaws.com/<repository_name>:<version>
RESULT=$?
if [[ $RESULT == 0 ]]
then
echo "Docker image pushed successfully using existing ECR authentication token"
exit 0
else
echo "Existing ECR authentication token not valid, fetching a new token"
aws ecr get-login-password --region <region> | docker login --username AWS --password-stdin <aws_account_id>.dkr.ecr.<region>.amazonaws.com
docker push <aws_account_id>.dkr.ecr.<region>.amazonaws.com/<repository_name>:<version>
fi
简单且按需。只要不需要,就不需要获取令牌。这也使我们能够不在工作流程中的所有构建代理上维护 cron 表达式。
我正在使用 AWS ECR
存储 docker 图像。在我的管道工作流程中,要将图像推送到 ECR,我需要获取身份验证令牌以向 AWS ECR 进行身份验证 docker。我通过 运行 aws ecr get-login-password
命令来做到这一点。这一切都很好。
现在,当我不得不重复这个时,理想情况下我不想立即获得新令牌,因为前一个令牌的有效期为 12 小时。如何检查现有令牌是否仍然有效且未过期?找不到任何 aws cli
命令来执行此操作?
为了防止多个令牌从同一台机器登录,我们实现了 crone 作业以定期刷新令牌。
这就是我们为部署解决该问题的方式。
先决条件:
- AWS 凭据已在计算机上配置
- 机器上安装了 AWS cli
对于Linux/Unix机器
- 为令牌刷新创建 shell 脚本 refreshToken.sh。
#!/bin/bash
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin <YOUR_AWS_ACCOUNT_ID>.dkr.ecr.us-east-1.amazonaws.com
将文件放在 /opt/ecr-cred-refresh
位置执行以下命令创建一个cron作业来定期刷新令牌。
crontab -e
- 在编辑器中放入以下文本以每 12 小时刷新一次令牌
0 */12 * * * /etc/ecr-cred-refresh/refreshToken.sh
对于Windows机器
- 为令牌刷新创建一个 bat 文件 refreshToken.bat。
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin <YOUR_AWS_ACCOUNT_ID>.dkr.ecr.us-east-1.amazonaws.com
创建计划任务。转到控制 Panel\All 控制面板 Items\Administrative 工具
单击任务计划程序。
- 单击“操作”选项卡并select创建任务。
- 提供姓名等基本信息
- 单击触发器选项卡。点击新建。
- 提供触发器详细信息。
- 现在单击操作选项卡。并创建一个指向 refreshToken.bat. 的新操作
- 保存
@Amit 发布的每 12 小时自动刷新令牌的解决方案是解决问题的一种方法,但我们已经采用其他人建议的方法,即使用逻辑来“登录错误” .
一组简单的命令可以为我们完成此操作:
docker push <aws_account_id>.dkr.ecr.<region>.amazonaws.com/<repository_name>:<version>
RESULT=$?
if [[ $RESULT == 0 ]]
then
echo "Docker image pushed successfully using existing ECR authentication token"
exit 0
else
echo "Existing ECR authentication token not valid, fetching a new token"
aws ecr get-login-password --region <region> | docker login --username AWS --password-stdin <aws_account_id>.dkr.ecr.<region>.amazonaws.com
docker push <aws_account_id>.dkr.ecr.<region>.amazonaws.com/<repository_name>:<version>
fi
简单且按需。只要不需要,就不需要获取令牌。这也使我们能够不在工作流程中的所有构建代理上维护 cron 表达式。