标签: aws-sdk-net

如何在NET Core上的AWS SDK上设置凭据?

我是AWS SDK的新手,我正在尝试遵循AWS 文档,但几乎没有提供我需要设置的内容.

官方文档告诉我将其添加到appsettings.json:

{
  "AWS": {
    "Profile": "local-test-profile",
    "Region": "us-west-2"
  }
}
Run Code Online (Sandbox Code Playgroud)

然后创建客户端:

var options = Configuration.GetAWSOptions();
IAmazonS3 client = options.CreateServiceClient<IAmazonS3>();
Run Code Online (Sandbox Code Playgroud)

这会导致抛出异常,说它无法找到凭据.我在哪里放置Api ID和密钥?这个档案是什么?

请记住,我对如何设置它没有偏好.我只是想遵循.NET Core的官方文档,他们唯一的例子不起作用.文档似乎暗示我应该事先了解他们的许多术语和设置,或者我正在迁移现有应用程序并且已经完成了所有设置.

有人可以指点我这个例子中缺少什么只是为了让API正确连接到AWS?

c# aws-sdk aws-sdk-net

25
推荐指数
4
解决办法
1万
查看次数

未配置RegionEndpoint或ServiceURL

我正在编写代码以将文件上传到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);
Run Code Online (Sandbox Code Playgroud)

例外:

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()
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

.net amazon-s3 amazon-web-services aws-sdk aws-sdk-net

21
推荐指数
5
解决办法
2万
查看次数

AWS S3 ListMultipartUploads:访问被拒绝

我已经关注此博客,以便使用Web Identity Federation设置我的AWS IAM和S3帐户.我能够验证和接收会话凭证和令牌都很好.我也可以下载和上传对象.但是,我得到了:

拒绝访问

在以下ListMultipartUploads请求中:

var request = new ListMultipartUploadsRequest()
{
    BucketName = bucketName,
    Prefix = $"{UserId}/"
};

var response = await s3Client.ListMultipartUploadsAsync(request);
Run Code Online (Sandbox Code Playgroud)

附加到我的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}/"
                }
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我拥有"s3:ListBucketMultipartUploads"权限,因此用户应该能够在其存储桶上执行ListMultiPartUploads.我究竟做错了什么?

c# amazon-s3 amazon-web-services aws-sdk aws-sdk-net

11
推荐指数
1
解决办法
546
查看次数

如何在 C# 中使用 AWS Lambda 发送响应卡

嗨,我正在 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 …
Run Code Online (Sandbox Code Playgroud)

c# chatbot aws-lambda aws-sdk-net aws-lex

11
推荐指数
1
解决办法
328
查看次数

The correct way to query DynamoDb table with .net SDK

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.

这样做的,我发现正在使用的任一方式FilterKeyExpression + 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(); …
Run Code Online (Sandbox Code Playgroud)

.net c# aws-sdk-net dynamodb-queries

10
推荐指数
1
解决办法
2035
查看次数

使用 IAmazonDynamoDB 或 IDynamoDBContext(两者?)

我从 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" …
Run Code Online (Sandbox Code Playgroud)

c# amazon-web-services aws-cloudformation amazon-dynamodb aws-sdk-net

6
推荐指数
1
解决办法
2683
查看次数

如何在运行的容器内获取 AWS Fargate 任务实例元数据?

当任务在 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

6
推荐指数
1
解决办法
7411
查看次数

AWS Cognito 电子邮件忘记密码代码几乎立即过期

我正在开发一个使用 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;
}
Run Code Online (Sandbox Code Playgroud)

所以我不确定我做错了什么。我是否缺少 AWS 管理员中的某个设置?

xamarin xamarin.forms aws-sdk-net

6
推荐指数
0
解决办法
2274
查看次数

如何在 aws-sdk-net DynamoDb 中模拟 BatchWrite 对象

I\xe2\x80\x99m 尝试在 C# 中编写单元测试,我需要CreateBatchWrite<T>使用 Moq 模拟该方法的响应,但我可以\xe2\x80\x99t 实例化该BatchWrite<T>对象的对象。\nI\xe2\x80\ x99m 这样做:

\n\n
this.dynamoDbMock\n    .Setup(m => m.CreateBatchWrite<SomeType>(It.IsAny<DynamoDBOperationConfig>()))\n    .Returns(Mock.Of<BatchWrite<SomeType>>());\n
Run Code Online (Sandbox Code Playgroud)\n\n

知道如何模拟这个对象。\n谢谢!

\n

c# unit-testing moq aws-sdk-net

6
推荐指数
0
解决办法
1299
查看次数

具有代入角色凭证的 AWS 开发工具包 .NET 依赖注入

版本

  • .net核心sdk v3.1.301
  • AWSSDK.Extensions.NETCore.Setup v3.3.101
  • AWSSDK.IdentityManagement v3.3.106.19
  • AWSSDK.SecurityToken v3.3.105.30

定义

由于这个问题讨论了不同类型的AWS凭证,我认为定义我正在使用的术语会很有帮助

应用程序凭证- 启动时由 .NET Core AWS SDK 加载的 AWS 凭证
承担角色凭证- 在运行时从 STS 获取的临时 AWS 凭证

问题

我正在编写一些使用 AWS 开发工具包与 AWS 交互的代码。使用 AWS SDK 时,我倾向于使用依赖注入容器中内置的 ASP.NET Core 来注入服务客户端:

services.AddAWSService<IAmazonIdentityManagementService>();
services.AddAWSService<IAmazonSecurityTokenService>();
Run Code Online (Sandbox Code Playgroud)

当您想要使用应用程序凭据时,这很有效。AWS 客户端的注入和实例按预期工作

public class IamService : IIamService
{
    private readonly IAmazonIdentityManagementService _iamClient;

    public IamService(IAmazonIdentityManagementService iamClient)
    {
        _iamClient = iamClient;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我的应用程序需要在多个帐户中承担多个角色

我能想到的唯一方法是调用 STS 来获取假设角色凭据

AssumeRoleRequest request = new AssumeRoleRequest()
{
    RoleSessionName = "MySession", …
Run Code Online (Sandbox Code Playgroud)

c# amazon-web-services aws-sdk-net

6
推荐指数
0
解决办法
1962
查看次数