[英]Using CloudWatch Event : How to Pass JSON Object to CodeBuild as an Environment Variable
[英]Cloudwatch agent not using environment variable credentials on Windows
我正在尝试使用脚本配置 AMI,该脚本通过使用 static IAM 凭据在 AWS 和本地 Windows 机器上安装统一的 Cloudwatch 代理。 作为脚本的一部分,我使用静态设置凭据(作为测试)
$Env:AWS_ACCESS_KEY_ID="myaccesskey"
$Env:AWS_SECRET_ACCESS_KEY="mysecretkey"
$Env:AWS_DEFAULT_REGION="us-east-1"
拥有 AMI 后,我会创建一台机器并连接到它,然后通过运行aws configure list
验证凭据是否存在
Name Value Type Location
---- ----- ---- --------
profile <not set> None None
access_key ****************C6IF env
secret_key ****************SCnC env
region us-east-1 env ['AWS_REGION', 'AWS_DEFAULT_REGION']
但是当我启动代理时,我在日志中收到以下错误。
2022-12-26T17:51:49Z I,第一次为日志组test-cloudwatch-agent设置保留,更新map避免设置两次
2022-12-26T17:51:49Z E:无法从 session 获取凭证:NoCredentialProviders:链中没有有效的提供者
原因:EnvAccessKeyNotFound:无法在环境中找到凭据。
SharedCredsLoad:无法加载配置文件,。
EC2RoleRequestError:找不到 EC2 实例角色
原因:EC2MetadataError:无法发出 EC2Metadata 请求
我正在使用管理员用户安装代理,然后在 RDP 连接到机器时使用。 有什么我想念的吗? 我已经尝试将凭据添加到.aws/credentials
文件并修改common-config.toml
文件以使用配置文件。 这样就可以了,但就我而言,我只想使用环境变量。
编辑:我测试了在 userdata 脚本中添加凭据并稍微修改了它们的创建方式,现在它似乎可以工作了。
$env:aws_access_key_id = "myaccesskeyid"
$env:aws_secret_access_key = "mysecretaccesskey"
[System.Environment]::SetEnvironmentVariable('AWS_ACCESS_KEY_ID',$env:aws_access_key_id,[System.EnvironmentVariableTarget]::Machine)
[System.Environment]::SetEnvironmentVariable('AWS_SECRET_ACCESS_KEY',$env:aws_secret_access_key,[System.EnvironmentVariableTarget]::Machine)
[System.Environment]::SetEnvironmentVariable('AWS_DEFAULT_REGION','us-east-1',[System.EnvironmentVariableTarget]::Machine)
现在的问题是,我正在尝试使用文档中的命令在用户数据脚本的末尾启动代理,但它什么也没做(我在代理日志中看到命令,但没有错误)。 如果我通过 RDP 进入机器并在 Powershell 中启动相同的命令,它工作正常。 命令是:
& "C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.ps1" -a fetch-config -m onPrem -s -c file:"C:\ProgramData\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent.json"
我终于能够让它工作,但我不确定为什么它以前没有。 我在用
$env:aws_access_key_id = "accesskeyid"
$env:aws_secret_access_key = "secretkeyid"
[System.Environment]::SetEnvironmentVariable('AWS_ACCESS_KEY_ID',$env:aws_access_key_id,[System.EnvironmentVariableTarget]::Machine)
[System.Environment]::SetEnvironmentVariable('AWS_SECRET_ACCESS_KEY',$env:aws_secret_access_key,[System.EnvironmentVariableTarget]::Machine)
[System.Environment]::SetEnvironmentVariable('AWS_DEFAULT_REGION','us-east-1',[System.EnvironmentVariableTarget]::Machine)
设置变量,但随后代理无法初始化。 我不得不补充
$env:aws_default_region = "us-east-1"
所以它能够运行。 我之前找不到问题,因为在 Windows 服务器 2022 上我没有从执行中获取日志。 我不得不尝试使用 Windows Server 2019 在启动代理时实际看到错误。
我仍然不知道为什么我在机器 scope 中设置的环境变量在登录机器后起作用,但在将它们用作用户数据脚本的一部分时却不起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.