

AWS Tools for PowerShell V4가 유지 관리 모드로 전환되었습니다.

[AWS Tools for PowerShell V5](https://docs.aws.amazon.com/powershell/v5/userguide/)로 마이그레이션하는 것이 좋습니다. 마이그레이션 방법에 대한 자세한 내용과 정보는 [유지 관리 모드 공지](https://aws.amazon.com/blogs/developer/aws-tools-for-powershell-v4-maintenance-mode-announcement/)를 참조하세요.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# AWS Tools for PowerShell 버전 3.3에서 버전 4로 마이그레이션
<a name="v4migration"></a>

AWS Tools for PowerShell 버전 4는 AWS Tools for PowerShell 버전 3.3에 대한 이전 버전과 호환되는 업데이트입니다. 기존 cmdlet 동작을 유지하면서 기능이 상당히 향상되었습니다.

새 버전으로 업그레이드한 후에도 기존 스크립트가 계속 작동하지만 프로덕션 환경을 업그레이드하기 전에 철저히 테스트하는 것이 좋습니다.

이 단원에서는 변경 사항에 대해 설명하고 이러한 변경 사항이 스크립트에 어떤 영향을 미칠 수 있는지에 대해 다룹니다.

## 새롭게 완전 모듈화된 `AWS.Tools` 버전
<a name="migrate-aws-tools"></a>

AWSPowerShell.NetCore 및 AWSPowerShell 패키지는 ‘모놀리식’이었습니다. 즉, 모든 AWS 서비스가 동일한 모듈에서 지원되어 매우 크고 새로운 AWS 서비스와 기능이 추가될 때마다 더 커집니다. 새 `AWS.Tools` 패키지는 사용하는 AWS 서비스에 필요한 모듈만 다운로드하고 설치할 수 있는 유연성을 제공하는 더 작은 모듈로 나뉩니다. 패키지에는 다른 모든 모듈에서 필요로 하는 공유 `AWS.Tools.Common` 모듈과 필요에 따라 모듈의 설치, 업데이트 및 제거를 간소화하는 `AWS.Tools.Installer` 모듈이 포함되어 있습니다.

또한 `Import-module`을 우선 호출하지 않고도 첫 번째 호출 시 cmdlet을 자동으로 가져올 수 있습니다. 하지만 cmdlet을 호출하기 전에 연결된 .NET 객체와 상호 작용하려면 여전히 `Import-Module`을 호출하여 관련 .NET 유형에 대해 PowerShell에 알려야 합니다.

예를 들어 다음 명령에는 `Amazon.EC2.Model.Filter`에 대한 참조가 있습니다. 이 유형의 참조는 자동 가져오기를 트리거할 수 없으므로 우선 `Import-Module`을 호출해야 합니다. 그렇지 않으면 명령이 실패합니다.

```
PS > $filter = [Amazon.EC2.Model.Filter]@{Name="vpc-id";Values="vpc-1234abcd"}
  InvalidOperation: Unable to find type [Amazon.EC2.Model.Filter].
```

```
PS > Import-Module AWS.Tools.EC2
PS > $filter = [Amazon.EC2.Model.Filter]@{Name="vpc-id";Values="vpc-1234abcd"}
PS > Get-EC2Instance -Filter $filter -Select Reservations.Instances.InstanceId
  i-0123456789abcdefg
  i-0123456789hijklmn
```

## 새로운 `Get-AWSService` cmdlet
<a name="migrate-get-awsservice"></a>

모듈 `AWS.Tools` 모음에서 각 AWS 서비스의 모듈 이름을 쉽게 찾을 수 있도록 `Get-AWSService` cmdlet을 사용할 수 있습니다.

```
PS > Get-AWSService
  Service : ACMPCA
  CmdletNounPrefix : PCA
  ModuleName : AWS.Tools.ACMPCA
  SDKAssemblyVersion : 3.3.101.56
  ServiceName : Certificate Manager Private Certificate Authority

  Service : AlexaForBusiness
  CmdletNounPrefix : ALXB
  ModuleName : AWS.Tools.AlexaForBusiness
  SDKAssemblyVersion : 3.3.106.26
  ServiceName : Alexa For Business
  ...
```

## Cmdlet에서 반환된 객체를 제어하는 새로운 `-Select` 파라미터
<a name="migrate-select"></a>

버전 4에서 대부분의 cmdlet은 새로운 `-Select` 파라미터를 지원합니다. 각 cmdlet은 AWS SDK for .NET를 사용하여 AWS 서비스 API를 호출합니다. 그런 다음 AWS Tools for PowerShell 클라이언트는 응답을 PowerShell 스크립트에서 사용할 수 있는 객체로 변환하고 다른 명령으로 파이프합니다. 원래 응답에 필요한 것보다 많은 필드 또는 속성이 최종 PowerShell 객체에 포함되어 있는 경우도 있고, 기본적으로 존재하지 않는 원래 응답의 필드 또는 속성을 이 객체에 포함시켜야 할 경우도 있을 수 있습니다. `-Select` 파라미터를 사용하면 cmdlet에서 반환된 .NET 객체에 포함시킬 사항을 지정할 수 있습니다.

예를 들어 [Get-S3Object](https://docs.aws.amazon.com/powershell/v4/reference/items/Get-S3Object.html) cmdlet은 Amazon S3 SDK 작업 [ListObjects](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/index.html?page=S3/MS3ListObjectsListObjectsRequest.html)를 호출합니다. 이 작업은 [ListObjectsResponse](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/index.html?page=S3/MS3ListObjectsListObjectsRequest.h) 객체를 반환합니다. 하지만 기본적으로 `Get-S3Object` cmdlet은 SDK 응답의 `S3Objects` 요소만 PowerShell 사용자에게 반환합니다. 다음 예제에서 이 객체는 2개 원소가 있는 배열입니다.

```
PS > Get-S3Object -BucketName amzn-s3-demo-bucket

ETag : "01234567890123456789012345678901111"
BucketName : amzn-s3-demo-bucket
Key : file1.txt
LastModified : 9/30/2019 1:31:40 PM
Owner : Amazon.S3.Model.Owner
Size : 568
StorageClass : STANDARD

ETag : "01234567890123456789012345678902222"
BucketName : amzn-s3-demo-bucket
Key : file2.txt
LastModified : 7/15/2019 9:36:54 AM
Owner : Amazon.S3.Model.Owner
Size : 392
StorageClass : STANDARD
```

 AWS Tools for PowerShell 버전 4에서는 SDK API 호출에서 반환되는 전체 .NET 응답 객체를 반환`-Select *`하도록를 지정할 수 있습니다.

```
PS > Get-S3Object -BucketName amzn-s3-demo-bucket -Select *
  IsTruncated    : False
  NextMarker     :
  S3Objects      : {file1.txt, file2.txt}
  Name           : amzn-s3-demo-bucket
  Prefix         :
  MaxKeys        : 1000
  CommonPrefixes : {}
  Delimiter      :
```

또한 원하는 특정 중첩 속성에 대한 경로를 지정할 수도 있습니다. 다음 예제에서는 `S3Objects` 배열에 있는 각 원소의 `Key` 속성만 반환합니다.

```
PS > Get-S3Object -BucketName amzn-s3-demo-bucket -Select S3Objects.Key
file1.txt
file2.txt
```

특정 상황에서는 cmdlet 파라미터를 반환하는 것이 유용할 수 있습니다. `-Select ^ParameterName`을 사용해 이 작업을 수행할 수 있습니다. 이 기능은 `-PassThru` 파라미터(여전히 사용 가능하지만 더 이상 사용되지 않음)를 대체합니다.

```
PS > Get-S3Object -BucketName amzn-s3-demo-bucket -Select S3Objects.Key |
>> Write-S3ObjectTagSet -Select ^Key -BucketName amzn-s3-demo-bucket -Tagging_TagSet @{ Key='key'; Value='value'}
  file1.txt
  file2.txt
```

각 cmdlet에 대한 [참조 항목](https://docs.aws.amazon.com/powershell/v4/reference/)에서 `-Select` 파라미터를 지원하는지 여부를 식별합니다.

## 출력 항목 수에 대한 보다 일관된 제한
<a name="migrate-iterate"></a>

이전 버전의 에서는 `-MaxItems` 파라미터를 사용하여 최종 출력에서 반환되는 최대 객체 수를 지정할 수 AWS Tools for PowerShell 있었습니다.

이 동작은 `AWS.Tools`에서 제거됩니다.

이 동작은 AWSPowerShell.NetCore 및 AWSPowerShell에서 더 이상 사용되지 않으며 향후 릴리스의 해당 버전에서 제거됩니다.

기본 서비스 API가 `MaxItems` 파라미터를 지원하는 경우, 계속 사용할 수 있으며 API에서 지정한 대로 작동합니다. 하지만 cmdlet의 출력에서 반환되는 항목 수를 제한하는 동작을 더 이상 수행하지 않습니다.

최종 출력에서 반환되는 항목 수를 제한하려면 출력을 `Select-Object` cmdlet으로 파이핑하고 `-First n` 파라미터를 지정합니다. 여기서 *n*은 최종 출력에 포함할 최대 항목 수입니다.

```
PS > Get-S3ObjectV2 -BucketName amzn-s3-demo-bucket -Select S3Objects.Key | select -first 2
file1.txt
file2.txt
```

모든 AWS 서비스가 `-MaxItems` 동일한 방식으로 지원되는 것은 아니므로 이로 인해 불일치와 때때로 발생한 예상치 못한 결과가 제거됩니다. 또한 `-MaxItems`가 새로운 [`-Select`](#migrate-select) 파라미터와 결합되면 때때로 혼란스러운 결과가 발생할 수 있습니다.

## 더욱 사용하기 쉬워진 Stream 파라미터
<a name="migrate-streamparam"></a>

`Stream` 또는 `byte[]` 유형의 파라미터는 이제 `string`, `string[]` 또는 `FileInfo` 값을 수락합니다.

예를 들어 다음 예제 중 하나를 사용할 수 있습니다.

```
PS > Invoke-LMFunction -FunctionName MyTestFunction -PayloadStream '{
>> "some": "json"
>> }'
```

```
PS > Invoke-LMFunction -FunctionName MyTestFunction -PayloadStream (ls .\some.json)
```

```
PS > Invoke-LMFunction -FunctionName MyTestFunction -PayloadStream @('{', '"some": "json"', '}')
```

 AWS Tools for PowerShell 는 UTF-8 인코딩을 `byte[]` 사용하여 모든 문자열을 로 변환합니다.

## 속성 이름별로 파이프 확장
<a name="migrate-pipes"></a>

이제 *모든* 파라미터에 대한 속성 이름을 지정하여 파이프라인 입력을 전달할 수 있으므로 보다 일관된 사용자 경험을 제공할 수 있습니다.

다음 예제에서는 대상 cmdlet의 파라미터 이름과 일치하는 이름을 가진 속성이 있는 사용자 지정 객체를 만듭니다. cmdlet이 실행되면 이러한 속성을 자동으로 해당 파라미터로 사용합니다.

```
PS > [pscustomobject] @{ BucketName='amzn-s3-demo-bucket'; Key='file1.txt'; PartNumber=1 } | Get-S3ObjectMetadata
```

**참고**  
일부 속성은의 이전 버전에서 이를 지원했습니다 AWS Tools for PowerShell. 버전 4에서는 *모든* 파라미터에 대해 이를 활성화함으로써 일관성을 개선했습니다.

## 정적 공통 파라미터
<a name="migrate-staticcommonparams"></a>

버전 4.0의 일관성을 개선하기 위해 AWS Tools for PowerShell모든 파라미터는 정적입니다.

이전 버전에서는 AWS Tools for PowerShell,, `AccessKey``SecretKey` `ProfileName`또는와 같은 일부 공통 파라미터가 [동적](https://docs.microsoft.com/dotnet/api/system.management.automation.idynamicparameters)`Region`이었던 반면 다른 모든 파라미터는 정적이었습니다. 이 경우 PowerShell은 동적 파라미터보다 먼저 정적 파라미터를 바인딩하기 때문에 문제가 발생할 수 있습니다. 예를 들어 다음 명령을 실행했다고 가정해보겠습니다.

```
PS > Get-EC2Region -Region us-west-2
```

PowerShell의 이전 버전에서는 값 `us-west-2`를 `-Region` 동적 파라미터가 아니라 `-RegionName` 정적 파라미터에 바인딩했습니다. 이러한 수행은 사용자를 혼란스럽게 할 수 있습니다.

## `AWS.Tools` 필수 파라미터 선언 및 강제 시행
<a name="migrate-mandatoryparams"></a>

`AWS.Tools.*` 모듈은 이제 필수 cmdlet 파라미터를 선언하고 강제 시행합니다. AWS 서비스에서 API의 파라미터가 필요하다고 선언한 경우, cmdlet 파라미터를 지정하지 않으면 PowerShell은 해당 cmdlet 파라미터를 묻는 메시지를 표시합니다. 이것은 `AWS.Tools`에만 적용됩니다. 이전 버전과의 호환성을 보장하기 위해 AWSPowerShell.NetCore 또는 AWSPowerShell에는 적용되지 않습니다.

## 모든 파라미터에 Null 값 사용 가능
<a name="migrate-nullableparams"></a>

이제 값 유형 파라미터(숫자 및 날짜)에 `$null`을 지정할 수 있습니다. 이 변경 사항은 기존 스크립트에 영향을 주지 않습니다. 이렇게 하면 필수 파라미터에 대해 표시되는 메시지를 우회할 수 있습니다. 필수 파라미터는 `AWS.Tools`에서만 강제 시행됩니다.

버전 4를 사용하여 다음 예제를 실행하면 각 필수 파라미터에 “값”을 제공하기 때문에 클라이언트 측 검증을 실질적으로 우회할 수 있습니다. 그러나 Amazon EC2 API 서비스 호출은 AWS 서비스에 여전히 해당 정보가 필요하기 때문에 실패합니다.

```
PS > Get-EC2InstanceAttribute -InstanceId $null -Attribute $null
WARNING: You are passing $null as a value for parameter Attribute which is marked as required.
In case you believe this parameter was incorrectly marked as required, report this by opening 
an issue at [https://github.com/aws/aws-tools-for-powershell/issues](https://github.com/aws/aws-tools-for-powershell/issues).
WARNING: You are passing $null as a value for parameter InstanceId which is marked as required.
In case you believe this parameter was incorrectly marked as required, report this by opening
an issue at [https://github.com/aws/aws-tools-for-powershell/issues](https://github.com/aws/aws-tools-for-powershell/issues).

Get-EC2InstanceAttribute : The request must contain the parameter instanceId
```

## 더 이상 사용되지 않는 기능 제거
<a name="migrate-removeprevdeprecated"></a>

다음 기능은의 이전 릴리스에서 더 이상 사용되지 AWS Tools for PowerShell 않으며 버전 4에서 제거됩니다.
+ `Stop-EC2Instance` cmdlet에서 `-Terminate` 파라미터가 제거되었습니다. 대신 `Remove-EC2Instance`을 사용하세요.
+ Clear-AWSCredential cmdlet에서 `-ProfileName` 파라미터가 제거되었습니다. 대신 `Remove-AWSCredentialProfile`을 사용하세요.
+ cmdlet `Import-EC2Instance` 및 `Import-EC2Volume`이 제거되었습니다.