带有 AWS S3 SDK 的 AWS Cloud Map

AWS Cloud Map with AWS S3 SDK

AWS Cloud Map 表示它将与 S3 存储桶一起使用。我很难理解的是如何设置 AWS S3 SDK 以在向 S3 存储桶发出请求时使用云地图命名空间和服务。某处是否有完整示例,涵盖设置和 S3 存储桶、将其添加到云地图、使用 AWS S3 SDK 访问使用云地图的 S3 存储桶。

为什么我需要这个: 我目前正在尝试使用多个 aws 帐户设置开发、阶段和生产环境,并希望代码在应用程序中保持不变,但使用云地图来映射资源。我了解如何使它与数据库和其他 url 一起工作。当我的代码使用 AWS SDK 访问 AWS 资源时,我遇到了困难。

您必须使用 AWSSDK.ServiceDiscovery NuGet 包从您的 Cloud Map 命名空间解析服务。解析服务后,您可以将该值用于 S3 服务客户端。这是发现作为 S3 存储桶的 mystorage 服务然后将值与 S3 一起使用的简单示例。

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
    
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
    
using Amazon.ServiceDiscovery;
using Amazon.ServiceDiscovery.Model;
    
namespace ServiceDiscoveryTest
{
    class Program
    {
        static async Task Main(string[] args)
        {
           using(var discoveryClient = new AmazonServiceDiscoveryClient(RegionEndpoint.USEast1))
           using(var s3Client = new AmazonS3Client(RegionEndpoint.USEast1))
           {
                var discoveryResponse = await discoveryClient.DiscoverInstancesAsync(new DiscoverInstancesRequest
                {
                    NamespaceName = "dev",
                    ServiceName = "mystorage",
                    QueryParameters = new Dictionary<string, string> 
                    { 
                        { "Version", "1.0" } 
                    }
                });
    
                var listResponse = await s3Client.ListObjectsAsync(new ListObjectsRequest
                {
                    BucketName = discoveryResponse.Instances[0].InstanceId
                });
    
                foreach(var s3Object in listResponse.S3Objects)
                {
                    Console.WriteLine(s3Object.Key);
                }
            }
        }
    }
}