

버전 5(V5) AWS Tools for PowerShell 가 릴리스되었습니다.

변경 사항 해제 및 애플리케이션 마이그레이션에 대한 자세한 내용은 [마이그레이션 주제를](https://docs.aws.amazon.com/powershell/v5/userguide/migrating-v5.html) 참조하세요.

 [https://docs.aws.amazon.com/powershell/v5/userguide/migrating-v5.html](https://docs.aws.amazon.com/powershell/v5/userguide/migrating-v5.html)

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

# 에서 AWS 서비스 호출 AWS Tools for PowerShell
<a name="pstools-using"></a>

이 섹션에서는를 사용하여 AWS 서비스에 AWS Tools for PowerShell 액세스하는 예를 제공합니다. 이 예제는 cmdlet을 사용하여 실제 AWS 작업을 수행하는 방법을 보여 줍니다. 이러한 예제에서는 Tools for PowerShell에서 제공하는 cmdlet을 사용합니다. 사용할 수 있는 cmdlet을 확인하려면 [AWS Tools for PowerShell Cmdlet Reference](https://docs.aws.amazon.com/powershell/v5/reference/)를 참조하세요.

[코드 예제](powershell_code_examples.md) 장에서 더 많은 AWS Tools for PowerShell 예제를 찾을 수 있습니다.

## PowerShell 파일 연결 인코딩
<a name="powershell-file-concatenation-encoding"></a>

의 일부 cmdlet은 기존 파일 또는 레코드를 AWS Tools for PowerShell 편집합니다 AWS. Amazon Route 53를 위한 [ChangeResourceRecordSets](https://docs.aws.amazon.com/Route53/latest/APIReference/API_ChangeResourceRecordSets.html) API를 호출하는 `Edit-R53ResourceRecordSet`이 바로 그 예입니다.

PowerShell 5.1 이전 릴리스에서 파일을 편집하거나 연결할 때 PowerShell이 UTF-8이 아니라 UTF-16으로 출력을 인코딩합니다. 그러면 원치 않는 문자가 추가되고 잘못된 결과가 생길 수 있습니다. 16진수 편집기에서 원치 않는 문자를 볼 수 있습니다.

파일 출력을 UTF-16으로 변환하지 않으려면 다음 예제와 같이 PowerShell의 `Out-File` cmdlet에 명령을 파이프하고 UTF-8 인코딩을 지정할 수 있습니다.

```
PS > *some file concatenation command* | Out-File filename.txt -Encoding utf8
```

PowerShell 콘솔 내에서 AWS CLI 명령을 실행하는 경우 동일한 동작이 적용됩니다. PowerShell 콘솔에서 AWS CLI 명령의 출력을 로 파이프할 수 `Out-File` 있습니다. `Export-Csv`나 `Export-Clixml` 같은 다른 cmdlet에도 `Encoding` 파라미터가 있습니다. `Encoding` 매개 변수가 있고 연결된 파일의 출력을 올바르게 인코딩하도록 해주는 cmdlet의 전체 목록을 보려면 다음 명령을 실행합니다.

```
PS > Get-Command -ParameterName "Encoding"
```

**참고**  
PowerShell Core를 포함한 PowerShell 6.0 이상에서는 연결된 파일 출력을 위해 UTF-8 인코딩을 자동으로 유지합니다.

## PowerShell 도구에 대해 반환된 객체
<a name="returned-objects-for-the-powershell-tools"></a>

네이티브 PowerShell 환경에서 AWS Tools for PowerShell 더 유용하게 사용하기 위해 AWS Tools for PowerShell cmdlet에서 반환되는 객체는 일반적으로 AWS SDK의 해당 API에서 반환되는 JSON 텍스트 객체가 아닌 .NET 객체입니다. 예를 들어, `Get-S3Bucket`는 Amazon S3 JSON 응답 객체가 아닌 `Buckets` 컬렉션을 방출합니다. `Buckets` 컬렉션은 PowerShell 파이프라인에 배치되어 적절한 방식으로 상호 작용할 수 있습니다. 마찬가지로 `Get-EC2Instance`은 `DescribeEC2Instances` JSON 결과 객체가 아니라 `Reservation` .NET 객체 컬렉션을 방출합니다. 이러한 동작은 설계에 따른 것이며 AWS Tools for PowerShell 환경을 관용적인 PowerShell과 더 일관되게 유지할 수 있습니다.

필요한 경우 실제 서비스 응답을 사용할 수 있습니다. 이러한 응답은 반환된 객체에서 `note` 속성으로 저장됩니다. `NextToken` 필드를 사용하여 페이징을 지원하는 API 작업의 경우, `note` 속성으로도 연결됩니다.

## [Amazon EC2](pstools-ec2.md)
<a name="using-ec2"></a>

이 단원에서는 다음 방법을 비롯하여 Amazon EC2 인스턴스를 시작하는 데 필요한 단계를 안내합니다.
+ Amazon Machine Images(AMI) 목록을 검색합니다.
+ SSH 인증을 위한 키 페어를 생성합니다.
+ Amazon EC2 보안 그룹을 생성 및 구성합니다.
+ 인스턴스를 시작하고 인스턴스에 대한 정보를 검색합니다.

## [Amazon S3](pstools-s3.md)
<a name="using-s3"></a>

이 단원은 Amazon S3에 호스팅된 정적 웹 사이트를 생성하는 데 필요한 단계를 안내합니다. 다음 방법을 설명합니다.
+ Amazon S3 버킷을 생성하고 삭제합니다.
+ 파일을 Amazon S3 버킷에 객체로 업로드합니다.
+ Amazon S3 버킷에서 객체를 삭제합니다.
+ Amazon S3 버킷을 웹 사이트로 지정합니다.

## [AWS Lambda 및 AWS Tools for PowerShell](pstools-lambda.md)
<a name="using-lambda"></a>

이 섹션에서는 PowerShell용 AWS Lambda 도구 모듈에 대한 간략한 개요를 제공하고 모듈 설정에 필요한 단계를 설명합니다.

## [Amazon SNS 및 Amazon SQS](pstools-sqs-queue-sns-topic.md)
<a name="using-sns"></a>

이 단원에서는 Amazon SNS 주제에 대한 Amazon SQS 대기열을 구독하는 데 필요한 단계를 안내합니다. 다음 방법을 설명합니다.
+ Amazon SNS 주제를 생성합니다.
+ Amazon SQS 대기열을 생성합니다.
+  주제에 대한 대기열을 구독합니다.
+ 메시지를 주제로 전송합니다.
+ 대기열에서 메시지를 검색합니다.

## [CloudWatch](pstools-cw.md)
<a name="using-cw"></a>

이 단원에서는 CloudWatch에 사용자 지정 데이터를 게시하는 방법의 예를 제공합니다.
+ CloudWatch 대시보드에 사용자 지정 지표를 게시합니다.

## 참고
<a name="see-also"></a>
+  [구성 및 사용 AWS Tools for PowerShell](pstools-getting-started.md) 

## 주제
<a name="w2aac13c23"></a>
+ [Amazon S3 및 Tools for Windows PowerShell](pstools-s3.md)
+ [Amazon EC2 및 Tools for Windows PowerShell](pstools-ec2.md)
+ [AWS Lambda 및 AWS Tools for PowerShell](pstools-lambda.md)
+ [Amazon SQS, Amazon SNS 및 Tools for Windows PowerShell](pstools-sqs-queue-sns-topic.md)
+ [의 CloudWatch AWS Tools for Windows PowerShell](pstools-cw.md)
+ [cmdlet에서 ClientConfig 파라미터 사용](pstools-clientconfig.md)

# Amazon S3 및 Tools for Windows PowerShell
<a name="pstools-s3"></a>

이 섹션에서는 Amazon S3 및 CloudFront를 사용하여를 AWS Tools for Windows PowerShell 사용하여 정적 웹 사이트를 생성합니다. 이 프로세스에서는 이러한 서비스를 이용한 일반적인 작업을 설명합니다. 이 시연은 [AWS 관리 콘솔](https://console.aws.amazon.com/s3/home)을 사용한 유사한 프로세스를 설명하는 [정적 웹 사이트 호스팅](https://aws.amazon.com/getting-started/projects/host-static-website/)에 대한 시작 안내서를 모델링하고 있습니다.

여기에 표시된 명령은 PowerShell 세션의 기본 자격 증명 및 기본 리전을 설정했다고 가정합니다. 그러므로 자격 증명 리전이 cmdlet 호출에 포함되지 않습니다.

**참고**  
현재는 버킷이나 객체 이름을 변경하기 위한 Amazon S3 API가 없으므로 이 작업을 수행하기 위한 Tools for Windows PowerShell cmdlet도 없습니다. S3의 객체 이름을 변경하려면 [Copy-S3Object](https://docs.aws.amazon.com/powershell/v5/reference/items/Copy-S3Object.html) cmdlet을 실행하여 새 이름을 가진 객체로 객체를 복사한 후, [Remove-S3Object](https://docs.aws.amazon.com/powershell/v5/reference/items/Remove-S3Object.html) cmdlet을 실행하여 원래 객체를 삭제하는 것이 좋습니다.

**다음 사항도 참조하세요.**
+  [에서 AWS 서비스 호출 AWS Tools for PowerShell](pstools-using.md) 
+  [Amazon S3에서 정적 웹 사이트 호스팅](https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html) 
+  [Amazon S3 콘솔](https://console.aws.amazon.com/s3/home) 

**Topics**
+ [Amazon S3 버킷 생성, 리전 확인 및 제거(선택 사항)](pstools-s3-bucket-create.md)
+ [Amazon S3 버킷을 웹 사이트로 구성하고 로깅 활성화](pstools-s3-create-website.md)
+ [Amazon S3 버킷에 객체 업로드](pstools-s3-upload-object.md)
+ [Amazon S3 객체 및 버킷 삭제](pstools-s3-delete-website.md)
+ [Amazon S3에 인라인 텍스트 콘텐츠 업로드](pstools-s3-upload-in-line-text.md)

# Amazon S3 버킷 생성, 리전 확인 및 제거(선택 사항)
<a name="pstools-s3-bucket-create"></a>

`New-S3Bucket` cmdlet을 사용하여 새 Amazon S3 버킷을 생성합니다. 다음 예제에서는 `website-example`이라는 버킷을 생성합니다. 버킷의 이름은 모든 리전에서 고유해야 합니다. 이 예제에서는 `us-west-1` 리전에 버킷을 생성합니다.

```
PS > New-S3Bucket -BucketName website-example -Region us-west-2

CreationDate         BucketName
------------         ----------
8/16/19 8:45:38 PM   website-example
```

`Get-S3BucketLocation` cmdlet을 사용하여 버킷이 위치한 리전을 확인할 수 있습니다.

```
PS > Get-S3BucketLocation -BucketName website-example

Value
-----
us-west-2
```

이 자습서를 마치면 다음 라인을 사용하여 이 버킷을 제거할 수 있습니다. 후속 예제에서 사용해야 하므로 이 버킷을 제 위치에 그대로 둘 것을 제안합니다.

```
PS > Remove-S3Bucket -BucketName website-example
```

버킷 제거 프로세스는 완료하는 데 다소 시간이 걸립니다. 동일한 이름의 버킷을 즉시 다시 생성하려고 하면 이전 버킷이 완전히 사라질 때까지 `New-S3Bucket` cmdlet이 실패할 수 있습니다.

## 참고
<a name="pstools-seealso-s3-bucket-create"></a>
+  [에서 AWS 서비스 호출 AWS Tools for PowerShell](pstools-using.md) 
+  [Put 버킷(Amazon S3 서비스 참조)](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUT.html) 
+  [AWS Amazon S3용 PowerShell 리전](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region) 

# Amazon S3 버킷을 웹 사이트로 구성하고 로깅 활성화
<a name="pstools-s3-create-website"></a>

`Write-S3BucketWebsite` cmdlet을 사용하여 Amazon S3 버킷을 정적 웹 사이트로 구성합니다. 다음 예제에서는 기본 콘텐츠 웹 페이지에 `index.html` 이름과 기본 오류 웹 페이지에 `error.html` 이름을 지정합니다. 이 cmdlet은 이러한 페이지를 만들지 않습니다. 이러한 페이지를 [Amazon S3 객체로서 업로드해야 합니다](pstools-s3-upload-object.md).

```
PS > Write-S3BucketWebsite -BucketName website-example -WebsiteConfiguration_IndexDocumentSuffix index.html -WebsiteConfiguration_ErrorDocument error.html
RequestId      : A1813E27995FFDDD
AmazonId2      : T7hlDOeLqA5Q2XfTe8j2q3SLoP3/5XwhUU3RyJBGHU/LnC+CIWLeGgP0MY24xAlI
ResponseStream :
Headers        : {x-amz-id-2, x-amz-request-id, Content-Length, Date...}
Metadata       : {}
ResponseXml    :
```

## 참고
<a name="pstools-seealso-s3-create-website"></a>
+  [에서 AWS 서비스 호출 AWS Tools for PowerShell](pstools-using.md) 
+  [Put 버킷 웹 사이트(Amazon S3 API 참조)](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTwebsite.html) 
+  [Put 버킷 ACL(Amazon S3 API 참조)](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTacl.html) 

# Amazon S3 버킷에 객체 업로드
<a name="pstools-s3-upload-object"></a>

로컬 파일 시스템의 파일을 Amazon S3 버킷에 객체로 업로드하려면 `Write-S3Object` cmdlet을 사용합니다. 아래 예제에서는 간단한 HTML 파일 두 개를 작성하여 Amazon S3 버킷에 업로드하고 업로드된 객체의 유무를 확인합니다. `-File`에 대한 `Write-S3Object` 파라미터는 로컬 파일 시스템의 파일 이름을 지정합니다. `-Key` 파라미터는 Amazon S3에서 해당 객체에 사용될 이름을 지정합니다.

Amazon은 파일 확장명에서 객체의 콘텐츠 유형(이 경우 ".html")을 유추합니다.

```
PS > # Create the two files using here-strings and the Set-Content cmdlet
PS > $index_html = @"
>> <html>
>>   <body>
>>     <p>
>>       Hello, World!
>>     </p>
>>   </body>
>> </html>
>> "@
>>
PS > $index_html | Set-Content index.html
PS > $error_html = @"
>> <html>
>>   <body>
>>     <p>
>>       This is an error page.
>>     </p>
>>   </body>
>> </html>
>> "@
>>
>>$error_html | Set-Content error.html
>># Upload the files to Amazon S3 using a foreach loop
>>foreach ($f in "index.html", "error.html") {
>> Write-S3Object -BucketName website-example -File $f -Key $f -CannedACLName public-read
>> }
>>
PS > # Verify that the files were uploaded
PS > Get-S3BucketWebsite -BucketName website-example

IndexDocumentSuffix                                         ErrorDocument
-------------------                                         -------------
index.html                                                  error.html
```

 *미리 준비된 ACL 옵션* 

Tools for Windows PowerShell을 사용하여 미리 준비된 ACL을 지정하는 값은 AWS SDK for .NET에서 사용되는 것과 동일합니다. 하지만 이러한 값은 Amazon S3 `Put Object` 작업에 사용되는 값과는 다릅니다. Tools for Windows PowerShell은 다음과 같은 미리 준비된 ACL을 지원합니다.
+ NoACL
+ private
+ public-read
+ public-read-write
+ aws-exec-read
+ authenticated-read
+ bucket-owner-read
+ bucket-owner-full-control
+ log-delivery-write

미리 준비된 ACL 설정에 대한 자세한 내용은 [액세스 제어 목록 개요](https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl)를 참조하십시오.

## 멀티파트 업로드에 관한 정보
<a name="note-regarding-multipart-upload"></a>

Amazon S3 API를 사용하여 5GB보다 큰 파일을 업로드하는 경우 멀티파트 업로드를 사용해야 합니다. 하지만 Tools for Windows PowerShell에서 제공하는 `Write-S3Object` cmdlet은 5GB보다 큰 파일 업로드를 투명하게 처리할 수 있습니다.

### 웹 사이트 테스트
<a name="pstools-amazon-s3-test-website"></a>

이때 브라우저에서 탐색하여 웹 사이트를 테스트할 수 있습니다. Amazon S3에 호스팅된 정적 웹 사이트의 URL은 표준 형식을 따릅니다.

```
http://<bucket-name>.s3-website-<region>.amazonaws.com
```

예시:

```
http://website-example.s3-website-us-west-1.amazonaws.com
```

### 참고
<a name="pstools-seealso-amazon-s3-test-website"></a>
+  [에서 AWS 서비스 호출 AWS Tools for PowerShell](pstools-using.md) 
+  [Put 객체(Amazon S3 API 참조)](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html) 
+  [미리 준비된 ACL(Amazon S3 API 참조)](https://docs.aws.amazon.com/AmazonS3/latest/dev/ACLOverview.html#CannedACL) 

# Amazon S3 객체 및 버킷 삭제
<a name="pstools-s3-delete-website"></a>

이 단원에서는 이전 단원에 생성된 웹 사이트를 삭제하는 방법을 설명합니다. HTML 파일에 대한 객체를 삭제하고 나서 이 사이트에 대한 Amazon S3 버킷을 삭제하면 됩니다.

먼저, `Remove-S3Object` cmdlet을 실행하여 Amazon S3 버킷에서 HTML 파일에 대한 객체를 삭제합니다.

```
PS > foreach ( $obj in "index.html", "error.html" ) {
>> Remove-S3Object -BucketName website-example -Key $obj
>> }
>> 
IsDeleteMarker
--------------
False
```

`False` 응답은 Amazon S3에서 요청을 처리하는 방법의 예상된 아티팩트입니다. 이 경우 이는 문제를 의미하지 않습니다.

이제 `Remove-S3Bucket` cmdlet을 실행해 사이트에서 현재 비어 있는 Amazon S3 버킷을 삭제할 수 있습니다.

```
PS > Remove-S3Bucket -BucketName website-example

RequestId      : E480ED92A2EC703D
AmazonId2      : k6tqaqC1nMkoeYwbuJXUx1/UDa49BJd6dfLN0Ls1mWYNPHjbc8/Nyvm6AGbWcc2P
ResponseStream :
Headers        : {x-amz-id-2, x-amz-request-id, Date, Server}
Metadata       : {}
ResponseXml    :
```

1.1 이상 버전의 에서는 `-DeleteBucketContent` 파라미터를에 추가할 AWS Tools for PowerShell수 있습니다. `Remove-S3Bucket`그러면 버킷 자체를 제거하기 전에 먼저 지정된 버킷의 모든 객체와 객체 버전이 삭제됩니다. 버킷의 객체 또는 객체 버전 수에 따라 이 작업에는 상당한 시간이 걸릴 수도 있습니다. 1.1 이전 버전의 Tools for Windows PowerShell에서는 버킷을 비워야만 `Remove-S3Bucket`에서 버킷을 삭제할 수 있었습니다.

**참고**  
`-Force` 파라미터를 추가하지 않는 한는 cmdlet이 실행되기 전에 확인을 AWS Tools for PowerShell 요청합니다.

## 참고
<a name="pstools-seealso-amazon-s3-delete-website"></a>
+  [에서 AWS 서비스 호출 AWS Tools for PowerShell](pstools-using.md) 
+  [객체 삭제(Amazon S3 API 참조)](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectDELETE.html) 
+  [DeleteBucket(Amazon S3 API 참조)](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketDELETE.html) 

# Amazon S3에 인라인 텍스트 콘텐츠 업로드
<a name="pstools-s3-upload-in-line-text"></a>

`Write-S3Object` cmdlet에서는 Amazon S3에 인라인 텍스트 콘텐츠를 업로드하는 기능을 지원합니다. `-Content` (별칭 `-Text`)를 사용하면 파일에 먼저 붙여 넣지 않고도 Amazon S3에 업로드할 텍스트 기반 내용을 지정할 수 있습니다. 이 파라미터에는 간단한 한 줄 문자열은 물론 여기에 나오는 여러 줄을 포함하는 문자열도 사용할 수 있습니다.

```
PS > # Specifying content in-line, single line text:
PS > write-s3object amzn-s3-demo-bucket -key myobject.txt -content "file content"

PS > # Specifying content in-line, multi-line text: (note final newline needed to end in-line here-string)
PS > write-s3object amzn-s3-demo-bucket -key myobject.txt -content @"
>> line 1
>> line 2
>> line 3
>> "@
>> 
PS > # Specifying content from a variable: (note final newline needed to end in-line here-string)
PS > $x = @"
>> line 1
>> line 2
>> line 3
>> "@
>> 
PS > write-s3object amzn-s3-demo-bucket -key myobject.txt -content $x
```

# Amazon EC2 및 Tools for Windows PowerShell
<a name="pstools-ec2"></a>

를 사용하여 Amazon EC2와 관련된 일반적인 작업을 수행할 수 있습니다 AWS Tools for PowerShell.

여기에 표시된 예제에서는 PowerShell 세션의 기본 자격 증명 및 기본 리전을 설정했다고 가정합니다. 그러므로 cmdlet을 호출할 때 자격 증명이나 리전을 포함하지 않습니다. 자세한 내용은 [를 사용하여 인증 AWS](creds-idc.md) 및 [AWS 리전](pstools-installing-specifying-region.md) 섹션을 참조하세요.

**Topics**
+ [키 페어 생성](pstools-ec2-keypairs.md)
+ [보안 그룹 생성](pstools-ec2-sg.md)
+ [AMI 찾기](pstools-ec2-get-amis.md)
+ [인스턴스 시작](pstools-ec2-launch.md)

# 키 페어 만들기
<a name="pstools-ec2-keypairs"></a>

다음 `New-EC2KeyPair` 예제에서는 키 페어를 만들고 PowerShell 변수 `$myPSKeyPair`에 이를 저장합니다.

```
PS > $myPSKeyPair = New-EC2KeyPair -KeyName myPSKeyPair
```

키 페어 객체를 `Get-Member` cmdlet에 파이프하여 객체의 구조를 확인합니다.

```
PS > $myPSKeyPair | Get-Member

     TypeName: Amazon.EC2.Model.KeyPair

  Name                MemberType   Definition
  ----                ----------   ----------
  Equals              Method       bool Equals(System.Object obj)
  GetHashCode         Method       int GetHashCode()
  GetType             Method       type GetType()
  ToString            Method       string ToString()
  KeyFingerprint      Property     System.String KeyFingerprint {get;set;}
  KeyMaterial         Property     System.String KeyMaterial {get;set;}
  KeyName             Property     System.String KeyName {get;set;}
```

키 페어 객체를 `Format-List` cmdlet에 파이프하여 `KeyName`, `KeyFingerprint` 및 `KeyMaterial` 멤버의 값을 봅니다. (읽기 쉽도록 출력을 잘랐습니다.)

```
PS > $myPSKeyPair | Format-List KeyName, KeyFingerprint, KeyMaterial

  KeyName        : myPSKeyPair
  KeyFingerprint : 09:06:70:8e:26:b6:e7:ef:8f:fe:4a:1d:bc:9c:6a:63:11:ac:ad:3c
  KeyMaterial    : ----BEGIN RSA PRIVATE KEY----
                   MIIEogIBAAKCAQEAkK+ANYUS9c7niNjYfaCn6KYj/D0I6djnFoQE...
                   Mz6btoxPcE7EMeH1wySUp8nouAS9xbl9l7+VkD74bN9KmNcPa/Mu...
                   Zyn4vVe0Q5il/MpkrRogHqOB0rigeTeV5Yc3lvO0RFFPu0Kz4kcm...
                   w3Jg8dKsWn0plOpX7V3sRC02KgJIbejQUvBFGi5OQK9bm4tXBIeC...
                   daxKIAQMtDUdmBDrhR1/YMv8itFe5DiLLbq7Ga+FDcS85NstBa3h...
                   iuskGkcvgWkcFQkLmRHRoDpPb+OdFsZtjHZDpMVFmA9tT8EdbkEF...
                   3SrNeqZPsxJJIxOodb3CxLJpg75JU5kyWnb0+sDNVHoJiZCULCr0...
                   GGlLfEgB95KjGIk7zEv2Q7K6s+DHclrDeMZWa7KFNRZuCuX7jssC...
                   xO98abxMr3o3TNU6p1ZYRJEQ0oJr0W+kc+/8SWb8NIwfLtwhmJEy...
                   1BX9X8WFX/A8VLHrT1elrKmLkNECgYEAwltkV1pOJAFhz9p7ZFEv...
                   vvVsPaF0Ev9bk9pqhx269PB5Ox2KokwCagDMMaYvasWobuLmNu/1...
                   lmwRx7KTeQ7W1J3OLgxHA1QNMkip9c4Tb3q9vVc3t/fPf8vwfJ8C...
                   63g6N6rk2FkHZX1E62BgbewUd3eZOS05Ip4VUdvtGcuc8/qa+e5C...
                   KXgyt9nl64pMv+VaXfXkZhdLAdY0Khc9TGB9++VMSG5TrD15YJId...
                   gYALEI7m1jJKpHWAEs0hiemw5VmKyIZpzGstSJsFStERlAjiETDH...
                   YAtnI4J8dRyP9I7BOVOn3wNfIjk85gi1/0Oc+j8S65giLAfndWGR...
                   9R9wIkm5BMUcSRRcDy0yuwKBgEbkOnGGSD0ah4HkvrUkepIbUDTD...
                   AnEBM1cXI5UT7BfKInpUihZi59QhgdK/hkOSmWhlZGWikJ5VizBf...
                   drkBr/vTKVRMTi3lVFB7KkIV1xJxC5E/BZ+YdZEpWoCZAoGAC/Cd...
                   TTld5N6opgOXAcQJwzqoGa9ZMwc5Q9f4bfRc67emkw0ZAAwSsvWR...
                   x3O2duuy7/smTwWwskEWRK5IrUxoMv/VVYaqdzcOajwieNrblr7c...
                   -----END RSA PRIVATE KEY-----
```

`KeyMaterial` 멤버는 키 페어의 프라이빗 키를 저장합니다. 퍼블릭 키는에 저장됩니다 AWS. 퍼블릭 키는 검색할 수 없지만 AWS프라이빗 키의를 퍼블릭 키`KeyFingerprint`의에서 반환된와 비교하여 퍼블릭 키를 확인할 수 AWS 있습니다.

## 키 페어 지문 보기
<a name="get-ec2keypair"></a>

`Get-EC2KeyPair` cmdlet을 사용하여 키 페어의 지문을 볼 수 있습니다.

```
PS > Get-EC2KeyPair -KeyName myPSKeyPair | format-list KeyName, KeyFingerprint

  KeyName        : myPSKeyPair
  KeyFingerprint : 09:06:70:8e:26:b6:e7:ef:8f:fe:4a:1d:bc:9c:6a:63:11:ac:ad:3c
```

## 프라이빗 키 저장
<a name="store-ec2keypair"></a>

프라이빗 키를 파일에 저장하려면 `KeyFingerMaterial` 멤버를 `Out-File` cmdlet에 파이프합니다.

```
PS > $myPSKeyPair.KeyMaterial | Out-File -Encoding ascii myPSKeyPair.pem
```

프라이빗 키를 파일에 쓸 때 `-Encoding ascii`를 지정해야 합니다. 그렇지 않으면, `openssl`과 같은 도구에서 파일을 올바르게 읽지 못할 수도 있습니다. 다음과 같은 명령을 사용하여 결과 파일의 형식이 올바른지 확인할 수 있습니다.

```
PS > openssl rsa -check < myPSKeyPair.pem
```

(`openssl`도구는 AWS Tools for PowerShell 또는에 포함되지 않습니다 AWS SDK for .NET.)

## 키 페어 제거
<a name="remove-ec2keypair"></a>

인스턴스를 시작하고 연결하려면 키 페어가 필요합니다. 키 페어를 사용한 후 제거할 수 있습니다. 에서 퍼블릭 키를 제거하려면 `Remove-EC2KeyPair` cmdlet을 AWS사용합니다. 메시지가 표시되면 `Enter`를 눌러서 키 페어를 제거합니다.

```
PS > Remove-EC2KeyPair -KeyName myPSKeyPair

Confirm
Performing the operation "Remove-EC2KeyPair (DeleteKeyPair)" on target "myPSKeyPair".
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"):
```

`$myPSKeyPair` 변수는 현재 PowerShell 세션에 여전히 존재하며 여전히 키 페어 정보를 포함합니다. `myPSKeyPair.pem` 파일도 존재합니다. 하지만 키 페어의 퍼블릭 키가 AWS에 더 이상 저장되어 있지 않으므로 프라이빗 키는 더 이상 유효하지 않습니다.

# Windows PowerShell을 사용하여 보안 그룹 생성
<a name="pstools-ec2-sg"></a>

 AWS Tools for PowerShell 를 사용하여 보안 그룹을 생성하고 구성할 수 있습니다. 응답으로 보안 그룹의 ID가 반환됩니다.

인스턴스에 연결해야 하는 경우 SSH 트래픽(Linux) 또는 RDP 트래픽(Windows)를 허용하도록 보안 그룹을 구성해야 합니다.

**Topics**
+ [사전 조건](#sg-prerequisites)
+ [EC2-VPC에 대한 보안 그룹 생성](#new-ec2securitygroup-vpc)

## 사전 조건
<a name="sg-prerequisites"></a>

컴퓨터의 퍼블릭 IP 주소를 CIDR 표기법으로 지정해야 합니다. 서비스를 사용하여 로컬 컴퓨터의 퍼블릭 IP 주소를 확인할 수 있습니다. 예를 들면, Amazon에서는 [http://checkip.amazonaws.com/](http://checkip.amazonaws.com/) 또는 [https://checkip.amazonaws.com/](https://checkip.amazonaws.com/) 서비스를 제공합니다. IP 주소를 제공하는 다른 서비스를 찾으려면 "what is my IP address"로 검색하십시오. 고정 IP 주소 없이 ISP를 통해, 또는 방화벽 뒤에서 연결하는 경우에는 클라이언트 컴퓨터가 사용할 수 있는 IP 주소의 범위를 찾아야 합니다.

**주의**  
`0.0.0.0/0`을 지정하면 전 세계의 모든 IP 주소에서 트래픽을 사용하도록 설정됩니다. SSH 및 RDP 프로토콜의 경우, 테스트 환경에서 잠시 사용하는 것은 괜찮지만 프로덕션 환경에서는 안전하지 않습니다. 프로덕션 환경에서는 적절한 개별 IP 주소 또는 주소 범위에서만 액세스 권한을 부여해야 합니다.

## EC2-VPC에 대한 보안 그룹 생성
<a name="new-ec2securitygroup-vpc"></a>

**주의**  
EC2-Classic은 2022년 8월 15일에 사용 중지되었습니다. EC2-Classic에서 VPC로 마이그레이션하는 것이 좋습니다. 자세한 내용은 블로그 게시물 [EC2-Classic Networking is Retiring – Here’s How to Prepare](https://aws.amazon.com/blogs/aws/ec2-classic-is-retiring-heres-how-to-prepare/)를 참조하세요.

다음 `New-EC2SecurityGroup` 예제에서는 `-VpcId` 매개 변수를 추가하여 지정된 VPC에 대한 보안 그룹을 생성합니다.

```
PS > $groupid = New-EC2SecurityGroup `
    -VpcId "vpc-da0013b3" `
    -GroupName "myPSSecurityGroup" `
    -GroupDescription "EC2-VPC from PowerShell"
```

보안 그룹의 초기 구성을 보려면 `Get-EC2SecurityGroup` cmdlet을 사용합니다. 기본적으로 VPC의 보안 그룹은 모든 아웃바운드 트래픽을 허용하는 아웃바운드 규칙을 포함합니다. 이름으로 EC2-VPC에 대한 보안 그룹을 참조할 수 없습니다.

```
PS > Get-EC2SecurityGroup -GroupId sg-5d293231

OwnerId             : 123456789012
GroupName           : myPSSecurityGroup
GroupId             : sg-5d293231
Description         : EC2-VPC from PowerShell
IpPermissions       : {}
IpPermissionsEgress : {Amazon.EC2.Model.IpPermission}
VpcId               : vpc-da0013b3
Tags                : {}
```

TCP 포트 22(SSH) 및 TCP 포트 3389에서 인바운드 트래픽에 대한 권한을 정의하려면 `New-Object` cmdlet을 사용합니다. 다음 예제 스크립트는 단일 IP 주소 `203.0.113.25/32`에서 TCP 포트 22 및 3389에 대한 사용 권한을 정의합니다.

```
$ip1 = new-object Amazon.EC2.Model.IpPermission 
$ip1.IpProtocol = "tcp" 
$ip1.FromPort = 22 
$ip1.ToPort = 22 
$ip1.IpRanges.Add("203.0.113.25/32") 
$ip2 = new-object Amazon.EC2.Model.IpPermission 
$ip2.IpProtocol = "tcp" 
$ip2.FromPort = 3389 
$ip2.ToPort = 3389 
$ip2.IpRanges.Add("203.0.113.25/32") 
Grant-EC2SecurityGroupIngress -GroupId $groupid -IpPermissions @( $ip1, $ip2 )
```

보안 그룹이 업데이트되었는지 확인하려면 `Get-EC2SecurityGroup` cmdlet을 다시 사용합니다.

```
PS > Get-EC2SecurityGroup -GroupIds sg-5d293231

OwnerId             : 123456789012
GroupName           : myPSSecurityGroup
GroupId             : sg-5d293231
Description         : EC2-VPC from PowerShell
IpPermissions       : {Amazon.EC2.Model.IpPermission}
IpPermissionsEgress : {Amazon.EC2.Model.IpPermission}
VpcId               : vpc-da0013b3
Tags                : {}
```

인바운드 규칙을 보기 위해 이전 명령에서 반환한 컬렉션 개체에서 `IpPermissions` 속성을 검색할 수 있습니다.

```
PS > (Get-EC2SecurityGroup -GroupIds sg-5d293231).IpPermissions

IpProtocol       : tcp
FromPort         : 22
ToPort           : 22
UserIdGroupPairs : {}
IpRanges         : {203.0.113.25/32}

IpProtocol       : tcp
FromPort         : 3389
ToPort           : 3389
UserIdGroupPairs : {}
IpRanges         : {203.0.113.25/32}
```

# Windows PowerShell을 사용하여 Amazon Machine Images 찾기
<a name="pstools-ec2-get-amis"></a>

Amazon EC2 인스턴스를 시작할 때 인스턴스의 템플릿으로 사용할 Amazon Machine Images(AMI)를 지정합니다. 그러나는 최신 업데이트 및 보안 개선 사항을 새 AMIs에 AWS 제공하기 때문에 AWS Windows AMIs의 IDs는 자주 변경됩니다. [Get-EC2Image](https://docs.aws.amazon.com/powershell/v5/reference/items/Get-EC2Image.html) cmdlet을 사용하여 현재 Windows AMIs 찾고 해당 IDs.

## Get-EC2Image
<a name="pstools-ec2-get-image"></a>

`Get-EC2Image` cmdlet은 사용할 수 있는 AMI 목록을 검색합니다.

`-Owner`에서 Amazon이나 사용자에게 속하는 AMI만 검색되도록 `amazon, self` 파라미터와 어레이 값 `Get-EC2Image`를 사용합니다. 이 컨텍스트에서 *사용자*란 cmdlet을 호출하는 데 사용한 자격 증명을 가진 사용자를 지칭합니다.

```
PS > Get-EC2Image -Owner amazon, self
```

`-Filter` 파라미터를 사용하여 결과의 범위를 지정할 수 있습니다. 필터를 지정하려면 `Amazon.EC2.Model.Filter` 유형의 객체를 생성합니다. 예를 들어, 다음 필터를 사용하면 Windows AMI만 표시됩니다.

```
$platform_values = New-Object 'collections.generic.list[string]'
$platform_values.add("windows")
$filter_platform = New-Object Amazon.EC2.Model.Filter -Property @{Name = "platform"; Values = $platform_values}
Get-EC2Image -Owner amazon, self -Filter $filter_platform
```

다음 예에서는 이 cmdlet에서 반환되는 AMI 중 하나를 보여 주며, 이전 명령의 실제 출력은 여러 AMI에 대한 정보를 제공합니다.

```
Architecture        : x86_64
BlockDeviceMappings : {/dev/sda1, xvdca, xvdcb, xvdcc…}
CreationDate        : 2019-06-12T10:41:31.000Z
Description         : Microsoft Windows Server 2019 Full Locale English with SQL Web 2017 AMI provided by Amazon
EnaSupport          : True
Hypervisor          : xen
ImageId             : ami-000226b77608d973b
ImageLocation       : amazon/Windows_Server-2019-English-Full-SQL_2017_Web-2019.06.12
ImageOwnerAlias     : amazon
ImageType           : machine
KernelId            : 
Name                : Windows_Server-2019-English-Full-SQL_2017_Web-2019.06.12
OwnerId             : 801119661308
Platform            : Windows
ProductCodes        : {}
Public              : True
RamdiskId           : 
RootDeviceName      : /dev/sda1
RootDeviceType      : ebs
SriovNetSupport     : simple
State               : available
StateReason         : 
Tags                : {}
VirtualizationType  : hvm
```

**참고**  
버전 4에서는 이름 패턴을 기준으로 AMIs 목록을 필터링하는 `Get-EC2ImageByName` cmdlet을 AWS Tools for PowerShell 제공했습니다. 도구 버전 5의 경우 대신 [Get-SSMLatestEC2Image](https://docs.aws.amazon.com/powershell/v5/reference/items/Get-SSMLatestEC2Image.html) cmdlet을 사용합니다.

# Windows PowerShell을 사용하여 Amazon EC2 인스턴스 시작
<a name="pstools-ec2-launch"></a>

Amazon EC2 인스턴스를 시작하려면 이전 단원에서 생성한 키 페어 및 보안 그룹이 필요합니다. Amazon Machine Images(AMI)의 ID도 필요합니다. 자세한 내용은 다음 설명서를 참조하세요.
+  [키 페어 만들기](pstools-ec2-keypairs.md) 
+  [Windows PowerShell을 사용하여 보안 그룹 생성](pstools-ec2-sg.md) 
+  [Windows PowerShell을 사용하여 Amazon Machine Images 찾기](pstools-ec2-get-amis.md) 

**중요**  
시작하는 인스턴스가 프리 티어에 해당되지 않는 경우 인스턴스를 시작한 후에 요금이 청구되고 유휴 상태를 포함해 인스턴스가 실행된 시간에 대해 과금됩니다.

**Topics**
+ [VPC에서 인스턴스 시작](#new-ec2instance-vpc)
+ [VPC에서 스팟 인스턴스 시작](#new-ec2instance-spot)

## VPC에서 인스턴스 시작
<a name="new-ec2instance-vpc"></a>

**주의**  
EC2-Classic은 2022년 8월 15일에 사용 중지되었습니다. EC2-Classic에서 VPC로 마이그레이션하는 것이 좋습니다. 자세한 내용은 블로그 게시물 [EC2-Classic Networking is Retiring – Here’s How to Prepare](https://aws.amazon.com/blogs/aws/ec2-classic-is-retiring-heres-how-to-prepare/)를 참조하세요.

다음 명령은 지정된 프라이빗 서브넷에서 단일 `m1.small` 인스턴스를 생성합니다. 보안 그룹은 지정된 서브넷에 대해 유효해야 합니다.

```
PS > New-EC2Instance `
    -ImageId ami-c49c0dac `
    -MinCount 1 -MaxCount 1 `
    -KeyName myPSKeyPair `
    -SecurityGroupId sg-5d293231 `
    -InstanceType m1.small `
    -SubnetId subnet-d60013bf

ReservationId   : r-b70a0ef1
OwnerId         : 123456789012
RequesterId     :
Groups          : {}
GroupName       : {}
Instances       : {}
```

처음에는 인스턴스가 `pending` 상태이지만 몇 분 후에 `running` 상태가 됩니다. 인스턴스에 대한 정보를 보려면 `Get-EC2Instance` cmdlet을 사용합니다. 인스턴스가 두 개 이상인 경우 `Filter` 파라미터를 사용하여 예약 ID에 대해 결과를 필터링할 수 있습니다. 먼저 `Amazon.EC2.Model.Filter` 유형의 객체를 생성합니다. 그런 다음 필터를 사용하고 `Instances` 속성을 표시하는 `Get-EC2Instance`을 호출합니다.

```
PS > $reservation = New-Object 'collections.generic.list[string]'
PS > $reservation.add("r-b70a0ef1")
PS > $filter_reservation = New-Object Amazon.EC2.Model.Filter -Property @{Name = "reservation-id"; Values = $reservation}
PS > (Get-EC2Instance -Filter $filter_reservation).Instances

AmiLaunchIndex        : 0
Architecture          : x86_64
BlockDeviceMappings   : {/dev/sda1}
ClientToken           :
EbsOptimized          : False
Hypervisor            : xen
IamInstanceProfile    :
ImageId               : ami-c49c0dac
InstanceId            : i-5203422c
InstanceLifecycle     :
InstanceType          : m1.small
KernelId              :
KeyName               : myPSKeyPair
LaunchTime            : 12/2/2018 3:38:52 PM
Monitoring            : Amazon.EC2.Model.Monitoring
NetworkInterfaces     : {}
Placement             : Amazon.EC2.Model.Placement
Platform              : Windows
PrivateDnsName        :
PrivateIpAddress      : 10.25.1.11
ProductCodes          : {}
PublicDnsName         :
PublicIpAddress       : 198.51.100.245
RamdiskId             :
RootDeviceName        : /dev/sda1
RootDeviceType        : ebs
SecurityGroups        : {myPSSecurityGroup}
SourceDestCheck       : True
SpotInstanceRequestId :
SriovNetSupport       :
State                 : Amazon.EC2.Model.InstanceState
StateReason           :
StateTransitionReason :
SubnetId              : subnet-d60013bf
Tags                  : {}
VirtualizationType    : hvm
VpcId                 : vpc-a01106c2
```

## VPC에서 스팟 인스턴스 시작
<a name="new-ec2instance-spot"></a>

다음 예제 스크립트는 지정된 서브넷에서 스팟 인스턴스를 요청합니다. 보안 그룹은 지정된 서브넷을 포함하는 VPC에 대해 생성된 보안 그룹이어야 합니다.

```
$interface1 = New-Object Amazon.EC2.Model.InstanceNetworkInterfaceSpecification
$interface1.DeviceIndex = 0
$interface1.SubnetId = "subnet-b61f49f0"
$interface1.PrivateIpAddress = "10.0.1.5"
$interface1.Groups.Add("sg-5d293231")
Request-EC2SpotInstance `
    -SpotPrice 0.007 `
    -InstanceCount 1 `
    -Type one-time `
    -LaunchSpecification_ImageId ami-7527031c `
    -LaunchSpecification_InstanceType m1.small `
    -Region us-west-2 `
    -LaunchSpecification_NetworkInterfaces $interface1
```

# AWS Lambda 및 AWS Tools for PowerShell
<a name="pstools-lambda"></a>

[AWSLambdaPSCore](https://www.powershellgallery.com/packages/AWSLambdaPSCore) 모듈을 사용하면 .NET Core 2.1 런타임을 사용하여 PowerShell Core 6.0에서 AWS Lambda 함수를 개발할 수 있습니다. PowerShell 개발자는 Lambda를 사용하여 PowerShell 환경에서 AWS 리소스를 관리하고 자동화 스크립트를 작성할 수 있습니다. Lambda의 PowerShell 지원을 사용하면 Amazon S3 이벤트 또는 Amazon CloudWatch 예약 이벤트 등과 같은 Lambda 이벤트에 대응하여 PowerShell 스크립트 또는 함수를 실행할 수 있습니다. AWSLambdaPSCore 모듈은 PowerShell용 별도의 AWS 모듈이며 AWS Tools for PowerShell,의 일부가 아니며 AWSLambdaPSCore 모듈을 설치해도가 설치되지 않습니다 AWS Tools for PowerShell.

AWSLambdaPSCore 모듈을 설치한 후 사용 가능한 PowerShell cmdlet을 사용하거나 직접 개발하여 서버리스 함수를 작성할 수 있습니다. PowerShell용 AWS Lambda 도구 모듈에는 PowerShell 기반 서버리스 애플리케이션을 위한 프로젝트 템플릿과 프로젝트를 게시할 도구가 포함되어 있습니다 AWS.

AWSLambdaPSCore 모듈 지원은 Lambda를 지원하는 모든 리전에서 사용할 수 있습니다. 지원되는 리전에 대한 자세한 내용은 [AWS 리전 표](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)를 참조하세요.

## 사전 조건
<a name="prerequisites"></a>

AWSLambdaPSCore 모듈을 설치하고 사용하려면 먼저 다음 절차를 수행해야 합니다. 이러한 단계에 대한 자세한 내용은 AWS Lambda 개발자 안내서의 [ PowerShell 개발 환경 설정을](https://docs.aws.amazon.com/lambda/latest/dg/lambda-powershell-setup-dev-environment.html) 참조하세요.
+  **올바른 버전의 PowerShell 설치** – Lambda의 PowerShell 지원은 크로스 플랫폼 PowerShell Core 6.0 릴리스를 기반으로 합니다. Windows, Linux 또는 Mac에서 PowerShell Lambda 함수를 개발할 수 있습니다. 이 버전 이상의 PowerShell이 설치되어 있지 않으면 [Microsoft PowerShell 설명서 웹 사이트](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell)의 지침을 참조하세요.
+  **.NET Core 2.1 SDK 설치** – PowerShell은 .NET Core를 기반으로 하기 때문에 Lambda의 PowerShell 지원은 .NET Core와 PowerShell Lambda 함수 모두에 동일한 .NET Core 2.1 Lambda 런타임을 사용합니다. Lambda PowerShell 게시 cmdlet은 .NET Core 2.1 SDK를 사용하여 Lambda 배포 패키지를 생성합니다. .NET Core 2.1 SDK는 [Microsoft 다운로드 센터](https://www.microsoft.com/net/download)에서 구할 수 있습니다. Runtime이 아닌 SDK를 설치해야 합니다.

## AWSLambdaPSCore 모듈 설치
<a name="install-the-awslambdapscore-module"></a>

사전 요구 사항을 모두 갖췄으면 이제 AWSLambdaPSCore 모듈을 설치할 수 있습니다. PowerShell Core 세션에서 다음 명령을 실행합니다.

```
PS> Install-Module AWSLambdaPSCore -Scope CurrentUser
```

이제 PowerShell에서 Lambda 함수 개발을 시작할 수 있습니다. 시작하는 방법에 대한 자세한 내용은 AWS Lambda 개발자 안내서의 [PowerShell에서 Lambda 함수를 작성하기 위한 프로그래밍 모델](https://docs.aws.amazon.com/lambda/latest/dg/powershell-programming-model.html)을 참조하세요.

## 참고
<a name="see-also"></a>
+  [AWS 개발자 블로그에서 PowerShell Core에 대한 Lambda 지원 발표](https://aws.amazon.com/blogs/developer/announcing-lambda-support-for-powershell-core/) 
+  [PowerShell 갤러리의 AWSLambdaPSCore 모듈](https://www.powershellgallery.com/packages/AWSLambdaPSCore/1.0.0.2) 
+  [PowerShell 개발 환경 설정](https://docs.aws.amazon.com/lambda/latest/dg/lambda-powershell-setup-dev-environment.html) 
+ [AWS GitHub의 Powershell용 Lambda 도구](https://github.com/aws/aws-lambda-dotnet/tree/master/PowerShell)
+  [AWS Lambda 콘솔](https://console.aws.amazon.com/lambda/home) 

# Amazon SQS, Amazon SNS 및 Tools for Windows PowerShell
<a name="pstools-sqs-queue-sns-topic"></a>

이 단원에서는 다음 작업을 수행하는 방법을 보여 주는 예제를 제공합니다.
+ Amazon SQS 대기열을 생성하고 대기열 Amazon 리소스 이름(ARN)을 가져옵니다.
+ Amazon SNS 주제를 생성합니다.
+ 대기열에 메시지를 보낼 수 있도록 SNS 주제에 권한을 부여합니다.
+ SNS 주제에 대한 대기열을 구독합니다.
+ IAM 사용자 또는 AWS 계정에 SNS 주제에 게시하고 SQS 대기열에서 메시지를 읽을 수 있는 권한을 부여합니다.
+ 주제에 대한 메시지를 게시하고 대기열에서 메시지를 읽어 결과를 확인합니다.

## Amazon SQS 대기열 생성 및 대기열 ARN 가져오기
<a name="pstools-create-sqs-queue"></a>

다음 명령은 기본 리전에 SQS 대기열을 생성합니다. 새 대기열의 URL이 출력에 표시됩니다.

```
PS > New-SQSQueue -QueueName myQueue
https://sqs.us-west-2.amazonaws.com/123456789012/myQueue
```

다음 명령은 대기열의 ARN을 검색합니다.

```
PS > Get-SQSQueueAttribute -QueueUrl https://sqs.us-west-2.amazonaws.com/123456789012/myQueue -AttributeName QueueArn
...
QueueARN               : arn:aws:sqs:us-west-2:123456789012:myQueue
...
```

## Amazon SNS 주제 생성
<a name="pstools-create-sns-topic"></a>

다음 명령은 기본 리전에서 SNS 주제를 생성하고 새 주제의 ARN을 반환합니다.

```
PS > New-SNSTopic -Name myTopic
arn:aws:sns:us-west-2:123456789012:myTopic
```

## SNS 주제에 권한 부여
<a name="pstools-permissions-sns-topic"></a>

다음 예제 스크립트는 SQS 대기열과 SNS 주제를 모두 생성하고, SQS 대기열로 메시지를 보낼 수 있도록 SNS 주제에 대한 권한을 부여합니다.

```
# create the queue and topic to be associated
$qurl = New-SQSQueue -QueueName "myQueue"
$topicarn = New-SNSTopic -Name "myTopic"

# get the queue ARN to inject into the policy; it will be returned
# in the output's QueueARN member but we need to put it into a variable
# so text expansion in the policy string takes effect
$qarn = (Get-SQSQueueAttribute -QueueUrl $qurl -AttributeNames "QueueArn").QueueARN

# construct the policy and inject arns
$policy = @"
{
    "Version": "2012-10-17",		 	 	 
    "Statement": {
        "Effect": "Allow",
        "Principal": "*",
        "Action": "SQS:SendMessage",
        "Resource": "$qarn",
        "Condition": { "ArnEquals": { "aws:SourceArn": "$topicarn" } }
    }
}
"@

# set the policy
Set-SQSQueueAttribute -QueueUrl $qurl -Attribute @{ Policy=$policy }
```

## SNS 주제에 대한 대기열을 구독합니다.
<a name="pstools-subscribe-queue-topic"></a>

다음 명령은 SNS 주제 `myTopic`에 대한 대기열 `myQueue`를 구독하고 구독 ID를 반환합니다.

```
PS > Connect-SNSNotification `
    -TopicARN arn:aws:sns:us-west-2:123456789012:myTopic `
    -Protocol SQS `
    -Endpoint arn:aws:sqs:us-west-2:123456789012:myQueue
arn:aws:sns:us-west-2:123456789012:myTopic:f8ff77c6-e719-4d70-8e5c-a54d41feb754
```

## 권한 부여
<a name="pstools-permissions-publish-read"></a>

다음 명령은 `myTopic` 주제에 대한 `sns:Publish` 작업을 수행할 수 있는 권한을 부여합니다.

```
PS > Add-SNSPermission `
    -TopicArn arn:aws:sns:us-west-2:123456789012:myTopic `
    -Label ps-cmdlet-topic `
    -AWSAccountIds 123456789012 `
    -ActionNames publish
```

다음 명령은 대기열 `myQueue`에 대한 `sqs:ReceiveMessage` 및 `sqs:DeleteMessage` 작업을 수행할 수 있는 권한을 부여합니다.

```
PS > Add-SQSPermission `
    -QueueUrl https://sqs.us-west-2.amazonaws.com/123456789012/myQueue `
    -AWSAccountId "123456789012" `
    -Label queue-permission `
    -ActionName SendMessage, ReceiveMessage
```

## 결과 확인
<a name="pstools-verify-publish-read"></a>

다음 명령은 SNS 주제 `myTopic`에 메시지를 게시하여 새 대기열 및 주제를 테스트하고 `MessageId`를 반환합니다.

```
PS > Publish-SNSMessage `
    -TopicArn arn:aws:sns:us-west-2:123456789012:myTopic `
    -Message "Have A Nice Day!"
728180b6-f62b-49d5-b4d3-3824bb2e77f4
```

다음 명령은 SQS 대기열 `myQueue`에서 메시지를 검색하여 표시합니다.

```
PS > Receive-SQSMessage -QueueUrl https://sqs.us-west-2.amazonaws.com/123456789012/myQueue

Attributes             : {}
Body                   : {
                           "Type" : "Notification",
                           "MessageId" : "491c687d-b78d-5c48-b7a0-3d8d769ee91b",
                           "TopicArn" : "arn:aws:sns:us-west-2:123456789012:myTopic",
                           "Message" : "Have A Nice Day!",
                           "Timestamp" : "2019-09-09T21:06:27.201Z",
                           "SignatureVersion" : "1",
                           "Signature" : "llE17A2+XOuJZnw3TlgcXz4C4KPLXZxbxoEMIirelhl3u/oxkWmz5+9tJKFMns1ZOqQvKxk+ExfEZcD5yWt6biVuBb8pyRmZ1bO3hUENl3ayv2WQiQT1vpLpM7VEQN5m+hLIiPFcs
                         vyuGkJReV7lOJWPHnCN+qTE2lId2RPkFOeGtLGawTsSPTWEvJdDbLlf7E0zZ0q1niXTUtpsZ8Swx01X3QO6u9i9qBFt0ekJFZNJp6Avu05hIklb4yoRs1IkbLVNBK/y0a8Yl9lWp7a7EoWaBn0zhCESe7o
                         kZC6ncBJWphX7KCGVYD0qhVf/5VDgBuv9w8T+higJyvr3WbaSvg==",
                           "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-6aad65c2f9911b05cd53efda11f913f9.pem",
                           "UnsubscribeURL" : 
                         "https://sns.us-west-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:123456789012:myTopic:22b77de7-a216-4000-9a23-bf465744ca84"
                         }
MD5OfBody              : 5b5ee4f073e9c618eda3718b594fa257
MD5OfMessageAttributes : 
MessageAttributes      : {}
MessageId              : 728180b6-f62b-49d5-b4d3-3824bb2e77f4
ReceiptHandle          : AQEB2vvk1e5cOKFjeIWJticabkc664yuDEjhucnIOqdVUmie7bX7GiJbl7F0enABUgaI2XjEcNPxixhVc/wfsAJZLNHnl8SlbQa0R/kD+Saqa4OIvfj8x3M4Oh1yM1cVKpYmhAzsYrAwAD5g5FvxNBD6zs
                         +HmXdkax2Wd+9AxrHlQZV5ur1MoByKWWbDbsqoYJTJquCclOgWIak/sBx/daBRMTiVQ4GHsrQWMVHtNC14q7Jy/0L2dkmb4dzJfJq0VbFSX1G+u/lrSLpgae+Dfux646y8yFiPFzY4ua4mCF/SVUn63Spy
                         sHN12776axknhg3j9K/Xwj54DixdsegnrKoLx+ctI+0jzAetBR66Q1VhIoJAq7s0a2MseyOeM/Jjucg6Sr9VUnTWVhV8ErXmotoiEg==
```

# 의 CloudWatch AWS Tools for Windows PowerShell
<a name="pstools-cw"></a>

이 단원에서는 Tools for Windows PowerShell을 사용하여 사용자 지정 지표 데이터를 CloudWatch에 게시하는 방법의 예를 보여 줍니다.

이 예제에서는 PowerShell 세션의 기본 자격 증명 및 기본 리전을 설정했다고 가정합니다.

## CloudWatch 대시보드에 사용자 지정 지표 게시
<a name="pstools-cw-custom-metric-publish"></a>

다음 PowerShell 코드는 CloudWatch `MetricDatum` 객체를 초기화하여 서비스에 게시합니다. [CloudWatch 콘솔](https://console.aws.amazon.com/cloudwatch/home)로 이동하여 이 작업의 결과를 볼 수 있습니다.

```
$dat = New-Object Amazon.CloudWatch.Model.MetricDatum
$dat.Timestamp = (Get-Date).ToUniversalTime()
$dat.MetricName = "New Posts"
$dat.Unit = "Count"
$dat.Value = ".50"
Write-CWMetricData -Namespace "Usage Metrics" -MetricData $dat
```

다음 사항에 유의하세요.
+ `$dat.Timestamp`를 초기화하는 데 사용하는 날짜/시간 정보는 세계시(UTC)로 설정해야 합니다.
+ `$dat.Value`을 초기화하는 데 사용하는 값은 따옴표 안에 문자열 값으로 지정하거나 숫자 값(따옴표 없음)으로 지정할 수 있습니다. 이 예에서는 문자열 값을 보여 줍니다.

## 참고
<a name="see-also"></a>
+  [에서 AWS 서비스 호출 AWS Tools for PowerShell](pstools-using.md) 
+  [AmazonCloudWatchClient.PutMetricData](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/CloudWatch/MCloudWatchPutMetricDataPutMetricDataRequest.html) (.NET SDK 참조)
+  [MetricDatum](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html) (서비스 API 참조)
+  [Amazon CloudWatch 콘솔](https://console.aws.amazon.com/cloudwatch/home) 

# cmdlet에서 ClientConfig 파라미터 사용
<a name="pstools-clientconfig"></a>

`ClientConfig` 파라미터는 서비스에 연결할 때 특정 구성 설정을 지정하는 데 사용할 수 있습니다. 이 파라미터의 가능한 속성은 대부분 AWS 서비스용 APIs로 상속되는 [https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TClientConfig.html](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Runtime/TClientConfig.html) 클래스에 정의됩니다. 단순 상속의 예는 [https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Keyspaces/TKeyspacesConfig.html](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/Keyspaces/TKeyspacesConfig.html) 클래스를 참조하세요. 또한 일부 서비스는 해당 서비스에만 적합한 추가 속성을 정의합니다. 정의된 추가 속성의 예는 [https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/S3/TS3Config.html](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/S3/TS3Config.html) 클래스, 특히 `ForcePathStyle` 속성을 참조하세요.

## `ClientConfig` 파라미터 사용
<a name="clientconfig-operation"></a>

`ClientConfig` 파라미터를 사용하려면 명령줄에서 파라미터를 `ClientConfig` 객체로 지정하거나 PowerShell 스플래팅을 사용하여 파라미터 값 컬렉션을 명령에 단위로 전달할 수 있습니다. 이러한 메서드는 아래 예와 같습니다. 예에서는 `AWS.Tools.S3` 모듈을 설치하여 가져왔고 적절한 권한이 있는 `[default]` 보안 인증 정보 프로필이 있다고 가정합니다.

******`ClientConfig` 객체 정의**

```
$s3Config = New-Object -TypeName Amazon.S3.AmazonS3Config
$s3Config.ForcePathStyle = $true
$s3Config.Timeout = [TimeSpan]::FromMilliseconds(150000)
Get-S3Object -BucketName <BUCKET_NAME> -ClientConfig $s3Config
```

**PowerShell 스플래팅을 사용하여 `ClientConfig` 속성 추가**

```
$params=@{
    ClientConfig=@{
        ForcePathStyle=$true
        Timeout=[TimeSpan]::FromMilliseconds(150000)
    }
    BucketName="<BUCKET_NAME>"
}

Get-S3Object @params
```

## 정의되지 않은 속성 사용
<a name="clientconfig-undefined"></a>

PowerShell 스플랫팅을 사용할 때 존재하지 않는 `ClientConfig` 속성을 지정하면는 런타임까지 오류를 감지하지 AWS Tools for PowerShell 않으며 런타임에는 예외를 반환합니다. 위의 예 수정:

```
$params=@{
    ClientConfig=@{
        ForcePathStyle=$true
        UndefinedProperty="Value"
        Timeout=[TimeSpan]::FromMilliseconds(150000)
    }
    BucketName="<BUCKET_NAME>"
}

Get-S3Object @params
```

다음과 비슷한 예외가 생성됩니다.

```
Cannot bind parameter 'ClientConfig'. Cannot create object of type "Amazon.S3.AmazonS3Config". The UndefinedProperty property was not found for the Amazon.S3.AmazonS3Config object.
```

## 지정 AWS 리전
<a name="clientconfig-region"></a>

`ClientConfig` 파라미터를 사용하여 명령에 AWS 리전 대한를 설정할 수 있습니다. 리전은 `RegionEndpoint` 속성을 통해 설정됩니다. 는 다음 우선 순위에 따라 사용할 리전을 AWS Tools for PowerShell 계산합니다.

1. `-Region` 파라미터

1. `ClientConfig` 파라미터에 전달된 리전

1. PowerShell 세션 상태

1. 공유 AWS `config` 파일

1. 환경 변수

1. Amazon EC2 인스턴스 메타데이터 서비스(활성화된 경우)