AWS Regions를 사용하면 특정 지역에 실제로 있는 AWS 서비스에 액세스할 수 있다.이는 중복성을 유지하고 사용자 및 사용자가 액세스할 수 있는 곳에서 데이터 및 응용 프로그램을 계속 실행하는 데 유용할 수 있습니다.RegionEndpoint 클래스를 사용하여 AWS 서비스 클라이언트를 만들 때 영역을 지정할 수 있다.
다음은 특정 지역에서 Amazon EC2 클라이언트를 인스턴스화하는 예제다.
AmazonEC2Client ec2Client = new AmazonEC2Client(RegionEndpoint.USEast1);
지역은 서로 격리되어 있습니다.예를 들어, EU(아일랜드)지역을 사용할 때는 미국 동부(버지니아)자원에 액세스할 수 없다.코드에 여러 AWS Regions에 대한 액세스가 필요한 경우 각 지역마다 별도의 클라이언트를 만드는 것이 좋다.
중국(베이징)지역에서 서비스를 사용하려면 중국(베이징)지역에만 해당되는 계정과 자격 증명이 있어야 한다.중국(베이징)지역에서는 다른 AWS 지역의 계정 및 자격 증명이 작동하지 않는다.마찬가지로 중국(베이징)지역의 계정 및 자격 증명은 다른 AWS 지역에서는 작동하지 않는다.중국(베이징)지역에서 사용할 수 있는 EndPoint 및 프로토콜에 대한 자세한 내용은 중국(베이징)지역을 참조하면 된다.
새 AWS 서비스는 초기에 몇 지역에서 시작한 다음 다른 지역에서 지원할 수 있다.이 경우 새 region에 액세스하기 위해 최신 SDK를 설치할 필요가 없다.새로 추가된 영역은 클라이언트별로 또는 전역으로 지정할 수 있다.
var newRegion = RegionEndpoint.GetBySystemName("us-west-new"); using (var ec2Client = new AmazonEC2Client(newRegion)) { // Make a request to EC2 using ec2Client }
서비스 클라이언트 구성 클래스의 ServiceURL 등록 정보를 사용하여 영역을 지정할 수도 있다.이 기술은 지역 EndPoint가 일반 지역 EndPoint 패턴을 따르지 않는 경우에도 작동한다.
var ec2ClientConfig = new AmazonEC2Config { // Specify the endpoint explicitly ServiceURL = "https://ec2.us-west-new.amazonaws.com" };
using (var ec2Client = new AmazonEC2Client(newRegion)) { // Make a request to EC2 using ec2Client }
전역으로 지역 선택하기(Globally)
세 가지 방법을 통해서 지역을 전역으로 설정할 수 있다.
AWSConfigs.AWSRegion 속성을 설정할 수 있다.
AWSConfigs.AWSRegion = "us-west-new"; using (var ec2Client = new AmazonEC2Client()) { // Make request to Amazon EC2 using ec2Client }
app.config 파일의 appSettings 섹션에서 AWSRegion 키를 설정할 수 있다.
AWS 루트 사용자 대신 IAM 사용자를 만들고 IAM 사용자 자격 증명을 사용해야 한다. IAM 사용자 자격 증명이 손상되면 쉽게 해지할 수 있다. 사용자를 특정 리소스 및 작업 집합으로 제한하는 정책을 각 IAM 사용자에게 적용할 수 있다.
응용 프로그램 개발 중에 자격 증명을 관리하는 기본 방법은 SDK 저장소에 각 IAM 사용자 자격 증명 집합에 대한 프로필을 저장하는 것이다. 일반 텍스트 자격 증명 파일을 사용하여 자격 증명이 포함 된 프로필을 저장할 수도 있다. 그런 다음 프로젝트 파일에 자격 증명을 저장하는 대신 프로그래밍 방식으로 특정 프로필을 참조할 수 있다. 의도하지 않게 자격 증명이 노출 될 위험을 줄이려면 SDK 저장소 또는 자격 증명 파일을 프로젝트 파일과 별도로 저장해야 한다.
Amazon EC2 컨테이너 서비스(Amazon ECS) 태스크에 대한 IAM 역할을 태스크에 사용한다.
Amazon EC2 인스턴스에서 실행중인 응용 프로그램에 IAM 역할을 사용한다.
조직 외부의 사용자가 사용할 수있는 응용 프로그램에 임시 자격 증명 또는 환경 변수를 사용한다.
다음 항목에서는 .NET용 AWS SDK 응용 프로그램의 자격 증명을 관리하는 방법에 대해 설명한다.AWS 자격 증명을 안전하게 관리하는 방법에 대한 설명은 AWS 액세스 키 관리 모범 사례를 참조하면 된다.
SDK 저장소 사용하기(Using SDK Store)
.NET 응용 프로그램용 AWS SDK 개발 중에 응용 프로그램에 사용할 각 자격 증명 집합에 대한 SDK 저장소에 프로파일을 추가해야 한다.이렇게하면 실수로 AWS 자격 증명이 노출되는 것을 방지할 수 있다.SDK 저장소는 RegisteredAccounts.json 파일의 C:\Users\<사용자 이름>\AppData\Local\AWSToolkit 폴더에 있다.SDK 저장소는 다음과 같은 이점을 제공한다.
SDK 저장소는 여러 계정의 여러 프로필을 포함할 수 있다.
SDK 저장소의 자격 증명은 암호화되고 SDK 저장소는 사용자의 홈 디렉터리에 있다.이로 인해 실수로 자격 증명이 노출될 위험이 제한된다.
응용 프로그램에서 프로파일을 이름으로 참조하고 연관된 신임은 런타임에 참조된다.원본 파일에 자격 증명이 절대 포함되지 않는다.
default라는 프로파일을 포함하면 .NET용 AWS SDK는 해당 프로파일을 사용한다.다른 프로파일 이름을 제공하지 않거나 지정된 이름을 찾을 수 없는 경우에도 마찬가지이다.
또한 SDK Store는 Windows PowerShell용 AWS Tools 및 Visual Studio용 AWS Toolkit에 대한 자격 증명을 제공한다.
참고
SDK 저장소 프로파일은 특정 호스트의 특정 사용자에게 한정된다.다른 호스트 또는 다른 사용자에게 복사 할 수 없다.이러한 이유로 프로덕션 응용 프로그램에서 SDK 저장소 프로필을 사용할 수 없다.자세한 내용은 자격 증명 및 프로필 확인[번역은 아래 내용에 포함되어 있음]을 참조하면 된다.
여러 가지 방법으로 SDK 저장소의 프로필을 관리할 수 있다.
Visual Studio용 AWS Toolkit의 GUI(그래픽 사용자 인터페이스)를 사용하여 프로파일을 관리할 수 있다.GUI를 사용하여 SDK 저장소에 자격 증명을 추가하는 방법에 대한 자세한 내용은 Visual Studio용 AWS Toolkit에서 자격 증명 지정을 참조하면 된다.
Windows PowerShell용 AWS Tools에서 Set-AWSCredentials cmdlet을 사용하여 명령 줄(command line)에서 프로필을 관리할 수 있다.자세한 내용은 AWS 자격 증명 사용을 참조하면 된다.
var options = new CredentialProfileOptions { AccessKey = "access_key", SecretKey = "secret_key" }; var profile = new Amazon.Runtime.CredentialManagement.CredentialProfile("basic_profile", options); profile.Region = RegionEndpoint.USWest1; var netSDKFile = new NetSDKCredentialsFile(); netSDKFile.RegisterProfile(profile);
RegisterProfile 메서드는 새 프로필을 등록하는 데 사용된다.일반적으로, 어플리케이션은 이 메소드를 각 프로파일에 대해서 1회만 호출한다.
var endpoint = new SAMLEndpoint("endpoint1", new Uri("https://some_saml_endpoint"), SAMLAuthenticationType.Kerberos); var endpointManager = new SAMLEndpointManager(); endpointManager.RegisterEndpoint(endpoint); options = new CredentialProfileOptions { EndpointName = "endpoint1", RoleArn = "arn:aws:iam::999999999999:role/some-role" }; profile = new CredentialProfile("federated_profile", options); netSDKFile = new NetSDKCredentialsFile(); netSDKFile.RegisterProfile(profile);
자격 증명 파일 사용하기
프로파일을 공유 신임 정보 파일에 저장할 수도 있다.이 파일은 다른 AWS SDK, AWS CLI 및 AWS Tools for Windows PowerShell에서 사용할 수 있다.실수로 자격 증명을 노출 할 위험을 줄이려면 일반적으로 사용자의 홈 폴더에 프로젝트 파일과 별도로 자격 증명 파일을 저장해야 한다.자격 증명 파일의 프로필은 일반 텍스트로 저장된다.
다음 두 가지 방법으로 공유 자격 증명 파일의 프로필을 관리할 수 있다.
텍스트 편집기를 사용할 수 있다.파일 이름이 자격 증명이며 기본 위치는 사용자의 홈 폴더 아래에 있다.예를 들어 사용자 이름이 awsuser인 경우 자격 증명 파일은 C:\users\awsuser\.aws\credentials이 된다. 다음은 신임 정보 파일에 있는 프로파일의 예시이다.
For more information, see `Best Practices for Managing AWS Access Keys <http://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html>`_.
참고
default라는 프로파일을 포함하면 지정된 프로파일을 찾을 수없는 경우 .NET용 AWS SDK는 기본적으로 해당 프로파일을 사용한다. 선택한 위치(예 : C:\aws_service_credentials\credentials)에 프로필이 들어있는 자격 증명 파일을 저장할 수 있다.그런 다음 프로젝트의 App.config 또는 Web.config 파일에서 AWSProfilesLocation 특성의 파일 경로를 명시적으로 지정한다.자세한 내용은 프로필 지정[번역 내용은 아래쪽을 참조]을 참조하면 된다.
// Create the source profile and save it to the shared credentials file
// 원본 프로필을 만들어 공유 자격 증명 파일에 저장한다. var sourceProfileOptions = new CredentialProfileOptions { AccessKey = "access_key", SecretKey = "secret_key" }; var sourceProfile = new CredentialProfile("source_profile", sourceProfileOptions); sharedFile = new SharedCredentialsFile(); sharedFile.RegisterProfile(sourceProfile);
// Create the assume role profile and save it to the shared credentials file
// 가정 역할 프로필을 만들어 공유 자격 증명 파일에 저장한다. var assumeRoleProfileOptions = new CredentialProfileOptions { SourceProfile = "source_profile", RoleArn = "arn:aws:iam::999999999999:role/some-role" }; var assumeRoleProfile = new CredentialProfile("assume_role_profile", assumeRoleProfileOptions); sharedFile.RegisterProfile(assumeRoleProfile);
TryGetAWSCredentials 또는 TryGetProfile 메서드를 사용하여 자격 증명 또는 프로필을 가져올 수 있다.ProfilesLocation 속성은 다음과 같이 CredentialsProfileChain의 동작을 결정한다.
ProfilesLocation이 null이 아니고 비어 있지 않으면 ProfilesLocation 등록 정보의 디스크 경로에서 공유 자격 증명 파일을 검색한다.
ProfilesLocation이 null이거나 비어 있고 플랫폼이 .NET 자격 증명 파일을 지원하는 경우 .NET 자격 증명 파일을 검색한다.프로필을 찾을 수 없는 경우 기본 위치에서 공유 자격 증명 파일을 검색한다.
ProfilesLocation이 null이거나 비어 있고 플랫폼이 .NET 자격 증명 파일을 지원하지 않는 경우 기본 위치의 공유 자격 증명 파일을 검색한다.
기본 위치의 SDK 자격 증명 파일 또는 공유 자격 증명 파일에서 자격 증명을 가져오기
CredentialProfileStoreChain 객체와 Amazon.Runtime.AWSCredentials 객체를 만든다.TryGetAWSCredentials 메서드를 호출한다.자격 증명을 반환할 프로필 이름과 AWSCredentials 개체를 제공한다.
var chain = new CredentialProfileStoreChain(); AWSCredentials awsCredentials; if (chain.TryGetAWSCredentials("basic_profile", out awsCredentials)) { // use awsCredentials }
var chain = new CredentialProfileStoreChain(); CredentialProfile basicProfile; if (chain.TryGetProfile("basic_profile", out basicProfile)) { // Use basicProfile }
파일 위치에서 공유 자격 증명 파일 형식의 파일에서 AWSCredentials 가져오기
CredentialProfileStoreChain 객체를 만들고 자격 증명 파일의 경로를 제공한다.AWSCredentials 객체를 만든다.TryGetAWSCredentials 메서드를 호출한다.자격 증명을 반환할 프로필 이름과 AWSCredentials 개체를 제공한다.
var chain = new CredentialProfileStoreChain("c:\\Users\\sdkuser\\customCredentialsFile.ini"); AWSCredentials awsCredentials; if (chain.TryGetAWSCredentials("basic_profile", out awsCredentials)) { // Use awsCredentials }
SharedCredentialsFile 클래스를 사용하여 AmazonS3Client를 만드는 방법
CredentialProfile basicProfile; AWSCredentials awsCredentials; var sharedFile = new SharedCredentialsFile(); if (sharedFile.TryGetProfile("basic_profile", out basicProfile) && AWSCredentialsFactory.TryGetAWSCredentials(basicProfile, sharedFile, out awsCredentials)) { using (var client = new AmazonS3Client(awsCredentials, basicProfile.Region)) { var response = client.ListBuckets(); } }
기본 프로파일을 사용하고 .NET용 AWS SDK에 자동으로 기본 자격 증명을 사용하여 클라이언트 객체를 만들려면 다음 코드를 사용하면 된다.
using (var client = new AmazonS3Client(RegionEndpoint.US-West2)) { var response = client.ListBuckets(); }
자격 증명 및 프로필 해결
.NET용 AWS SDK는 다음 순서로 자격 증명을 검색하고 현재 응용 프로그램에 대해 사용 가능한 첫 번째 set을 사용한다.
클라이언트 구성 또는 AWS 서비스 클라이언트에 명시 적으로 설정되는 항목.
사용 가능한 경우 AWSAccessKey 및 AWSSecretKey AppConfig 값에서 생성되는 BasicAWSCredentials.
AWSConfigs.AWSProfileName (명시 적 또는 AppConfig에 설정)의 값으로 지정된 이름을 가진 자격 증명 프로파일.
기본 자격 증명 프로필.
모두 비어있는 경우 AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY 및 AWS_SESSION_TOKEN 환경 변수에서 생성된 SessionAWSCredentials.
AWS_ACCESS_KEY_ID 및 AWS_SECRET_ACCESS_KEY 환경 변수에서 만들어지는 BasicAWSCredentials (둘 다 비어 있지 않은 경우)
Amazon EC2 컨테이너 서비스 (Amazon ECS) 태스크에 대한 IAM 역할.
EC2 인스턴스 메타 데이터.
SDK 저장소 프로파일은 특정 호스트의 특정 사용자에게 한정된다.다른 호스트 또는 다른 사용자에게 복사할 수 없다.이러한 이유로 다른 호스트 또는 개발자 컴퓨터에서 개발 컴퓨터에 있는 SDK 저장소 프로필을 다시 사용할 수 없다.응용 프로그램이 Amazon EC2 인스턴스에서 실행중인 경우 .NET용 AWS SDK와 함께 EC2 인스턴스에 IAM 역할 사용에 설명된대로 IAM 역할을 사용해야 한다.그렇지 않으면 웹 응용 프로그램이 서버에 액세스할 수있는 자격 증명 파일에 자격 증명을 저장한다.
프로필 해결(Profile Resolution)
두 가지 자격 증명 파일 유형을 사용하는 경우 .NET용 AWS SDK 및 Windows PowerShell용 AWS 도구를 사용하여 구성하는 방법을 이해하는 것이 중요하다.AWSConfigs.AWSProfilesLocation(명시적 또는 AppConfig에서 설정)은 .NET용 AWS SDK가 자격 증명 프로필을 찾는 방법을 제어한다.-ProfileLocation 명령 줄 인수(command line argument)는 Windows PowerShell용 AWS Tools에서 프로필을 찾는 방법을 제어한다.두 경우 모두 구성이 작동하는 방식은 다음과 같다.
프로필 위치 값
프로필 해결 동작
null (설정되지 않음) 또는 비어 있음
먼저 .NET 자격 증명 파일에서 지정된 이름의 프로필을 검색한다.프로필이 없으면 %HOME%\.aws\credentials을 검색한다.프로필이 없으면 %HOME%\.aws\config를 검색한다.
공유 자격 증명 파일 형식의 파일 경로
지정한 파일만 검색하여 지정된 이름의 프로필을 찾는다.
프로필 지정하기(Specifying a Profile)
프로필은 AWS SDK for .NET 응용 프로그램에서 자격 증명을 사용하는 기본 방법이다.프로필이 저장되는 위치를 지정할 필요가 없다.프로필은 이름으로 만 참조할 수 있다..NET용 AWS SDK는 이전 섹션에서 설명한대로 해당 자격 증명을 검색한다.
프로필을 지정하는 가장 좋은 방법은 응용 프로그램의 App.config 또는 Web.config 파일의 appSettings 섹션에서 AWSProfileName 값을 정의하는 것이다.연관된 자격 증명은 빌드 프로세스 중에 응용 프로그램에 통합된다.
이 예제에서는 프로필이 SDK 저장소 또는 기본 위치의 자격 증명 파일에 있다고 가정한다.
프로필이 다른 위치의 자격 증명 파일에 저장되어 있는 경우 <appSettings> 요소에 AWSProfilesLocation 속성 값을 추가하여 위치를 지정해야 한다.다음 예에서는 C:\aws_service_credentials\credentials을 자격 증명 파일로 지정한다.
.NET용 AWS SDK (AWSSDK.Core 버전 3.1.6.0 이상)를 사용하는 응용 프로그램은 AD FS(Active Directory Federation Service)를 통한 페더레이션 사용자 계정을 사용하여 SAML(Security Assertion Markup Language)을 사용하여 AWS 웹 서비스에 액세스할 수 있다.
페더레이션된 액세스 지원은 사용자가 Active Directory를 사용하여 인증할 수 있음을 의미한다.임시 자격 증명은 사용자에게 자동으로 부여된다.1시간 동안 유효한 이러한 임시 자격 증명은 응용 프로그램이 AWS 웹 서비스를 호출할 때 사용된다.SDK는 임시 자격 증명 관리를 처리한다.도메인에 가입된 사용자 계정의 경우 응용 프로그램에서 호출했지만 자격 증명이 만료된 경우 사용자가 자동으로 다시 인증되고 새 자격 증명이 부여된다.도메인 가입이 아닌 계정의 경우 재인증 전에 자격 증명을 입력하라는 메시지가 사용자에게 표시된다.
조직 외부 사용자가 소프트웨어 실행 파일을 사용할 수 있는 응용 프로그램 시나리오의 경우 임시 보안 자격 증명을 사용하도록 소프트웨어를 설계하는 것이 좋다.AWS 리소스에 제한적으로 액세스 할 수 있을뿐 아니라 이러한 자격 증명은 지정된 기간 후에 만료되는 이점이 있다.임시 보안 자격 증명에 대한 자세한 내용은 다음을 참조하면 된다.
두 번째 글의 제목은 모바일 응용 프로그램을 구체적으로 언급하지만 이 문서에는 조직 외부에 배포된 AWS 응용 프로그램에 대한 유용한 정보가 들어있다.
프록시 자격 증명 사용
소프트웨어가 프록시를 통해 AWS와 통신하는 경우 서비스의 AmazonS3Config 클래스에 있는 ProxyCredentials 등록 정보를 사용하여 프록시에 대한 자격 증명을 지정할 수 있다.예를 들어 Amazon S3의 경우 다음과 유사한 코드를 사용할 수 있다. {my-username} 및 {my-password}는 NetworkCredential 객체에 지정된 프록시 사용자 이름 및 비밀번호이다.
AmazonS3Config config = new AmazonS3Config(); config.ProxyCredentials = new NetworkCredential("my-username", "my-password");
이전 버전의 SDK에서는 ProxyUsername 및 ProxyPassword를 사용했지만 이러한 속성은 더 이상 사용되지 않는다.
[유니티 어필리에이트 프로그램]
아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.
.NET Core의 가장 큰 변화 중 하나는 ConfigurationManager와 .NET Framework 및 ASP.NET 응용 프로그램과 함께 사용되는 표준 app.config 및 web.config 파일이 제거된 것이다. 기존의 .NET 응용 프로그램의 경우, AWS SDK for .NET은 이 구성 시스템을 사용하여 AWS 자격 증명 및 지역을 설정하므로 코드에서 이를 수행할 필요가 없다.
.NET 코어의 구성 시스템은 모든 위치에서 모든 유형의 입력 소스를 허용한다.또한 구성 객체는 표준 .NET 응용 프로그램의 ConfigurationManager와 같은 전역적 단일 객체가 아니므로 .NET용 AWS SDK에는 이 객체의 설정을 읽을 수 있는 액세스 권한이 없다.
참고 .NET Core 구성 시스템에 대한 배경 지식은 .NET Core 문서의 구성(Configuration) 항목을 참조하면 된다.
.NET Core용 AWS SDK for .NET을 쉽게 사용할 수 있도록 AWSSDK.Extensions.NETCore.Setup NuGet 패키지를 사용할 수 있다.많은 .NET Core 라이브러리와 마찬가지로 IConfiguration 인터페이스에 확장 메서드를 추가하여 AWS 구성을 완벽하게 유지한다.
AWSSDK.Extensions.NETCore.Setup 사용하기
Visual Studio에서 ASP.NET Core MVC 응용 프로그램을 만들면 Startup.cs의 생성자는 ConfigurationBuilder를 사용하고 구성 속성을 기본 제공 IConfiguration 개체로 설정하여 다양한 입력 소스를 읽음으로써 구성을 처리한다.
public Startup(IHostingEnvironment env) { var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) .AddEnvironmentVariables(); Configuration = builder.Build(); }
Configuration 객체를 사용하여 AWS 옵션을 얻으려면 먼저 AWSSDK.Extensions.NETCore.Setup NuGet 패키지를 추가해야 한다. 그런 다음 옵션을 구성 파일에 추가한다. ConfigurationBuilder에 추가된 파일 중 하나는$"appsettings.{env.EnvironmentName}.json"이다(Notice one of the files added to the Builder is called $"appsettings.{env.EnvironmentName}.json"). 프로젝트 속성에서 디버그 탭을 보면 이 파일이 개발(Development)로 설정되어 있음을 알 수 있다. 로컬 테스트 중에는 읽기 전용인 appsettings.Development.json 파일에 구성을 넣을 수 있기 때문에 로컬 테스트에 유용하다. EnvironmentName이 Production으로 설정된 Amazon EC2 인스턴스를 배포하면 이 파일은 무시되고 .NET용 AWS SDK는 Amazon EC2 인스턴스 용으로 구성된 IAM 자격 증명 및 영역으로 다시 돌아간다.
아래의 구성은 AWS 설정을 제공하기 위해 프로젝트의 appsettings.Development.json 파일에 추가 할 수 있는 값의 예를 보여준다.
코드에서 파일에 설정된 AWS 옵션에 액세스하려면 IConfiguration에 추가된 GetAWSOptions 확장 메소드를 호출하면 된다. 이러한 옵션에서 서비스 클라이언트를 생성하려면 CreateServiceClient를 호출하면 된다. 다음 예제 코드는 Amazon S3 서비스 클라이언트를 만드는 방법을 보여준다.
var options = Configuration.GetAWSOptions(); IAmazonS3 client = options.CreateServiceClient<IAmazonS3>();
appsettings 파일에 허용되는 값
다음 app 구성값은 appsettings.Development.json 파일에서 설정할 수 있다.필드 이름은 아래 목록에 표시된 대소문자를 사용해야 한다.이러한 설정에 대한 자세한 내용은 AWS.Runtime.ClientConfg 클래스를 참조하면 된다.
Region
Profile
ProfilesLocation
SignatureVersion
RegionEndpoint
UseHttp
ServiceURL
AuthenticationRegion
AuthenticationServiceName
MaxErrorRetry
LogResponse
BufferSize
ProgressUpdateInterval
ResignRetries
AllowAutoRedirect
LogMetrics
DisableLogging
UseDualstackEndpoint
ASP.NET Core 종속성 인젝션
AWSSDK.Extensions.NETCore.Setup NuGet 패키지는 ASP.NET 코어의 새로운 종속성 인젝션 시스템과도 통합된다. Startup의 ConfigureServices 메서드는 MVC 서비스가 추가되는 곳이다. 응용 프로그램이 Entity Framework를 사용하는 경우 이 인스턴스도 초기화된다.
참고 .NET Core의 종속성 인젝션에 대한 배경은 .NET Core 문서 사이트에서 볼 수 있다.
AWSSDK.Extensions.NETCore.Setup NuGet 패키지는 AWS 서비스를 종속성 인젝션에 추가하는데 사용할 수 있는 새로운 확장 메서드를 IServiceCollection에 추가한다. 다음 코드는 Amazon S3 및 DynamoDB를 우리의 서비스 목록에 추가하기 위해 IConfiguration에서 읽어온 AWS 옵션을 추가하는 방법을 보여준다.
public void ConfigureServices(IServiceCollection services) { // Add framework services. services.AddMvc();
이 항목에서는 .NET용 AWS SDK 버전 3의 변경 사항과 이 버전의 SDK로 코드를 마이그레이션하는 방법에 대해 설명한다.
.NET 버전용 AWS SDK 정보
2009년 11월에 처음 출시된 .NET용 AWS SDK는 .NET Framework 2.0용으로 설계되었다.이 릴리스 이후 .NET은 .NET Framework 4.0 및 .NET Framework 4.5로 개선되었으며 새로운 대상 플랫폼인 WinRT 및 Windows Phone이 추가되었다.
.NET 버전 2의 AWS SDK는 .NET 플랫폼의 새로운 기능을 활용하고 WinRT 및 Windows Phone을 대상으로 업데이트되었다.
.NET 버전 3용 AWS SDK가 어셈블리가 모듈화되도록 업데이트되었다.
SDK를 위한 아키텍처 재설계
.NET용 AWS SDK의 전체 버전 3은 모듈형으로 재설계되었다. 각 서비스는 이제 하나의 전역 어셈블리가 아닌 자체 어셈블리로 구현된다. 더 이상 .NET 용 AWS SDK 전체를 응용 프로그램에 추가할 필요없다. 이제 응용 프로그램에서 사용하는 AWS 서비스에 대해서만 어셈블리를 추가 할 수 있다.
변경 사항 요약
다음 섹션에서는 .NET용 AWS SDK 버전 3의 변경 사항에 대해 설명한다.
AWSClientFactory 제거
Amazon.AWSClientFactory 클래스가 제거되었다.이제 서비스 클라이언트를 만들려면 서비스 클라이언트의 생성자를 사용해야 한다.예를 들어, AmazonEC2Client를 작성하려면 다음의 작업을 수행해야 한다.
var ec2Client = new Amazon.EC2.AmazonEC2Client();
Amazon.Runtime.AssumeRoleAWSCredentials 제거
Amazon.Runtime.AssumeRoleAWSCredentials 클래스는 코어 네임 스페이스에 있었지만 AWS Security Token Service에 대한 종속성이 있고 SDK에서 사용되지 않으므로 제거되었다. 이 클래스를 대신해서 Amazon.SecurityToken.AssumeRoleAWSCredentials 클래스를 사용해야 한다.
SetACL 메서드가 S3Link에서 제거
S3Link 클래스는 Amazon.DynamoDBv2 패키지의 일부이며 Amazon S3에서 DynamoDB 항목의 참조인 객체를 저장하는 데 사용된다. 이것은 유용한 기능이지만 DynamoDB용 Amazon.S3 패키지에 대한 컴파일 종속성을 생성하고 싶지 않았기 때문에 S3Link 클래스에서 노출된 Amazon.S3 메서드를 단순화하여 SetACL 메서드를 MakeS3ObjectPublic 메서드로 대체했다. 객체에 대한 액세스 제어 목록(Access Control List, ACL)을 보다 효과적으로 제어하려면 Amazon.S3 패키지를 직접 사용해야 한다.
사용되지 않는 결과 클래스 제거(Removal of Obsolete Result Classes)
.NET 용 AWS SDK의 대부분의 서비스에서 작업은 요청 ID 및 결과 객체와 같은 작업에 대한 메타 데이터가 포함된 응답 객체를 반환한다. 별도의 응답 및 결과 클래스를 갖는 것이 중복되어 개발자를 위한 추가 타이핑(extra typing)을 만들었다. .NET 용 AWS SDK 버전 2에서는 결과 클래스의 모든 정보를 응답 클래스에 넣었고 결과 클래스를 사용하지 못하도록 폐기했다. .NET 용 AWS SDK 버전 3에서는 SDK의 크기를 줄이기 위해 이러한 쓸모없는 결과 클래스를 제거했다.
AWS 구성 섹션 변경(AWS Config Section Changes)
App.config 또는 Web.config 파일을 통해 .NET 용 AWS SDK의 고급 구성을 수행할 수 있다.SDK 어셈블리 이름을 참조하는 다음과 같은 <aws> config 섹션을 통해 이 작업을 수행할 수 있다.
.NET 용 AWS SDK 버전 3에서는 AWSSDK 어셈블리가 더 이상 존재하지 않고 공통 코드를 AWSSDK.Core 어셈블리에 넣었다. 따라서 다음과 같이 App.config 또는 Web.config 파일에서 AWSSDK 어셈블리에 대한 참조를 AWSSDK.Core 어셈블리로 변경해야 한다.
.NET 용 AWS SDK를 사용하면 AWS 서비스에 대한 HTTP 요청에 대한 재시도 횟수 및 시간 초과 값을 구성 할 수 있다. 재시도 및 시간 초과 값의 기본값이 응용 프로그램에 적합하지 않은 경우 특정 요구 사항에 맞게 조정할 수는 있지만 이를 수행하는 것이 응용 프로그램의 동작에 어떻게 영향을 미치는지 이해하는 것이 중요하다.
재시도 및 시간 초과에 사용할 값을 결정하려면 다음을 고려해야 한다.
네트워크 연결이 저하되거나 AWS 서비스에 도달할 수 없을 때 .NET 용 AWS SDK 및 응용 프로그램이 어떻게 응답해야 하는가?호출에 실패했을 때, 연결을 포기해야 하는가? 아니면 계속 호출을 재시도하도록 할 것인가?
응용 프로그램이 응답성이 있어야하는 사용자 지향 응용 프로그램 또는 웹 사이트인가? 대기 시간 증가에 대한 내성이 더 높은 백그라운드 처리 작업인가?
응용 프로그램이 대기 시간이 낮은 안정적인 네트워크를 대상으로 배포되었는가? 아니면 신뢰할 수없는 연결로 원격 위치에 배포되었는가?
재시도
.NET 용 AWS SDK는 서버 측 조절 또는 연결 끊김으로 인해 실패한 요청을 다시 시도한다.ClientConfig 클래스의 MaxErrorRetry 속성을 사용하여 서비스 클라이언트 수준에서 재시도 횟수를 지정할 수 있다..NET 용 AWS SDK는 실패하고 예외를 throw하기 전에 지정된 횟수만큼 작업을 재시도한다. 기본적으로 MaxErrorRetry 속성은 AmazonDynamoDBConfig 클래스를 제외하고는 4로 설정되며, 기본값은 10회이다. 재시도가 발생하면 요청 대기 시간이 길어진다. 총 요청 대기 시간 및 오류율에 대한 응용 프로그램 제한을 기반으로 재시도를 구성해야 한다.
시간 초과
.NET 용 AWS SDK를 사용하면 서비스 클라이언트 수준에서 요청 시간 초과 및 소켓 읽기/쓰기 시간 초과 값을 구성할 수 있다. 이 값은 ClientConfig 클래스의 Timeout 및 ReadWriteTimeout 속성에 각각 지정된다. 이 값은 AWS 서비스 클라이언트 객체에 의해 생성된 HttpWebRequest 객체의 Timeout 및 ReadWriteTimeout 속성으로 전달된다. 기본적으로 Timeout 값은 100초이고 ReadWriteTimeout 값은 300초이다. 네트워크의 대기 시간이 길거나 작업을 다시 시도 할 수 있는 조건이 있는 경우 긴 시간 제한 값과 많은 재시도 횟수를 사용하면 일부 SDK 작업이 응답하지 않을 수 있다.
참고
이식 가능한 클래스 라이브러리(Portable Class Library, PCL)를 대상으로하는 .NET 용 AWS SDK 버전은 HttpWebRequest 클래스 대신 HttpClient 클래스를 사용하며 Timeout 속성만 지원한다.
다음은 기본 시간 초과 값에 대한 예외이다. 이 값은 명시적으로 시간 종료 값을 설정할 때 대체된다.
이식 가능한 클래스 라이브러리(Portable Class Library, PCL)를 대상으로하는 .NET 용 AWS SDK 버전은 모든 AmazonS3Client및 AmazonGlacierClient 객체에 대해 Timeout을 최대값으로 설정한다.
예제
다음 예제에서는 AmazonS3Client객체에 대해 최대 2번의 재시도, 10초의 시간 초과 및 10초의 읽기/쓰기 시간 초과를 지정하는 방법을 보여준다.
var client = new AmazonS3Client( new AmazonS3Config { Timeout = TimeSpan.FromSeconds(10), // Default value is 100 seconds ReadWriteTimeout = TimeSpan.FromSeconds(10), // Default value is 300 seconds MaxErrorRetry = 2 // Default value is 4 retries });
[유니티 어필리에이트 프로그램]
아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.
.NET Framework 4.5, Windows Store 및 Windows Phone 8 용 비동기 API
.NET 용 AWS SDK는 .NET Framework 버전 4.5, Windows Store 및 Windows Phone 8에 대한 새로운 작업 기반 비동기 패턴을 사용한다. async 및 await 키워드를 사용하면 차단하지 않고 모든 AWS 제품에 대한 비동기 작업을 수행하고 관리 할 수 있다. 작업 기반 비동기 패턴에 대한 자세한 내용은 MSDN의 작업 기반 비동기 패턴 (TAP)을 참조하면 된다.
.NET Framework 3.5 용 비동기 API
.NET 용 AWS SDK는 .NET 클라이언트 클래스에 의해 노출 된 대부분의 메소드 호출의 비동기(async)버전을 지원한다. 비동기 메소드를 사용하면 서비스의 응답에 코드 블록이 없어도 AWS 서비스를 호출 할 수 있다. 예를 들어 Amazon S3 또는 DynamoDB에 데이터를 쓰도록 요청한 다음 AWS가 요청을 처리하는 동안 코드가 다른 작업을 계속하도록 할 수 있다.
비동기 요청 메서드의 구문
AWS 서비스에 비동기 요청을 하는 데에는 두 가지 단계가 있다. 첫 번째는 요청에 대한 Begin 메서드를 호출하는 것이다. 이 메서드는 비동기 작업을 시작한다. 해당 End 메서드는 서비스에서 응답을 검색하고 작업 중에 발생할 수 있는 예외를 처리 할 수 있는 기회를 제공한다.
참고
End 메서드를 호출 할 필요는 없다.오류가 없다고 가정하면 End를 호출했는지 여부에 관계없이 비동기 작업이 완료된다.
Begin 메서드 구문
PutItemRequest와 같은 리퀘스트 오브젝트 매개변수를 가져 오는 것 외에도 비동기 Begin 메서드는 두 가지 추가 매개변수인 콜백 함수와 상태 오브젝트를 사용한다. Begin 메서드는 서비스 리퀘스트 오브젝트를 반환하는 대신 IAsyncResult 형식의 결과를 반환합니다. 이 유형의 정의에 대해서는 MSDN 설명서를 참조하면 확인할 수 있다.
비동기 작업이 완료되면 콜백 함수가 호출된다. 함수가 호출되면 IAsyncResult 유형의 단일 매개 변수를 받는다. 콜백 함수는 다음의 시그니처를 가진다.
void Callback( IAsyncResult asyncResult )
오브젝트 상태(Object state)
세 번째 매개변수인 state는 asyncResult 매개변수의 AsyncState 속성, 즉 asyncResult.AsyncState로 콜백 함수에서 사용할 수있는 사용자 정의 오브젝트이다.
패턴 호출(Calling Patterns)
콜백 함수와 상태 객체 전달.
콜백 함수를 전달하지만 상태 객체에 null을 전달한다.
콜백 함수와 상태 객체 모두에 대해 null을 전달한다.
이 주제는 이러한 각 패턴의 예를 제공한다.
IAsyncResult.AsyncWaitHandle 사용
경우에 따라 Begin 메서드를 호출하는 코드가 비동기 작업이 완료될 때까지 대기하도록 호출하는 다른 메서드를 사용해야 할 수도 있다. 이러한 상황에서는 WaitHandle이 IAsyncResult 반환 값의 IAsyncResult.AsyncWaitHandle 속성에서 반환한 메서드를 전달할 수 있다. 그런 다음 이 메서드는 이 WaitHandle에서 WaitOne을 호출하여 비동기 작업이 완료될 때까지 대기할 수 있다.
예제
뒤의 모든 예제는 모두 다음 초기화 코드를 통해서 초기화 되었다고 가정한다.
public static void TestPutObjectAsync() { // Create a client AmazonS3Client
// AmazonS3Client 클라이언트를 생성한다. client = new AmazonS3Client();
// PutObject 요청을 생성한다. // // You will need to use your own bucket name below in order // to run this sample code.
// 이 샘플 코드를 실행하려면 아래에 자신의 버킷 이름을 사용해야 한다. // PutObjectRequest request = new PutObjectRequest { BucketName = "{PUT YOUR OWN EXISTING BUCKET NAME HERE : 당신이 가진 실제 버킷 이름을 여기에 넣어라}", Key = "Item", ContentBody = "This is sample content..." };
// // additional example code
// 추가 예제 코드 // }
지정된 콜백이 없는 경우(No Callback Specified)
다음 예제 코드에서는 BeginPutObject를 호출하고 작업을 수행한 다음 EndPutObject를 호출하여 서비스 응답을 검색한다. EndPutObject에 대한 호출은 try 블록에 포함되어 작업 중에 발생할 수 있는 예외를 잡는다.
public static void SimpleCallback(IAsyncResult asyncResult) { Console.WriteLine("Finished PutObject operation with simple callback : 간단한 콜백으로 PutObject 작업 완료"); }
다음 코드는 BeginPutObject를 호출하고 위의 콜백 함수를 지정한다. PutObject 작업이 완료되면 콜백 함수가 호출된다. 단순 콜백 함수는 asyncResult 매개 변수의 AsyncState 속성에 액세스하지 않기 때문에 BeginPutObject를 호출하면 state 매개 변수에 null이 지정된다. 호출 코드나 콜백 함수는 EndPutObject를 호출하지 않는다.따라서 서비스 응답이 효과적으로 삭제되고 작업 중에 발생하는 예외는 무시된다.
다음 코드는 BeginPutObject를 호출하고 앞의 콜백 함수를 지정한다. PutObject 작업이 완료되면 콜백 함수가 호출된다. 이 예제에서 BeginPutObject를 호출하면 state 매개 변수에 대한 AmazonS3 클라이언트 객체가 지정된다. 콜백 함수는 클라이언트를 사용하여 EndPutObject 메소드를 호출하고 서버 응답을 검색한다. 콜백이 EndPutObject를 호출할 때 연산 중에 발생한 모든 예외가 수신되므로이 호출은 try 블록 내에 배치된다.
다음 코드는 BeginPutObject를 호출하고 위의 콜백 함수를 지정한다.PutObject 작업이 완료되면 콜백 함수가 호출된다.이 예제에서 BeginPutObject에 대한 호출은 state 매개변수에 대해 이전에 정의된 ClientState 클래스의 인스턴스를 지정한다.이 클래스는 AmazonS3 클라이언트와 BeginPutObject가 호출된 시간을 포함한다.콜백 함수는 AmazonS3 클라이언트 객체를 사용하고 EndPutObject 메소드를 호출하여 서버 응답을 검색한다.콜백은 작업의 시작 시간을 추출하여 비동기 작업이 완료되는 데 걸리는 시간을 출력하는 데 사용한다.
이전 예제와 마찬가지로 EndPutObject가 호출될 때 작업 중에 발생하는 예외가 수신되므로 이 호출은 try 블록 내에 배치된다.
public static void CallbackWithState(IAsyncResult asyncResult) { try
{ ClientState state = asyncResult.AsyncState as ClientState; AmazonS3Client s3Client = (AmazonS3Client)state.Client; PutObjectResponse response = state.Client.EndPutObject(asyncResult); Console.WriteLine("Finished PutObject operation with state callback that started at {0}",
// // Create a PutObject request // // You will need to change the BucketName below in order to run this // sample code. // PutObjectRequest request = new PutObjectRequest { BucketName = "PUT-YOUR-OWN-EXISTING-BUCKET-NAME-HERE", Key = "Item", ContentBody = "This is sample content..." };