AWS-SDK 从实例配置文件元数据服务器检索凭证时出错

AWS-SDK Error retrieving credentials from the instance profile metadata server

最近我的网络服务器由于以下原因停止响应:

Error retrieving credentials from the instance profile metadata server

搜索此错误后,我发现了使用 CredentialProvider 在本地缓存凭据的建议,这样服务器就不必为每个请求访问元数据服务器。但其中大部分都在 ENV 变量或文件

中的凭据上下文中

我想问一下这是否也适用于 IAM 角色,如果适用,这段代码是否有意义?

        $s3 = S3Client::factory(array(
                         'region' => S3_REGION,
                         'version' => '2006-03-01',
                         'credentials' => CredentialProvider::memoize(CredentialProvider::defaultProvider())
         ));
        try {
            $response = $s3->putObject($option);
        } catch ( Exception $e ) {
            error_log(' couldn\'t set S3 cache for bucket: ' . $option['Bucket'] . ' ' . $e->getMessage());
            return false;
        }

所以我的问题是,如果是 IAM 角色,我应该使用 CredentialProvider 吗?

是的,您的代码很有意义并且会有所改进。

亚马逊将限制发往 169.254.169.254 的请求。这很可能是您的错误消息的来源。我不记得限制是多少,但建议缓存实例凭证。 memoize() 函数会为您完成。

[编辑]

亚马逊对节流的评论。没有提到具体数字。

我们在每个实例的基础上限制了对实例元数据服务的查询,并且我们限制了从实例到实例元数据服务的同时连接数。

Instance Metadata