此问题表明AWS CloudWatch代理程序无法找到有效的AWS凭证。 这通常是因为代理程序所在的EC2实例不具有必要的IAM角色或配置文件信息。 若要解决此问题,可以在EC2实例上配置角色或IAM用户,并将必要的IAM策略与该用户或角色关联。 同时,确保AWS CLI正确配置并具有适当的凭据。
以下是一个示例Python代码段,通过在EC2实例中通过元数据调用IAM角色来解决此问题:
from boto3.session import Session
session = Session()
credentials = session.get_credentials()
ec2_region = session.region_name
if credentials is None:
# if running within aws ec2 instance
from botocore.exceptions import InstanceMetadataError
try:
credentials = Session().get_credentials()
except InstanceMetadataError:
pass
cw_agent = boto3.client('cloudwatch', region_name=ec2_region, aws_access_key_id=credentials.access_key,
aws_secret_access_key=credentials.secret_key, aws_session_token=credentials.token)
该代码段使用boto3
库,使用元数据检索AWS凭据并创建AWS CloudWatch客户端。注意,在尝试检索元数据时,Python代码会在本地尝试获取凭据,而非仅依赖于本地的AWS CLI配置。
如果元数据不可用,则代码将退出,并不会尝试创建客户端。