连接本地DynamoDB时遭遇“Unable to get IAM security credentials from EC2 Instance Metadata Service”错误求助
连接本地DynamoDB时遭遇“Unable to get IAM security credentials from EC2 Instance Metadata Service”错误求助
嘿,我来帮你搞定这个问题!你遇到的这个错误,核心原因是本地DynamoDB根本不需要真实的IAM凭证,但你的代码默认还在尝试从EC2元数据服务获取凭证——这在本地环境里肯定行不通呀。下面给你几个简单的解决办法,选顺手的试就行:
方法一:直接在代码里填假凭证
本地DynamoDB不会校验凭证的真实性,你随便填两个非空字符串就能绕过校验。修改你的代码如下:AmazonDynamoDBConfig clientConfig = new AmazonDynamoDBConfig(); clientConfig.ServiceURL = "http://localhost:8000"; // 添加这两行,值随便填就行 var dummyCredentials = new BasicAWSCredentials("myLocalKey", "myLocalSecret"); var client = new AmazonDynamoDBClient(dummyCredentials, clientConfig); var table = Table.LoadTable(client, "Table1");方法二:通过环境变量配置
不用改代码,直接在本地设置两个环境变量:AWS_ACCESS_KEY_ID:比如填localTestKeyAWS_SECRET_ACCESS_KEY:比如填localTestSecret
设置好后,AWS SDK会自动读取这些变量,就不会再去请求EC2元数据服务了。
方法三:用本地AWS配置文件
如果你有本地的AWS配置文件(Windows下在C:\Users\<你的用户名>\.aws\credentials,Mac/Linux在~/.aws/credentials),可以添加一个本地配置项:[local-dynamodb] aws_access_key_id = dummyKey aws_secret_access_key = dummySecret然后代码里指定使用这个配置文件的profile:
AmazonDynamoDBConfig clientConfig = new AmazonDynamoDBConfig(); clientConfig.ServiceURL = "http://localhost:8000"; var client = new AmazonDynamoDBClient(new StoredProfileAWSCredentials("local-dynamodb"), clientConfig); var table = Table.LoadTable(client, "Table1");
其实本地DynamoDB是完全模拟的测试环境,不需要关联真实的AWS账户,上面这些方法都是让SDK跳过真实凭证的校验流程,直接连接你的本地实例。试完应该就能解决这个错误啦~
备注:内容来源于stack exchange,提问作者user30218721
相关产品推荐
相关产品推荐

