我是AWS SDK的新手,我正在尝试遵循AWS 文档,但几乎没有提供我需要设置的内容.
官方文档告诉我将其添加到appsettings.json:
{
  "AWS": {
    "Profile": "local-test-profile",
    "Region": "us-west-2"
  }
}
然后创建客户端:
var options = Configuration.GetAWSOptions();
IAmazonS3 client = options.CreateServiceClient<IAmazonS3>();
这会导致抛出异常,说它无法找到凭据.我在哪里放置Api ID和密钥?这个档案是什么?
请记住,我对如何设置它没有偏好.我只是想遵循.NET Core的官方文档,他们唯一的例子不起作用.文档似乎暗示我应该事先了解他们的许多术语和设置,或者我正在迁移现有应用程序并且已经完成了所有设置.
有人可以指点我这个例子中缺少什么只是为了让API正确连接到AWS?
我正在编写代码以将文件上传到AWS S3并收到此异常:
AmazonClientException:未配置RegionEndpoint或ServiceURL
我的代码:
Console.WriteLine("ready to upload");
AWSCredentials credentials;
credentials = new BasicAWSCredentials(accessKeyID.Trim(), secretKey.Trim());
AmazonS3Client s3Client = new AmazonS3Client(accessKeyID.Trim(), secretKey.Trim(), Amazon.RegionEndpoint.USEast1);
Console.WriteLine("Successful verification");
Console.WriteLine("Check if the bucket exists");
if (!CheckBucketExists(s3Client, bucketName))
{
    s3Client.PutBucket(bucketName);
    Console.WriteLine("create bucket");
}
TransferUtility utility = new TransferUtility();
Console.WriteLine("Upload  Directory......");
//exception here
utility.UploadDirectory(@"E:\telerikFile\13ginabdfglil.com", bucketName);
例外:
Amazon.Runtime.AmazonClientException: No RegionEndpoint or ServiceURL configured
  Amazon.Runtime.ClientConfig.Validate()
  Amazon.S3.AmazonS3Config.Validate()
  Amazon.Runtime.AmazonServiceClient..ctor(AWSCredentials credentials, ClientConfig config)
  Amazon.S3.AmazonS3Client..ctor()
  Amazon.S3.Transfer.TransferUtility..ctor()
  Telerik2Amazon.Program.UploadFile()
我该怎么办?
我已经关注此博客,以便使用Web Identity Federation设置我的AWS IAM和S3帐户.我能够验证和接收会话凭证和令牌都很好.我也可以下载和上传对象.但是,我得到了:
拒绝访问
在以下ListMultipartUploads请求中:
var request = new ListMultipartUploadsRequest()
{
    BucketName = bucketName,
    Prefix = $"{UserId}/"
};
var response = await s3Client.ListMultipartUploadsAsync(request);
附加到我的IAM角色的访问策略是:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::mybucket/${myidentityprovider:userId}/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:ListBucketMultipartUploads"
            ],
            "Resource": [
                "arn:aws:s3:::mybucket"
            ],
            "Condition": {
                "StringLike": {
                    "s3:prefix": "${myidentityprovider:userId}/"
                }
            }
        }
    ]
}
如您所见,我拥有"s3:ListBucketMultipartUploads"权限,因此用户应该能够在其存储桶上执行ListMultiPartUploads.我究竟做错了什么?
嗨,我正在 amazon lex 上开发一个聊天机器人,我想使用 lambda 函数发送响应卡,但是在关闭响应格式中使用响应卡函数时,它给出了 null 异常的错误。谁能告诉它的解决方案?PS 我正在使用 Nikki 创建的 FlowerOrder 蓝图。
if (slots[greet] != null) 
        {
            var validateGreet = ValidateUserGreeting(slots[greet]);
            if (validateGreet.IsValid) 
            {
                return Close(sessionAttributes,
                              "Fulfilled",
                              new LexResponse.LexMessage
                              {
                                  ContentType = "PlainText",
                                  Content = String.Format("Hello Kindly choose one option")
                              },
                              new LexResponse.LexResponseCard
                              {
                                  Version = 1,
                                  ContentType = "application/vnd.amazonaws.card.generic",
                                  GenericAttachments =
                                  {
                                  new LexResponse.LexGenericAttachments
                                  {
                                      Buttons =
                                      {
                                         new LexResponse.LexButton
                                         {
                                             Text = "Shop Now",
                                             Value = "Shop Now"
                                         }
                                      },
                                      AttachmentLinkUrl = null,
                                      Title = "Shopping",
                                      SubTitle …I'm trying to understand how to query a table in dynamo using the DataModel. But, I found two ways that seems to work and I can't find an explanation or documentation of what's happening or if there is any difference between them.
这样做的,我发现正在使用的任一方式Filter或KeyExpression + FilterExpression。有什么区别和正确的做法?
一些例子:
选项1:
-- 带索引和键
public async Task<List<T>> Find<T>(Guid id)
{
    var query = new QueryOperationConfig
    {
        IndexName = "Table_Id_Index",
        Filter = new QueryFilter("TableId", QueryOperator.Equal, id)
    };
    return await _dynamoDbContext
        .FromQueryAsync<T>(query)
        .GetRemainingAsync(); …我从 AWS SDK 模板开始了我的 Visual Studio 项目。它在函数中使用 IDynamoDBContext,在测试中使用 IAmazonDynamoDB。当我收到带有 id(哈希)的文档时,一切都可以保存和接收文档。但是当我向我的表格添加一个范围时它停止工作。我所有的测试都是针对 AWS dynamoDb 的。但我让它以两种方式工作。第一种方法是当我下载 dynamoDb 的本地实例时。第二个是当我在我的函数中将 IDynamoDBContext 替换为 IAmazonDynamoDB 时(因此它在函数和我的测试类中使用相同的接口)。我不知道正确的解决方案是什么,但为什么首先使用 2 个接口?我应该继续研究为什么它不能与不同的接口一起工作,还是应该只使用其中之一?
        // IDynamoDBContext (default) - Didn't save my item (did save it in local DynamoDB)
        var test = new Test
        {
            UserId = "Test",
            Id = 1
        };
        await DDBContext.SaveAsync<Test>(test);
        // IAmazonDynamoDB - Did save my item
        var putItemRequest = new PutItemRequest
        {
            TableName = "TestTable",
            Item = new Dictionary<string, AttributeValue>()
            {
                { "UserId", new AttributeValue { S = "Test" …c# amazon-web-services aws-cloudformation amazon-dynamodb aws-sdk-net
当任务在 AWS Fargate 内启动时,它有一个用于 Cloudwatch 日志的任务 ID (guid),可用作唯一的“运行 ID”。我正在将 .NET 核心应用程序启动到 AWS 容器中,并希望找到一种以编程方式提取任务 ID 的方法。
我参考了Amazon ECS Container Metadata File上的 AWS 文档
但似乎没有为 Fargate 打开代理,因为 ECS_CONTAINER_METADATA_FILE 环境变量似乎不可用。
有什么方法可以从正在运行的容器内部获取任务 ID (guid)?
已解决 - 注意:
ECS 任务端点提供了所需的信息。在 Docker 容器内,您可以从 URL http://169.254.170.2/v2/metadata 中curl(或以编程方式拉取),它将为您提供进行调用的容器的任务元数据。我能够在两个单独运行的容器上对此进行测试,并取回它们的特定任务 ARN 值(每个容器的唯一 GUID。)
请注意,对于 Farpoint,您必须使用端点的 v2。
2018 年 11 月 5 日更新
我创建了一个名为 AwsContainerInspection 的 .NET 标准库,它有助于解析来自 AWS ECS 任务元数据端点的元数据并返回一个类对象。我在我的代码中使用它来获取用于日志记录和其他事情的任务 GUID。
GitHub - https://github.com/tgourley/AwsContainerInspection
Nuget - https://www.nuget.org/packages/AwsContainerInspection/
.net amazon-web-services visual-studio amazon-ecs aws-sdk-net
我正在开发一个使用 AWS Cognito 进行用户身份验证的 Xamarin 应用程序。我正在尝试实现忘记密码,并且 MFA 设置为使用电子邮件确认码。
但是,当我尝试输入并使用带有新密码的确认码时,我总是得到
Invalid code provided, please request a code again.
ExpiredCodeException
我通过测试发现,我发送的任何内容或发送时都不会更改错误消息。如果我发送 1 个字符串(这显然不正确)或实际的确认码,我会收到相同的错误。如果我在收到电子邮件后尝试立即使用确认码或等待几分钟,我会收到相同的错误。
代码很简单..
public async Task<bool> ConfirmResetPasswordCodeAsync(string username, string code, string password, BasePageModel pageModel)
{
    try {
        await client.ConfirmForgotPasswordAsync(new ConfirmForgotPasswordRequest { Username = username, ConfirmationCode = code, ClientId = ClientId, Password = password });
        return true;
    } catch(Exception ex) {
        // handle the exception
    }
    return false;
}
所以我不确定我做错了什么。我是否缺少 AWS 管理员中的某个设置?
I\xe2\x80\x99m 尝试在 C# 中编写单元测试,我需要CreateBatchWrite<T>使用 Moq 模拟该方法的响应,但我可以\xe2\x80\x99t 实例化该BatchWrite<T>对象的对象。\nI\xe2\x80\ x99m 这样做:
this.dynamoDbMock\n    .Setup(m => m.CreateBatchWrite<SomeType>(It.IsAny<DynamoDBOperationConfig>()))\n    .Returns(Mock.Of<BatchWrite<SomeType>>());\n知道如何模拟这个对象。\n谢谢!
\n版本
定义
由于这个问题讨论了不同类型的AWS凭证,我认为定义我正在使用的术语会很有帮助
应用程序凭证- 启动时由 .NET Core AWS SDK 加载的 AWS 凭证
承担角色凭证- 在运行时从 STS 获取的临时 AWS 凭证
问题
我正在编写一些使用 AWS 开发工具包与 AWS 交互的代码。使用 AWS SDK 时,我倾向于使用依赖注入容器中内置的 ASP.NET Core 来注入服务客户端:
services.AddAWSService<IAmazonIdentityManagementService>();
services.AddAWSService<IAmazonSecurityTokenService>();
当您想要使用应用程序凭据时,这很有效。AWS 客户端的注入和实例按预期工作
public class IamService : IIamService
{
    private readonly IAmazonIdentityManagementService _iamClient;
    public IamService(IAmazonIdentityManagementService iamClient)
    {
        _iamClient = iamClient;
    }
}
但是,我的应用程序需要在多个帐户中承担多个角色
我能想到的唯一方法是调用 STS 来获取假设角色凭据:
AssumeRoleRequest request = new AssumeRoleRequest()
{
    RoleSessionName = "MySession", …aws-sdk-net ×10
c# ×7
.net ×3
aws-sdk ×3
amazon-s3 ×2
amazon-ecs ×1
aws-lambda ×1
aws-lex ×1
chatbot ×1
moq ×1
unit-testing ×1
xamarin ×1