

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

# Amazon S3 소스에 대한 EventBridge 규칙 생성(CLI)
<a name="create-cloudtrail-S3-source-cli"></a><a name="proc-cli-event-s3-createtrail"></a>

**AWS CloudTrail 추적을 생성하고 로깅을 활성화하려면**

 AWS CLI 를 사용하여 추적을 생성하려면 다음을 지정하여 **create-trail** 명령을 호출합니다.
+ 추적 이름입니다.
+  AWS CloudTrail에 대한 버킷 정책을 이미 적용한 버킷입니다.

자세한 내용은 [AWS 명령줄 인터페이스를 사용하여 추적 생성을 참조하세요](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail-by-using-the-aws-cli.html).

1. **create-trail** 명령을 호출하고 `--name` 및 `--s3-bucket-name` 파라미터를 포함시킵니다.

   **이렇게 변경하는 이유는 무엇입니까?** 이렇게 하면 S3 소스 버킷에 필요한 CloudTrail 추적이 생성됩니다.

   다음 명령은 `--name` 및 `--s3-bucket-name`을 사용하여 `my-trail`이라는 추적과 `amzn-s3-demo-source-bucket`이라는 버킷을 생성합니다.

   ```
   aws cloudtrail create-trail --name my-trail --s3-bucket-name amzn-s3-demo-source-bucket
   ```

1. **start-logging** 명령을 호출하고 `--name` 파라미터를 포함시킵니다.

   **이렇게 변경하는 이유는 무엇입니까?** 이 명령은 소스 버킷에 대한 CloudTrail 로깅을 시작하고, EventBridge에 이벤트를 전송합니다.

   예제:

   다음 명령은 `--name`을 사용하여 `my-trail`이라는 추적에서 로깅을 시작합니다.

   ```
   aws cloudtrail start-logging --name my-trail
   ```

1. **put-event-selectors** 명령을 호출하고 `--trail-name` 및 `--event-selectors` 파라미터를 포함시킵니다. 이벤트 선택기를 사용하여 추적에서 소스 버킷에 대한 데이터 이벤트를 기록하고 이벤트를 EventBridge 규칙으로 전송하도록 지정합니다.

   **이렇게 변경하는 이유는 무엇입니까?** 이 명령은 이벤트를 필터링합니다.

   예제:

   다음 명령은 `--trail-name` 및 `--event-selectors`를 사용하여 소스 버킷 및 `amzn-s3-demo-source-bucket/myFolder`라는 접두사에 대한 데이터 이벤트 관리를 지정합니다.

   ```
   aws cloudtrail put-event-selectors --trail-name my-trail --event-selectors '[{ "ReadWriteType": "WriteOnly", "IncludeManagementEvents":false, "DataResources": [{ "Type": "AWS::S3::Object", "Values": ["arn:aws:s3:::amzn-s3-demo-source-bucket/myFolder/file.zip"] }] }]'
   ```<a name="proc-cli-event-s3-createrule"></a>

**Amazon S3가 이벤트 소스이고 CodePipeline이 대상인 EventBridge 규칙을 생성하고 권한 정책을 적용하려면**

1. CodePipeline을 사용하여 규칙을 호출하도록 EventBridge에 권한을 부여합니다. 자세한 내용은 [Amazon EventBridge에 대한 리소스 기반 정책 사용](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-use-resource-based.html)을 참조하세요.

   1. 다음 예제를 사용하여 EventBridge가 서비스 역할을 담당하도록 허용하는 신뢰 정책을 생성합니다. 이름을 `trustpolicyforEB.json`로 지정합니다.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "Service": "events.amazonaws.com"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

   1. 다음 명령을 사용하여 `Role-for-MyRule` 역할을 생성한 후 신뢰 정책에 연결합니다.

      **이렇게 변경하는 이유는 무엇입니까?** 이 신뢰 정책을 역할에 추가하면 EventBridge에 대한 권한이 생성됩니다.

      ```
      aws iam create-role --role-name Role-for-MyRule --assume-role-policy-document file://trustpolicyforEB.json
      ```

   1. 이 샘플에서 보이는 것처럼 `MyFirstPipeline`이라는 파이프라인에 대한 권한 정책 JSON을 생성합니다. 권한 정책 이름을 `permissionspolicyforEB.json`으로 지정합니다.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "codepipeline:StartPipelineExecution"
                  ],
                  "Resource": [
                      "arn:aws:codepipeline:us-west-2:111122223333:MyFirstPipeline"
                  ]
              }
          ]
      }
      ```

------

   1. 다음 명령을 사용하여 앞에서 생성한 `Role-for-MyRule` 역할에 새로운 `CodePipeline-Permissions-Policy-for-EB` 권한 정책을 연결합니다.

      ```
      aws iam put-role-policy --role-name Role-for-MyRule --policy-name CodePipeline-Permissions-Policy-For-EB --policy-document file://permissionspolicyforEB.json
      ```

1. **put-rule** 명령을 호출하고 `--name`, `--event-pattern` 및 `--role-arn` 파라미터를 포함시킵니다.

   다음 샘플 명령은 `MyS3SourceRule`이라는 역할 별칭을 생성합니다.

   ```
   aws events put-rule --name "MyS3SourceRule" --event-pattern "{\"source\":[\"aws.s3\"],\"detail-type\":[\"AWS API Call via CloudTrail\"],\"detail\":{\"eventSource\":[\"s3.amazonaws.com\"],\"eventName\":[\"CopyObject\",\"PutObject\",\"CompleteMultipartUpload\"],\"requestParameters\":{\"bucketName\":[\"amzn-s3-demo-source-bucket\"],\"key\":[\"my-key\"]}}}
    --role-arn "arn:aws:iam::ACCOUNT_ID:role/Role-for-MyRule"
   ```

1. CodePipeline을 대상으로 추가하려면 **put-targets** 명령을 호출하고 `--rule` 및 `--targets` 파라미터를 포함합니다.

   다음 명령은 `MyS3SourceRule`이라는 규칙에 대해 대상 `Id`가 숫자 1로 구성됨을 지정하며, 규칙에 대한 대상 목록에서 대상 1로 표시됩니다. 이 명령은 또한 파이프라인에 대한 예제 `ARN`를 지정합니다. 파이프라인은 리포지토리에서 변경이 발생하면 시작됩니다.

   ```
   aws events put-targets --rule MyS3SourceRule --targets Id=1,Arn=arn:aws:codepipeline:us-west-2:80398EXAMPLE:TestPipeline
   ```

1. (선택 사항) 특정 이미지 ID에 대한 소스 재정의로 입력 변환기를 구성하려면 CLI 명령에서 다음 JSON을 사용합니다. 다음 예제에서는 다음과 같은 경우 재정의를 구성합니다.
   + 이 예제에서 `actionName`, `Source`는 소스 이벤트에서 파생되지 않은 파이프라인 생성 시 정의된 동적 값입니다.
   + 이 예제에서 `revisionType`, `S3_OBJECT_VERSION_ID`는 소스 이벤트에서 파생되지 않은 파이프라인 생성 시 정의된 동적 값입니다.
   + 이 예제에서 `revisionValue`, <*revisionValue*>는 소스 이벤트 변수에서 파생됩니다.

   ```
   {
       "Rule": "my-rule",
       "Targets": [
           {
               "Id": "MyTargetId",
               "Arn": "ARN",
               "InputTransformer": {
                   "InputPathsMap": {
                       "revisionValue": "$.detail.object.version-id"
                   },
                   "InputTemplate": {
                       "sourceRevisions": {
                           "actionName": "Source",
                           "revisionType": "S3_OBJECT_VERSION_ID",
                           "revisionValue": "<revisionValue>"
                       }
                   }
               }
           }
       ]
   }
   ```<a name="proc-cli-flag-s3"></a>

**파이프라인의 PollForSourceChanges 파라미터를 편집하려면**
**중요**  
이 방법으로 파이프라인을 생성할 때 명시적으로 false로 설정되지 않은 경우 `PollForSourceChanges` 파라미터 기본값은 true입니다. 이벤트 기반 변경 감지를 추가할 때는 출력에 파라미터를 추가하고 false로 설정하여 폴링을 비활성화해야 합니다. 그렇지 않으면 파이프라인이 단일 소스 변경 시 두 번 시작됩니다. 자세한 내용은 [`PollForSourceChanges` 파라미터의 유효한 설정](PollForSourceChanges-defaults.md)을 참조하세요.

1. **get-pipeline** 명령을 실행하여 파이프라인 구조를 JSON 파일로 복사합니다. 예를 들어, `MyFirstPipeline`라는 파이프라인의 경우 다음 명령을 입력합니다.

   ```
   aws codepipeline get-pipeline --name MyFirstPipeline >pipeline.json
   ```

   이 명령은 아무 것도 반환하지 않지만 생성한 파일이 명령을 실행한 디렉터리에 표시되어야 합니다.

1. 일반 텍스트 편집기에서 JSON 파일을 열고 다음 예에 나와 있는 것처럼 `amzn-s3-demo-source-bucket` 버킷의 `PollForSourceChanges` 파라미터를 `false`로 변경하여 소스 단계를 편집합니다.

   **이렇게 변경하는 이유는 무엇입니까?** 이 파라미터를 `false`로 설정하면 정기적 확인이 비활성화되어 이벤트 기반 변경 탐지만 사용할 수 있습니다.

   ```
   "configuration": {
       "S3Bucket": "amzn-s3-demo-source-bucket",
       "PollForSourceChanges": "false",
       "S3ObjectKey": "index.zip"
   },
   ```

1. **get-pipeline** 명령을 사용하여 검색한 파이프라인 구조로 작업을 수행할 경우, JSON 파일에서 `metadata` 행을 제거해야 합니다. 이렇게 하지 않으면 **update-pipeline** 명령에서 사용할 수 없습니다. `"metadata": { }` 행과, `"created"`, `"pipelineARN"` 및 `"updated"` 필드를 제거합니다.

   예를 들어, 구조에서 다음 행을 삭제합니다.

   ```
   "metadata": {
       "pipelineArn": "arn:aws:codepipeline:region:account-ID:pipeline-name",
       "created": "date",
       "updated": "date"
   },
   ```

   파일을 저장합니다.

1. 변경 사항을 적용하려면 파이프라인 JSON 파일을 지정하여 **update-pipeline** 명령을 실행합니다.
**중요**  
파일 이름 앞에 `file://`를 포함해야 합니다. 이 명령에 필수적입니다.

   ```
   aws codepipeline update-pipeline --cli-input-json file://pipeline.json
   ```

   이 명령은 편집한 파이프라인의 전체 구조를 반환합니다.
**참고**  
**update-pipeline** 명령을 실행하면 파이프라인이 중지됩니다. **update-pipeline** 명령을 실행할 때 파이프라인을 통해 개정을 실행하는 중이라면 해당 실행이 중지됩니다. 업데이트된 파이프라인을 통해 해당 개정을 실행하려면 파이프라인을 수동으로 시작해야 합니다. **start-pipeline-execution** 명령을 사용하여 수동으로 파이프라인을 시작합니다.