

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

# 에서 빌드 디버그 AWS CodeBuild
<a name="debug-builds"></a>

AWS CodeBuild는 개발 및 문제 해결 중에 빌드를 디버깅하는 두 가지 방법을 제공합니다. CodeBuild 샌드박스 환경을 사용하여 문제를 조사하고 실시간으로 수정 사항을 검증하거나 AWS Systems Manager Session Manager를 사용하여 빌드 컨테이너에 연결하고 컨테이너 상태를 볼 수 있습니다.

## CodeBuild 샌드박스를 사용하여 빌드 디버그
<a name="debug-codebuild-sandbox"></a>

CodeBuild 샌드박스 환경은 안전하고 격리된 환경에서 대화형 디버그 세션을 제공합니다. AWS Management Console 또는를 통해 환경과 직접 상호 작용하고 AWS CLI, 명령을 실행하고, 단계별로 빌드 프로세스를 검증할 수 있습니다. 비용 효율적인 초당 결제 모델을 사용하며 빌드 환경과 동일한 소스 공급자 및 AWS 서비스와의 기본 통합을 지원합니다. SSH 클라이언트를 사용하거나 통합 개발 환경(IDE)에서 샌드박스 환경에 연결할 수도 있습니다.

CodeBuild 샌드박스 요금에 대한 자세한 내용은 [CodeBuild 요금 설명서](https://aws.amazon.com/codebuild/pricing/#Sandbox)를 참조하세요. 자세한 지침은 [CodeBuild 샌드박스를 사용하여 빌드 디버그](sandbox.md) 설명서를 참조하세요.

## Session Manager를 사용하여 빌드 디버그
<a name="debug-codebuild-session-manager"></a>

AWS Systems Manager Session Manager를 사용하면 실제 실행 환경에서 실행 중인 빌드에 직접 액세스할 수 있습니다. 이 접근 방식을 사용하면 활성 빌드 컨테이너에 연결하고 빌드 프로세스를 실시간으로 검사할 수 있습니다. 파일 시스템을 검사하고, 실행 중인 프로세스를 모니터링하고, 발생하는 문제를 해결할 수 있습니다.

자세한 지침은 [Session Manager를 사용하여 빌드 디버그](session-manager.md) 설명서를 참조하세요.

# CodeBuild 샌드박스를 사용하여 빌드 디버그
<a name="sandbox"></a>

에서는 CodeBuild 샌드박스를 사용하여 사용자 지정 명령을 실행하고 빌드 문제를 해결하여 빌드를 디버깅할 AWS CodeBuild수 있습니다.

**Topics**
+ [사전 조건](#sandbox-prereq)
+ [CodeBuild 샌드박스를 사용하여 빌드 디버그(콘솔)](#sandbox-console)
+ [CodeBuild 샌드박스를 사용하여 빌드 디버그(AWS CLI)](#sandbox-cli)
+ [자습서: SSH를 사용하여 샌드박스에 연결](sandbox-ssh-tutorial.md)
+ [AWS CodeBuild 샌드박스 SSH 연결 문제 해결](sandbox-troubleshooting.md)

## 사전 조건
<a name="sandbox-prereq"></a>

CodeBuild 샌드박스를 사용하기 전에 CodeBuild 서비스 역할에 다음 SSM 정책이 있는지 확인합니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssmmessages:CreateControlChannel",
                "ssmmessages:CreateDataChannel",
                "ssmmessages:OpenControlChannel",
                "ssmmessages:OpenDataChannel"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:StartSession"
            ],
            "Resource": [
                "arn:aws:codebuild:us-east-1:111122223333:build/*",
                "arn:aws:ssm:us-east-1::document/AWS-StartSSHSession"
            ]
        }
    ]
}
```

------

## CodeBuild 샌드박스를 사용하여 빌드 디버그(콘솔)
<a name="sandbox-console"></a>

다음 지침에 따라 명령을 실행하고 콘솔에서 SSH 클라이언트를 CodeBuild 샌드박스에 연결합니다.

### CodeBuild 샌드박스를 사용하여 명령 실행(콘솔)
<a name="sandbox-console.commands"></a>

1. [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home) AWS CodeBuild 콘솔을 엽니다.

1. 탐색 창에서 **프로젝트 빌드**를 선택합니다. 빌드 프로젝트를 선택한 다음 **빌드 디버그**를 선택합니다.  
![\[콘솔의 빌드 디버그 프로젝트 세부 정보 페이지입니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/sandbox-debug-build.png)

1. **명령 실행** 탭에서 사용자 지정 명령을 입력한 다음 **명령 실행**을 선택합니다.  
![\[콘솔의 실행 명령 세부 정보 페이지입니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/debug-build-run.png)

1. 그러면 CodeBuild 샌드박스가 초기화되고 사용자 지정 명령 실행이 시작됩니다. 출력이 완료되면 **출력** 탭에 출력이 표시됩니다.  
![\[콘솔의 실행 명령 출력 페이지입니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/debug-build-run-output.png)

1. 문제 해결이 완료되면 **샌드박스 중지**를 선택하여 샌드박스를 중지할 수 있습니다. 그런 다음 **중지**를 선택하여 샌드박스가 중지되는지 확인합니다.  
![\[샌드박스 중지 대화 상자입니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/stop-sandbox.png)  
![\[콘솔에서 중지된 샌드박스가 있는 실행 명령 출력 페이지입니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/stopped-sandbox.png)

### CodeBuild 샌드박스를 사용하여 SSH 클라이언트에 연결(콘솔)
<a name="sandbox-console.ssh"></a>

1. [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home) AWS CodeBuild 콘솔을 엽니다.

1. 탐색 창에서 **프로젝트 빌드**를 선택합니다. 빌드 프로젝트를 선택한 다음 **빌드 디버그**를 선택합니다.  
![\[콘솔의 빌드 디버그 프로젝트 세부 정보 페이지입니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/sandbox-debug-build.png)

1. **SSH 클라이언트** 탭에서 **샌드박스 시작**을 선택합니다.  
![\[콘솔의 SSH 클라이언트 샌드박스 페이지입니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/ssh-client-sandbox.png)

1. CodeBuild 샌드박스가 실행되기 시작하면 콘솔 지침에 따라 SSH 클라이언트를 샌드박스에 연결합니다.  
![\[콘솔의 SSH 클라이언트 샌드박스 페이지입니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/ssh-client-sandbox-terminal.png)

1. 문제 해결이 완료되면 **샌드박스 중지**를 선택하여 샌드박스를 중지할 수 있습니다. 그런 다음 **중지**를 선택하여 샌드박스가 중지되는지 확인합니다.  
![\[샌드박스 중지 대화 상자입니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/stop-sandbox-2.png)  
![\[콘솔에서 중지된 샌드박스가 있는 실행 명령 출력 페이지입니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/stopped-sandbox-2.png)

## CodeBuild 샌드박스를 사용하여 빌드 디버그(AWS CLI)
<a name="sandbox-cli"></a>

다음 지침에 따라 명령을 실행하고 SSH 클라이언트를 CodeBuild 샌드박스에 연결합니다.

### CodeBuild 샌드박스 시작(AWS CLI)
<a name="sandbox-cli.start-sandbox"></a>

------
#### [ CLI command ]

```
aws codebuild start-sandbox --project-name $PROJECT_NAME
```
+ `--project-name`: CodeBuild 프로젝트 이름

------
#### [ Sample request ]

```
aws codebuild start-sandbox --project-name "project-name"
```

------
#### [ Sample response ]

```
{
    "id": "project-name",
    "arn": "arn:aws:codebuild:us-west-2:962803963624:sandbox/project-name",
    "projectName": "project-name",
    "requestTime": "2025-02-06T11:24:15.560000-08:00",
    "status": "QUEUED",
    "source": {
        "type": "S3",
        "location": "arn:aws:s3:::cofa-e2e-test-1-us-west-2-beta-default-build-sources/eb-sample-jetty-v4.zip",
        "insecureSsl": false
    },
    "environment": {
        "type": "LINUX_CONTAINER",
        "image": "aws/codebuild/standard:6.0",
        "computeType": "BUILD_GENERAL1_SMALL",
        "environmentVariables": [{
                "name": "foo",
                "value": "bar",
                "type": "PLAINTEXT"
            },
            {
                "name": "bar",
                "value": "baz",
                "type": "PLAINTEXT"
            }
        ],
        "privilegedMode": false,
        "imagePullCredentialsType": "CODEBUILD"
    },
    "timeoutInMinutes": 10,
    "queuedTimeoutInMinutes": 480,
    "logConfig": {
        "cloudWatchLogs": {
            "status": "ENABLED",
            "groupName": "group",
            "streamName": "stream"
        },
        "s3Logs": {
            "status": "ENABLED",
            "location": "codefactory-test-pool-1-us-west-2-beta-default-build-logs",
            "encryptionDisabled": false
        }
    },
    "encryptionKey": "arn:aws:kms:us-west-2:962803963624:alias/SampleEncryptionKey",
    "serviceRole": "arn:aws:iam::962803963624:role/BuildExecutionServiceRole",
    "currentSession": {
        "id": "0103e0e7-52aa-4a3d-81dd-bfc27226fa54",
        "currentPhase": "QUEUED",
        "status": "QUEUED",
        "startTime": "2025-02-06T11:24:15.626000-08:00",
        "logs": {
            "groupName": "group",
            "streamName": "stream/0103e0e7-52aa-4a3d-81dd-bfc27226fa54",
            "deepLink": "https://console.aws.amazon.com/cloudwatch/home?region=us-west-2#logsV2:log-groups/log-group/group/log-events/stream$252F0103e0e7-52aa-4a3d-81dd-bfc27226fa54",
            "s3DeepLink": "https://s3.console.aws.amazon.com/s3/object/codefactory-test-pool-1-us-west-2-beta-default-build-logs/0103e0e7-52aa-4a3d-81dd-bfc27226fa54.gz?region=us-west-2",
            "cloudWatchLogsArn": "arn:aws:logs:us-west-2:962803963624:log-group:group:log-stream:stream/0103e0e7-52aa-4a3d-81dd-bfc27226fa54",
            "s3LogsArn": "arn:aws:s3:::codefactory-test-pool-1-us-west-2-beta-default-build-logs/0103e0e7-52aa-4a3d-81dd-bfc27226fa54.gz",
            "cloudWatchLogs": {
                "status": "ENABLED",
                "groupName": "group",
                "streamName": "stream"
            },
            "s3Logs": {
                "status": "ENABLED",
                "location": "codefactory-test-pool-1-us-west-2-beta-default-build-logs",
                "encryptionDisabled": false
            }
        }
    }
}
```

------

### 샌드박스 상태에 대한 정보 가져오기(AWS CLI)
<a name="sandbox-cli.batch-get-sandboxes"></a>

------
#### [ CLI command ]

```
aws codebuild batch-get-sandboxes --ids $SANDBOX_IDs
```

------
#### [ Sample request ]

```
aws codebuild stop-sandbox --id "arn:aws:codebuild:us-west-2:962803963624:sandbox/project-name"
```
+ `--ids`: `sandboxIds` 또는 `sandboxArns`의 쉼표로 구분된 값 목록.

샌드박스 ID 또는 샌드박스 ARN을 제공할 수 있습니다.
+ 샌드박스 ID: `<codebuild-project-name>:<UUID>`

  예를 들어 `project-name:d25be134-05cb-404a-85da-ac5f85d2d72c`입니다.
+ 샌드박스 ARN: arn:aws:codebuild:*<region>*:*<account-id>*:sandbox/*<codebuild-project-name>*:*<UUID>*

  예를 들어 `arn:aws:codebuild:us-west-2:962803963624:sandbox/project-name:d25be134-05cb-404a-85da-ac5f85d2d72c`입니다.

------
#### [ Sample response ]

```
{
    "sandboxes": [{
        "id": "project-name",
        "arn": "arn:aws:codebuild:us-west-2:962803963624:sandbox/project-name",
        "projectName": "project-name",
        "requestTime": "2025-02-06T11:24:15.560000-08:00",
        "endTime": "2025-02-06T11:39:21.587000-08:00",
        "status": "STOPPED",
        "source": {
            "type": "S3",
            "location": "arn:aws:s3:::cofa-e2e-test-1-us-west-2-beta-default-build-sources/eb-sample-jetty-v4.zip",
            "insecureSsl": false
        },
        "environment": {
            "type": "LINUX_CONTAINER",
            "image": "aws/codebuild/standard:6.0",
            "computeType": "BUILD_GENERAL1_SMALL",
            "environmentVariables": [{
                    "name": "foo",
                    "value": "bar",
                    "type": "PLAINTEXT"
                },
                {
                    "name": "bar",
                    "value": "baz",
                    "type": "PLAINTEXT"
                }
            ],
            "privilegedMode": false,
            "imagePullCredentialsType": "CODEBUILD"
        },
        "timeoutInMinutes": 10,
        "queuedTimeoutInMinutes": 480,
        "logConfig": {
            "cloudWatchLogs": {
                "status": "ENABLED",
                "groupName": "group",
                "streamName": "stream"
            },
            "s3Logs": {
                "status": "ENABLED",
                "location": "codefactory-test-pool-1-us-west-2-beta-default-build-logs",
                "encryptionDisabled": false
            }
        },
        "encryptionKey": "arn:aws:kms:us-west-2:962803963624:alias/SampleEncryptionKey",
        "serviceRole": "arn:aws:iam::962803963624:role/BuildExecutionServiceRole",
        "currentSession": {
            "id": "0103e0e7-52aa-4a3d-81dd-bfc27226fa54",
            "currentPhase": "COMPLETED",
            "status": "STOPPED",
            "startTime": "2025-02-06T11:24:15.626000-08:00",
            "endTime": "2025-02-06T11:39:21.600000-08:00",
            "phases": [{
                    "phaseType": "SUBMITTED",
                    "phaseStatus": "SUCCEEDED",
                    "startTime": "2025-02-06T11:24:15.577000-08:00",
                    "endTime": "2025-02-06T11:24:15.606000-08:00",
                    "durationInSeconds": 0
                },
                {
                    "phaseType": "QUEUED",
                    "phaseStatus": "SUCCEEDED",
                    "startTime": "2025-02-06T11:24:15.606000-08:00",
                    "endTime": "2025-02-06T11:24:16.067000-08:00",
                    "durationInSeconds": 0
                },
                {
                    "phaseType": "PROVISIONING",
                    "phaseStatus": "SUCCEEDED",
                    "startTime": "2025-02-06T11:24:16.067000-08:00",
                    "endTime": "2025-02-06T11:24:20.519000-08:00",
                    "durationInSeconds": 4,
                    "contexts": [{
                        "statusCode": "",
                        "message": ""
                    }]
                },
                {
                    "phaseType": "DOWNLOAD_SOURCE",
                    "phaseStatus": "SUCCEEDED",
                    "startTime": "2025-02-06T11:24:20.519000-08:00",
                    "endTime": "2025-02-06T11:24:22.238000-08:00",
                    "durationInSeconds": 1,
                    "contexts": [{
                        "statusCode": "",
                        "message": ""
                    }]
                },
                {
                    "phaseType": "RUNNING_SANDBOX",
                    "phaseStatus": "TIMED_OUT",
                    "startTime": "2025-02-06T11:24:22.238000-08:00",
                    "endTime": "2025-02-06T11:39:21.560000-08:00",
                    "durationInSeconds": 899,
                    "contexts": [{
                        "statusCode": "BUILD_TIMED_OUT",
                        "message": "Build has timed out. "
                    }]
                },
                {
                    "phaseType": "COMPLETED",
                    "startTime": "2025-02-06T11:39:21.560000-08:00"
                }
            ],
            "logs": {
                "groupName": "group",
                "streamName": "stream/0103e0e7-52aa-4a3d-81dd-bfc27226fa54",
                "deepLink": "https://console.aws.amazon.com/cloudwatch/home?region=us-west-2#logsV2:log-groups/log-group/group/log-events/stream$252F0103e0e7-52aa-4a3d-81dd-bfc27226fa54",
                "s3DeepLink": "https://s3.console.aws.amazon.com/s3/object/codefactory-test-pool-1-us-west-2-beta-default-build-logs/0103e0e7-52aa-4a3d-81dd-bfc27226fa54.gz?region=us-west-2",
                "cloudWatchLogsArn": "arn:aws:logs:us-west-2:962803963624:log-group:group:log-stream:stream/0103e0e7-52aa-4a3d-81dd-bfc27226fa54",
                "s3LogsArn": "arn:aws:s3:::codefactory-test-pool-1-us-west-2-beta-default-build-logs/0103e0e7-52aa-4a3d-81dd-bfc27226fa54.gz",
                "cloudWatchLogs": {
                    "status": "ENABLED",
                    "groupName": "group",
                    "streamName": "stream"
                },
                "s3Logs": {
                    "status": "ENABLED",
                    "location": "codefactory-test-pool-1-us-west-2-beta-default-build-logs",
                    "encryptionDisabled": false
                }
            }
        }
    }],
    "sandboxesNotFound": []
}
```

------

### 샌드박스 중지(AWS CLI)
<a name="sandbox-cli.stop-sandbox"></a>

------
#### [ CLI command ]

```
aws codebuild stop-sandbox --id $SANDBOX-ID
```
+ `--id`: `sandboxId` 또는 `sandboxArn`

------
#### [ Sample request ]

```
aws codebuild stop-sandbox --id "arn:aws:codebuild:us-west-2:962803963624:sandbox/project-name"
```

------
#### [ Sample response ]

```
{
    "id": "project-name",
    "arn": "arn:aws:codebuild:us-west-2:962803963624:sandbox/project-name",
    "projectName": "project-name",
    "requestTime": "2025-02-06T11:24:15.560000-08:00",
    "status": "STOPPING",
    "source": {
        "type": "S3",
        "location": "arn:aws:s3:::cofa-e2e-test-1-us-west-2-beta-default-build-sources/eb-sample-jetty-v4.zip",
        "insecureSsl": false
    },
    "environment": {
        "type": "LINUX_CONTAINER",
        "image": "aws/codebuild/standard:6.0",
        "computeType": "BUILD_GENERAL1_SMALL",
        "environmentVariables": [{
                "name": "foo",
                "value": "bar",
                "type": "PLAINTEXT"
            },
            {
                "name": "bar",
                "value": "baz",
                "type": "PLAINTEXT"
            }
        ],
        "privilegedMode": false,
        "imagePullCredentialsType": "CODEBUILD"
    },
    "timeoutInMinutes": 10,
    "queuedTimeoutInMinutes": 480,
    "logConfig": {
        "cloudWatchLogs": {
            "status": "ENABLED",
            "groupName": "group",
            "streamName": "stream"
        },
        "s3Logs": {
            "status": "ENABLED",
            "location": "codefactory-test-pool-1-us-west-2-beta-default-build-logs",
            "encryptionDisabled": false
        }
    },
    "encryptionKey": "arn:aws:kms:us-west-2:962803963624:alias/SampleEncryptionKey",
    "serviceRole": "arn:aws:iam::962803963624:role/BuildExecutionServiceRole",
    "currentSession": {
        "id": "0103e0e7-52aa-4a3d-81dd-bfc27226fa54",
        "currentPhase": "RUN_SANDBOX",
        "status": "STOPPING",
        "startTime": "2025-02-06T11:24:15.626000-08:00",
        "phases": [{
                "phaseType": "SUBMITTED",
                "phaseStatus": "SUCCEEDED",
                "startTime": "2025-02-08T14:33:26.144000-08:00",
                "endTime": "2025-02-08T14:33:26.173000-08:00",
                "durationInSeconds": 0
            },
            {
                "phaseType": "QUEUED",
                "phaseStatus": "SUCCEEDED",
                "startTime": "2025-02-08T14:33:26.173000-08:00",
                "endTime": "2025-02-08T14:33:26.702000-08:00",
                "durationInSeconds": 0
            },
            {
                "phaseType": "PROVISIONING",
                "phaseStatus": "SUCCEEDED",
                "startTime": "2025-02-08T14:33:26.702000-08:00",
                "endTime": "2025-02-08T14:33:30.530000-08:00",
                "durationInSeconds": 3,
                "contexts": [{
                    "statusCode": "",
                    "message": ""
                }]
            },
            {
                "phaseType": "DOWNLOAD_SOURCE",
                "phaseStatus": "SUCCEEDED",
                "startTime": "2025-02-08T14:33:30.530000-08:00",
                "endTime": "2025-02-08T14:33:33.478000-08:00",
                "durationInSeconds": 2,
                "contexts": [{
                    "statusCode": "",
                    "message": ""
                }]
            },
            {
                "phaseType": "RUN_SANDBOX",
                "startTime": "2025-02-08T14:33:33.478000-08:00"
            }
        ],
        "logs": {
            "groupName": "group",
            "streamName": "stream/0103e0e7-52aa-4a3d-81dd-bfc27226fa54",
            "deepLink": "https://console.aws.amazon.com/cloudwatch/home?region=us-west-2#logsV2:log-groups/log-group/group/log-events/stream$252F0103e0e7-52aa-4a3d-81dd-bfc27226fa54",
            "s3DeepLink": "https://s3.console.aws.amazon.com/s3/object/codefactory-test-pool-1-us-west-2-beta-default-build-logs/0103e0e7-52aa-4a3d-81dd-bfc27226fa54.gz?region=us-west-2",
            "cloudWatchLogsArn": "arn:aws:logs:us-west-2:962803963624:log-group:group:log-stream:stream/0103e0e7-52aa-4a3d-81dd-bfc27226fa54",
            "s3LogsArn": "arn:aws:s3:::codefactory-test-pool-1-us-west-2-beta-default-build-logs/0103e0e7-52aa-4a3d-81dd-bfc27226fa54.gz",
            "cloudWatchLogs": {
                "status": "ENABLED",
                "groupName": "group",
                "streamName": "stream"
            },
            "s3Logs": {
                "status": "ENABLED",
                "location": "codefactory-test-pool-1-us-west-2-beta-default-build-logs",
                "encryptionDisabled": false
            }
        }
    }
}
```

------

### 명령 실행 시작(AWS CLI)
<a name="sandbox-cli.start-command-execution"></a>

------
#### [ CLI command ]

```
aws codebuild start-command-execution --command $COMMAND --type $TYPE --sandbox-id $SANDBOX-ID
```
+ `--command`: 실행해야 하는 명령
+ `--sandbox-id`: `sandboxId` 또는 `sandboxArn`
+ `--type`: 명령 유형 `SHELL`

------
#### [ Sample request ]

```
aws codebuild start-command-execution --command "echo "Hello World"" --type SHELL --sandbox-id "arn:aws:codebuild:us-west-2:962803963624:sandbox/project-name
```

------
#### [ Sample response ]

```
{
    "id": "e1c658c2-02bb-42a8-9abb-94835241fcd6",
    "sandboxId": "f7126a4a-b0d5-452f-814c-fea73718f805",
    "submitTime": "2025-02-06T20:12:02.683000-08:00",
    "status": "SUBMITTED",
    "command": "echo \"Hello World\"",
    "type": "SHELL",
    "logs": {
        "groupName": "group",
        "streamName": "stream",
        "deepLink": "https://console.aws.amazon.com/cloudwatch/home?region=us-west-2#logsV2:log-groups/log-group/group/log-events/stream",
        "s3DeepLink": "https://s3.console.aws.amazon.com/s3/object/codefactory-test-pool-1-us-west-2-beta-default-build-logs/f7126a4a-b0d5-452f-814c-fea73718f805.gz?region=us-west-2",
        "cloudWatchLogsArn": "arn:aws:logs:us-west-2:962803963624:log-group:group:log-stream:stream",
        "s3LogsArn": "arn:aws:s3:::codefactory-test-pool-1-us-west-2-beta-default-build-logs/f7126a4a-b0d5-452f-814c-fea73718f805.gz",
        "cloudWatchLogs": {
            "status": "ENABLED",
            "groupName": "group",
            "streamName": "stream"
        },
        "s3Logs": {
            "status": "ENABLED",
            "location": "codefactory-test-pool-1-us-west-2-beta-default-build-logs",
            "encryptionDisabled": false
        }
    }
}
```

------

### 명령 실행에 대한 정보 가져오기(AWS CLI)
<a name="sandbox-cli.batch-get-command-executions"></a>

------
#### [ CLI command ]

```
aws codebuild batch-get-command-executions --command-execution-ids $COMMAND-IDs --sandbox-id $SANDBOX-IDs
```
+ `--command-execution-ids`: `commandExecutionIds`의 쉼표로 구분된 값 목록
+ `--sandbox-id`: `sandboxId` 또는 `sandboxArn`

------
#### [ Sample request ]

```
aws codebuild batch-get-command-executions --command-execution-ids"c3c085ed-5a8f-4531-8e95-87d547f27ffd" --sandbox-id "arn:aws:codebuild:us-west-2:962803963624:sandbox/project-name"
```

------
#### [ Sample response ]

```
{
    "commandExecutions": [{
        "id": "c3c085ed-5a8f-4531-8e95-87d547f27ffd",
        "sandboxId": "cd71e456-2a4c-4db4-ada5-da892b0bba05",
        "submitTime": "2025-02-10T20:18:17.118000-08:00",
        "startTime": "2025-02-10T20:18:17.939000-08:00",
        "endTime": "2025-02-10T20:18:17.976000-08:00",
        "status": "SUCCEEDED",
        "command": "echo \"Hello World\"",
        "type": "SHELL",
        "exitCode": "0",
        "standardOutputContent": "Hello World\n",
        "logs": {
            "groupName": "group",
            "streamName": "stream",
            "deepLink": "https://console.aws.amazon.com/cloudwatch/home?region=us-west-2#logsV2:log-groups/log-group/group/log-events/stream",
            "s3DeepLink": "https://s3.console.aws.amazon.com/s3/object/codefactory-test-pool-1-us-west-2-beta-default-build-logs/cd71e456-2a4c-4db4-ada5-da892b0bba05.gz?region=us-west-2",
            "cloudWatchLogsArn": "arn:aws:logs:us-west-2:962803963624:log-group:group:log-stream:stream",
            "s3LogsArn": "arn:aws:s3:::codefactory-test-pool-1-us-west-2-beta-default-build-logs/cd71e456-2a4c-4db4-ada5-da892b0bba05.gz",
            "cloudWatchLogs": {
                "status": "ENABLED",
                "groupName": "group",
                "streamName": "stream"
            },
            "s3Logs": {
                "status": "ENABLED",
                "location": "codefactory-test-pool-1-us-west-2-beta-default-build-logs",
                "encryptionDisabled": false
            }
        }
    }],
    "commandExecutionsNotFound": []
}
```

------

### 샌드박스에 대한 명령 실행 나열(AWS CLI)
<a name="sandbox-cli.list-command-executions-for-sandbox"></a>

------
#### [ CLI command ]

```
aws codebuild list-command-executions-for-sandbox --sandbox-id $SANDBOX-ID --next-token $NEXT_TOKEN --max-results $MAX_RESULTS --sort-order $SORT_ORDER
```
+ `--next-token`: 페이지가 지정된 결과(있는 경우)를 가져오는 다음 토큰. 목록 샌드박스의 이전 실행에서 이 값을 가져옵니다.
+ `--max-results`: (선택 사항) 검색할 최대 샌드박스 레코드 수
+ `--sort-order`: 샌드박스 레코드를 검색해야 하는 순서

------
#### [ Sample request ]

```
aws codebuild list-command-executions-for-sandbox --sandbox-id "arn:aws:codebuild:us-west-2:962803963624:sandbox/project-name"
```

------
#### [ Sample response ]

```
{
    "commandExecutions": [{
            "id": "aad6687e-07bc-45ab-a1fd-f5440229b528",
            "sandboxId": "cd71e456-2a4c-4db4-ada5-da892b0bba05",
            "submitTime": "2025-02-10T20:18:35.304000-08:00",
            "startTime": "2025-02-10T20:18:35.615000-08:00",
            "endTime": "2025-02-10T20:18:35.651000-08:00",
            "status": "FAILED",
            "command": "fail command",
            "type": "SHELL",
            "exitCode": "127",
            "standardErrContent": "/codebuild/output/tmp/script.sh: 4: fail: not found\n",
            "logs": {
                "groupName": "group",
                "streamName": "stream",
                "deepLink": "https://console.aws.amazon.com/cloudwatch/home?region=us-west-2#logsV2:log-groups/log-group/group/log-events/stream",
                "s3DeepLink": "https://s3.console.aws.amazon.com/s3/object/codefactory-test-pool-1-us-west-2-beta-default-build-logs/cd71e456-2a4c-4db4-ada5-da892b0bba05.gz?region=us-west-2",
                "cloudWatchLogsArn": "arn:aws:logs:us-west-2:962803963624:log-group:group:log-stream:stream",
                "s3LogsArn": "arn:aws:s3:::codefactory-test-pool-1-us-west-2-beta-default-build-logs/cd71e456-2a4c-4db4-ada5-da892b0bba05.gz",
                "cloudWatchLogs": {
                    "status": "ENABLED",
                    "groupName": "group",
                    "streamName": "stream"
                },
                "s3Logs": {
                    "status": "ENABLED",
                    "location": "codefactory-test-pool-1-us-west-2-beta-default-build-logs",
                    "encryptionDisabled": false
                }
            }
        },
        {
            "id": "c3c085ed-5a8f-4531-8e95-87d547f27ffd",
            "sandboxId": "cd71e456-2a4c-4db4-ada5-da892b0bba05",
            "submitTime": "2025-02-10T20:18:17.118000-08:00",
            "startTime": "2025-02-10T20:18:17.939000-08:00",
            "endTime": "2025-02-10T20:18:17.976000-08:00",
            "status": "SUCCEEDED",
            "command": "echo \"Hello World\"",
            "type": "SHELL",
            "exitCode": "0",
            "standardOutputContent": "Hello World\n",
            "logs": {
                "groupName": "group",
                "streamName": "stream",
                "deepLink": "https://console.aws.amazon.com/cloudwatch/home?region=us-west-2#logsV2:log-groups/log-group/group/log-events/stream",
                "s3DeepLink": "https://s3.console.aws.amazon.com/s3/object/codefactory-test-pool-1-us-west-2-beta-default-build-logs/cd71e456-2a4c-4db4-ada5-da892b0bba05.gz?region=us-west-2",
                "cloudWatchLogsArn": "arn:aws:logs:us-west-2:962803963624:log-group:group:log-stream:stream",
                "s3LogsArn": "arn:aws:s3:::codefactory-test-pool-1-us-west-2-beta-default-build-logs/cd71e456-2a4c-4db4-ada5-da892b0bba05.gz",
                "cloudWatchLogs": {
                    "status": "ENABLED",
                    "groupName": "group",
                    "streamName": "stream"
                },
                "s3Logs": {
                    "status": "ENABLED",
                    "location": "codefactory-test-pool-1-us-west-2-beta-default-build-logs",
                    "encryptionDisabled": false
                }
            }
        }
    ]
}
```

------

### 샌드박스 나열(AWS CLI)
<a name="sandbox-cli.list-sandboxes"></a>

------
#### [ CLI command ]

```
aws codebuild list-sandboxes --next-token $NEXT_TOKEN --max-results $MAX_RESULTS --sort-order $SORT_ORDER
```

------
#### [ Sample request ]

```
aws codebuild list-sandboxes
```

------
#### [ Sample response ]

```
{
    "ids": [
        "s3-log-project-integ-test-temp173925062814985d64e0f-7880-41df-9a3c-fb6597a266d2:827a5243-0841-4b69-a720-4438796f6967",
        "s3-log-project-integ-test-temp1739249999716bbd438dd-8bb8-47bd-ba6b-0133ac65b3d3:e2fa4eab-73af-42e3-8903-92fddaf9f378",
        "s3-log-project-integ-test-temp17392474779450fbdacc2-2d6e-4190-9ad5-28f891bb7415:cd71e456-2a4c-4db4-ada5-da892b0bba05",
        "s3-log-project-integ-test-temp17392246284164301421c-5030-4fa1-b4d3-ca15e44771c5:9e26ab3f-65e4-4896-a19c-56b1a95e630a",
        "s3-log-project-integ-test-temp173921367319497056d8d-6d8e-4f5a-a37c-a62f5686731f:22d91b06-df1e-4e9c-a664-c0abb8d5920b",
        "s3-log-project-integ-test-temp1739213439503f6283f19-390c-4dc8-95a9-c8480113384a:82cc413e-fc46-47ab-898f-ae23c83a613f",
        "s3-log-project-integ-test-temp1739054385570b1f1ddc2-0a23-4062-bd0c-24e9e4a99b99:c02562f3-2396-42ec-98da-38e3fe5da13a",
        "s3-log-project-integ-test-temp173905400540237dab1ac-1fde-4dfb-a8f5-c0114333dc89:d2f30493-f65e-4fa0-a7b6-08a5e77497b9",
        "s3-log-project-integ-test-temp17390534055719c534090-7bc4-48f1-92c5-34acaec5bf1e:df5f1c8a-f017-43b7-91ba-ad2619e2c059",
        "s3-log-project-integ-test-temp1739052719086a61813cc-ebb9-4db4-9391-7f43cc984ee4:d61917ec-8037-4647-8d52-060349272c4a",
        "s3-log-project-integ-test-temp173898670094078b67edb-c42f-42ed-9db2-4b5c1a5fc66a:ce33dfbc-beeb-4466-8c99-a3734a0392c7",
        "s3-log-project-integ-test-temp17389863425584d21b7cd-32e2-4f11-9175-72c89ecaffef:046dadf0-1f3a-4d51-a2c0-e88361924acf",
        "s3-log-project-integ-test-temp1738985884273977ccd23-394b-46cc-90d3-7ab94cf764dc:0370dc41-9339-4b0a-91ed-51929761b244",
        "s3-log-project-integ-test-temp1738985365972241b614f-8e41-4387-bd25-2b8351fbc9e0:076c392a-9630-47d8-85a9-116aa34edfff",
        "s3-log-project-integ-test-temp1738985043988a51a9e2b-09d6-4d24-9c3c-1e6e21ac9fa8:6ea3949c-435b-4177-aa4d-614d5956244c",
        "s3-log-project-integ-test-temp1738984123354c68b31ad-49d1-4f4b-981d-b66c00565ff6:6c3fff6c-815b-48b5-ada3-737400a6dee8",
        "s3-log-project-integ-test-temp1738977263715d4d5bf6c-370a-48bf-8ea6-905358a6cf92:968a0f54-724a-42d1-9207-6ed854b2fae8",
        "s3-log-project-integ-test-temp173897358796816ce8d7d-2a5e-41ef-855b-4a94a8d2795d:80f9a7ce-930a-402e-934e-d8b511d68b04",
        "s3-log-project-integ-test-temp17389730633301af5e452-0966-467c-b684-4e36d47f568c:cabbe989-2e8a-473c-af25-32edc8c28646",
        "s3-log-project-integ-test-temp1738901503813173fd468-b723-4d7b-9f9f-82e88d17f264:f7126a4a-b0d5-452f-814c-fea73718f805",
        "s3-log-project-integ-test-temp1738890502472c13616fb-bd0f-4253-86cc-28b74c97a0ba:c6f197e5-3a53-45b6-863e-0e6353375437",
        "s3-log-project-integ-test-temp17388903044683610daf3-8da7-43c6-8580-9978432432ce:d20aa317-8838-4966-bbfc-85b908213df1",
        "s3-log-project-integ-test-temp173888857196780b5ab8b-e54b-44fd-a222-c5a374fffe96:ab4b9970-ffae-47a0-b3a8-7b6790008cad",
        "s3-log-project-integ-test-temp1738888336931c11d378d-e74d-49a4-a723-3b92e6f7daac:4922f0e8-9b7d-4119-9c9f-115cd85e703e",
        "s3-log-project-integ-test-temp17388881717651612a397-c23f-4d88-ba87-2773cd3fc0c9:be91c3fc-418e-4feb-8a3a-ba58ff8f4e8a",
        "s3-log-project-integ-test-temp17388879727174c3c62ed-6195-4afb-8a03-59674d0e1187:a48826a8-3c0d-43c5-a1b5-1c98a0f978e9",
        "s3-log-project-integ-test-temp1738885948597cef305e4-b8b4-46b0-a65b-e2d0a7b83294:c050e77d-e3f8-4829-9a60-46149628fe96",
        "s3-log-project-integ-test-temp173888561463001a7d2a8-e4e4-4434-94db-09d3da9a9e17:8c3ac3f5-7111-4297-aec9-2470d3ead873",
        "s3-log-project-integ-test-temp1738869855076eb19cafd-04fe-41bd-8aa0-40826d0c0d27:d25be134-05cb-404a-85da-ac5f85d2d72c",
        "s3-project-integ-test-temp1738868157467148eacfc-d39b-49fc-a137-e55381cd2978:4909557b-c221-4814-b4b6-7d9e93d37c35",
        "s3-project-integ-test-temp1738820926895abec0af2-e33d-473c-9cf4-2122dd9d6876:8f5cf218-71d6-40a4-a4be-6cacebd7765f",
        "s3-project-integ-test-temp173881998877574f969a6-1c2e-4441-b463-ab175b45ce32:04396851-c901-4986-9117-585528e3877f",
        "s3-project-integ-test-temp17388189812309abd2604-29ba-4cf6-b6bf-073207b7db9c:540075c7-f5ec-41e8-9341-2233c09247eb",
        "s3-project-integ-test-temp1738818843474d3ea9ac1-b609-461b-bbdb-2da245c9bc96:865d4c3c-fbfe-4ece-9c92-d0c928341404",
        "s3-project-integ-test-temp1738818542236006e9169-e6d9-4344-9b59-f557e7aec619:1f9ffa87-da15-4290-83e2-eebdd877497b",
        "s3-project-integ-test-temp173881809557486ad11fd-7931-48d7-81d5-499cea52a6bc:c4c2efc4-685f-4e13-8b0f-1ef85ec300b1",
        "s3-project-integ-test-temp173881794103322941020-3f0b-49c3-b836-fcd818ec9484:0344cfba-de48-456d-b2a8-6566bd4a5d6e",
        "s3-project-integ-test-temp1738817680747b93d0d0b-ea16-497f-9559-af25ee6dcfdf:654a3a55-d92a-4dc6-8da8-56fd4d40d7e1",
        "s3-project-integ-test-temp17388174027191255c3da-086c-4270-b047-acac0b7bee0d:b7e82740-2c69-42fc-ab5a-dbf15bc016a1",
        "s3-project-integ-test-temp1738817099799016e7fa3-b9b5-46a2-bcd5-0888c646743f:8705a6a4-79ff-427a-a1c3-85c4e8fe462e",
        "s3-project-integ-test-temp1738816479281bb0c3606-5ebf-4623-bed5-12b60e9d3512:f23fc74b-a981-4835-8e28-375fcd4c99e4",
        "s3-project-integ-test-temp1738816263585c939a133-4d37-482c-9238-1dbff34b7674:ca28e234-0045-4ae6-8732-938b17597f50",
        "s3-project-integ-test-temp173881580873072d18733-8fe4-43b1-83f7-95f25bb27ccf:c6f0f55b-5736-47c7-a3aa-1b8461a6d5ed"
    ]
}
```

------

# 자습서: SSH를 사용하여 샌드박스에 연결
<a name="sandbox-ssh-tutorial"></a>

이 자습서에서는 SSH 클라이언트를 사용하여 CodeBuild 샌드박스에 연결하는 방법을 보여줍니다.

이 자습서를 완료하려면 먼저 다음을 수행해야 합니다.
+ 기존 AWS CodeBuild 프로젝트가 있는지 확인합니다.
+ CodeBuild 프로젝트 역할에 대해 구성된 적절한 IAM 권한을 설정합니다.
+ 로컬 AWS CLI 시스템에를 설치하고 구성합니다.

## 1단계: 샌드박스 시작
<a name="sandbox-ssh-tutorial.start-sandbox"></a>

**콘솔에서 CodeBuild 샌드박스를 시작하려면**

1. [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home) AWS CodeBuild 콘솔을 엽니다.

1. 탐색 창에서 **프로젝트 빌드**를 선택합니다. 빌드 프로젝트를 선택한 다음 **빌드 디버그**를 선택합니다.  
![\[콘솔의 빌드 프로젝트 세부 정보 페이지입니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/project-debug-build.png)

1. **SSH 클라이언트** 탭에서 **샌드박스 시작**을 선택합니다.  
![\[콘솔의 'SSH 클라이언트' 탭과 '샌드박스 시작' 버튼입니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/ssh-client-sandbox.png)

1. 샌드박스 초기화 프로세스에 시간이 걸릴 수 있습니다. 상태가 `RUN_SANDDBOX`로 변경될 때 샌드박스에 연결할 수 있습니다.  
![\[상태가 'RUN_SANDDBOX'로 변경된 후의 SSH 샌드박스 연결입니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/run-sandbox.png)

## 2단계: 로컬 SSH 구성 수정
<a name="sandbox-ssh-tutorial.modify-ssh"></a>

샌드박스에 처음 연결하는 경우 다음 단계를 사용하여 일회성 설정 프로세스를 수행해야 합니다.

**콘솔에서 로컬 SSH 구성을 수정하려면**

1. 운영 체제의 설정 명령을 찾습니다.

1. 로컬 터미널을 연 다음 제공된 명령을 복사하고 실행하여 로컬 SSH 구성을 설정할 수 있도록 스크립트를 다운로드하고 실행합니다. 예를 들어, 운영 체제가 macOS인 경우 다음 명령을 사용합니다.  
![\[콘솔에서 CodeBuild 샌드박스에 대한 SSH 연결을 위한 macOS 명령입니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/modify-ssh-macOS.png)

1. 구성 스크립트는 샌드박스에 연결하는 데 필요한 구성을 추가합니다. 이러한 변경 사항을 수락하라는 메시지가 표시됩니다.

1. 구성에 성공하면 CodeBuild 샌드박스에 대한 새 SSH 구성 항목이 생성됩니다.  
![\[SSH 샌드박스 연결에 성공했습니다.\]](http://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/images/ssh-terminal-success.png)

## 3단계: 샌드박스에 연결
<a name="sandbox-ssh-tutorial.connect-sandbox"></a>

**콘솔에서 로컬 SSH 구성을 수정하려면**

1.  AWS CLI 인증을 구성하고 AWS CLI 사용자에게 `codebuild:StartSandboxConnection` 권한이 있는지 확인합니다. 자세한 내용은 *AWS 명령줄 인터페이스 사용 설명서 버전 1*의 [AWS CLI용 IAM 사용자 자격 증명을 사용하여 인증](https://docs.aws.amazon.com/cli/v1/userguide/cli-authentication-user.html)을 참조하세요.

1. 다음 명령을 사용하여 샌드박스에 연결합니다.

   ```
   ssh codebuild-sandbox-ssh=arn:aws:codebuild:us-east-1:<account-id>:sandbox/<sandbox-id>
   ```
**참고**  
연결 실패 문제를 해결하려면 `-v` 플래그를 사용하여 상세 정보 출력을 활성화합니다. 예를 들어 `ssh -v codebuild-sandbox-ssh=arn:aws:codebuild:us-east-1:<account-id>:sandbox/<sandbox-id>`입니다.  
추가적인 문제 해결 지침은 [AWS CodeBuild 샌드박스 SSH 연결 문제 해결](sandbox-troubleshooting.md)를 참조하세요.

## 4단계: 결과 검토
<a name="sandbox-ssh-tutorial.review-results"></a>

연결되면 빌드 실패를 디버깅하고, 빌드 명령을 테스트하고, 구성 변경을 실험하고, 샌드박스를 사용하여 환경 변수 및 종속성을 확인할 수 있습니다.

# AWS CodeBuild 샌드박스 SSH 연결 문제 해결
<a name="sandbox-troubleshooting"></a>

이 주제의 정보를 활용하면 CodeBuild 샌드박스 SSH 연결 문제를 식별, 진단 및 해결하는 데 도움이 됩니다.

**Topics**
+ [`StartSandboxConnection` `InvalidInputException` SSH가 CodeBuild 샌드박스 환경으로 전환될 때 오류 발생](#sandbox-troubleshooting.invalid-input)
+ [오류: SSH가 CodeBuild 샌드박스 환경으로 전환될 때 '자격 증명을 찾을 수 없음'](#sandbox-troubleshooting.credentials)
+ [`StartSandboxConnection` `AccessDeniedException` SSH가 CodeBuild 샌드박스 환경으로 전환될 때 오류 발생](#sandbox-troubleshooting.access-denied)
+ [오류: SSH가 CodeBuild 샌드박스 환경으로 전환될 때 'ssh: 호스트 이름을 확인할 수 없음'](#sandbox-troubleshooting.hostname)

## `StartSandboxConnection` `InvalidInputException` SSH가 CodeBuild 샌드박스 환경으로 전환될 때 오류 발생
<a name="sandbox-troubleshooting.invalid-input"></a>

**문제:** `ssh codebuild-sandbox-ssh=<sandbox-arn>` 명령을 사용하여 CodeBuild 샌드박스 환경에 연결하려고 하면 다음과 같은 `InvalidInputException` 오류가 발생할 수 있습니다.

```
An error occurred (InvalidInputException) when calling the StartSandboxConnection 
operation: Failed to start SSM session for {sandbox-arn}
User: arn:aws:sts::<account-ID>:assumed-role/<service-role-name>/AWSCodeBuild-<UUID> 
is not authorized to perform: ssm:StartSession on resource.
```

```
An error occurred (InvalidInputException) when calling the StartSandboxConnection 
operation: Failed to start SSM session for 
sandbox <sandbox-arn>: codebuild:<UUID> is not connected.
```

**가능한 원인:**
+ Amazon EC2 Systems Manager Agent 누락: 빌드 이미지에 SSM 에이전트가 제대로 설치되거나 구성되지 않았습니다.
+ 권한 부족: CodeBuild 프로젝트 서비스 역할에 필요한 SSM 권한이 없습니다.

**권장 솔루션:** 빌드에 사용자 지정 이미지를 사용하는 경우 다음을 수행합니다.

1. SSM Agent 설치 자세한 내용은 **에서 [Linux용 Amazon EC2 인스턴스에 수동으로 SSM Agent 설치 및 제거](https://docs.aws.amazon.com/systems-manager/latest/userguide/manually-install-ssm-agent-linux.html)를 참조하세요. SSM Agent는 `3.0.1295.0` 이상 버전이어야 합니다.

1. [https://github.com/aws/aws-codebuild-docker-images/blob/master/ubuntu/standard/7.0/amazon-ssm-agent.json](https://github.com/aws/aws-codebuild-docker-images/blob/master/ubuntu/standard/7.0/amazon-ssm-agent.json) 파일을 이미지의 `/etc/amazon/ssm/` 디렉터리에 복사합니다. 이렇게 하면 SSM Agent에서 **컨테이너 모드**가 활성화됩니다.

1. CodeBuild 프로젝트의 서비스 역할에 다음 권한이 있는지 확인한 다음 샌드박스 환경을 다시 시작합니다.

   ```
   {
      "Effect": "Allow",
         "Action": [
            "ssmmessages:CreateControlChannel",
            "ssmmessages:CreateDataChannel",
            "ssmmessages:OpenControlChannel",
            "ssmmessages:OpenDataChannel"
         ],
         "Resource": "*"
    },
    {
       "Effect": "Allow",
       "Action": [
          "ssm:StartSession"
        ],
        "Resource": [
           "arn:aws:codebuild:region:account-id:build/*",
           "arn:aws:ssm:region::document/AWS-StartSSHSession"
        ]
    }
   ```

## 오류: SSH가 CodeBuild 샌드박스 환경으로 전환될 때 '자격 증명을 찾을 수 없음'
<a name="sandbox-troubleshooting.credentials"></a>

**문제:** `ssh codebuild-sandbox-ssh=<sandbox-arn>` 명령을 사용하여 CodeBuild 샌드박스 환경에 연결하려고 하면 다음과 같은 자격 증명 오류가 발생할 수 있습니다.

```
Unable to locate credentials. You can configure credentials by running 
"aws configure".
```

**가능한 원인:** AWS 자격 증명이 로컬 환경에서 제대로 구성되지 않았습니다.

**권장 솔루션:** *AWS 버전 2용 명령줄 인터페이스 사용 설명서*의 공식 설명서: [에 대한 설정 구성 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)에 따라 AWS CLI 자격 증명을 구성합니다.

## `StartSandboxConnection` `AccessDeniedException` SSH가 CodeBuild 샌드박스 환경으로 전환될 때 오류 발생
<a name="sandbox-troubleshooting.access-denied"></a>

**문제:** `ssh codebuild-sandbox-ssh=<sandbox-arn>` 명령을 사용하여 CodeBuild 샌드박스 환경에 연결하려고 하면 다음과 같은 권한 오류가 발생할 수 있습니다.

```
An error occurred (AccessDeniedException) when calling the StartSandboxConnection 
operation: 
User: arn:aws:sts::account-id:assumed-role/role-name
is not authorized to perform: codebuild:StartSandboxConnection on resource: 
sandbox-arn
because no identity-based policy allows the codebuild:StartSandboxConnection action
```

**가능한 원인:** 자격 AWS 증명에이 작업을 수행하는 데 필요한 CodeBuild 권한이 없습니다.

**권장 솔루션:** 자격 AWS CLI 증명과 연결된 IAM 사용자 또는 역할에 다음 권한이 있는지 확인합니다.

```
{
    "Effect": "Allow",
    "Action": [
       "codebuild:StartSandboxConnection"
     ],
     "Resource": [
        "arn:aws:codebuild:region:account-id:sandbox/*"
     ]
}
```

## 오류: SSH가 CodeBuild 샌드박스 환경으로 전환될 때 'ssh: 호스트 이름을 확인할 수 없음'
<a name="sandbox-troubleshooting.hostname"></a>

**문제:** `ssh codebuild-sandbox-ssh=<sandbox-arn>` 명령을 사용하여 CodeBuild 샌드박스 환경에 연결하려고 하면 다음과 같은 호스트 이름 확인 오류가 발생합니다.

```
ssh: Could not resolve hostname
```

**가능한 원인:** 이 오류는 일반적으로 로컬 환경에서 필요한 CodeBuild 샌드박스 연결 스크립트가 제대로 실행되지 않은 경우에 발생합니다.

**권장 솔루션**

1. CodeBuild 샌드박스 연결 스크립트를 다운로드합니다.

1. 터미널에서 스크립트를 실행하여 필요한 SSH 구성을 설정합니다.

1. 샌드박스 환경에 대한 SSH 연결을 다시 시도합니다.

# Session Manager를 사용하여 빌드 디버그
<a name="session-manager"></a>

에서 실행 중인 빌드를 일시 중지한 다음 AWS Systems Manager 세션 관리자를 사용하여 빌드 컨테이너에 연결하고 컨테이너의 상태를 볼 AWS CodeBuild수 있습니다.

**참고**  
이 기능은 Windows 환경에서는 제공되지 않습니다.

**Topics**
+ [사전 조건](#ssm.prerequisites)
+ [빌드 일시 중지](#ssm-pause-build)
+ [빌드를 시작합니다.](#ssm-start-build)
+ [빌드 컨테이너에 연결](#ssm-connect)
+ [빌드 재개](#ssm-resume-build)

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

Session Manager를 빌드 세션과 함께 사용할 수 있게 하려면 빌드의 세션 연결을 활성화해야 합니다. 다음과 같은 두 가지 사전 요구 사항이 있습니다.
+ CodeBuild Linux 표준 큐레이트된 이미지에는 이미 SSM Agent가 설치되어 있고 SSM Agent 컨테이너 모드가 활성화되어 있습니다.

  빌드에 사용자 지정 이미지를 사용하는 경우 다음을 수행하세요.

  1. SSM Agent 설치 자세한 내용은 AWS Systems Manager 사용 설명서의 [Linux용 EC2 인스턴스에 수동으로 SSM Agent 설치](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-manual-agent-install.html)를 참조하세요. SSM Agent는 3.0.1295.0 이상 버전이어야 합니다.

  1. [https://github.com/aws/aws-codebuild-docker-images/blob/master/ubuntu/standard/5.0/amazon-ssm-agent.json](https://github.com/aws/aws-codebuild-docker-images/blob/master/ubuntu/standard/5.0/amazon-ssm-agent.json) 파일을 이미지의 `/etc/amazon/ssm/` 디렉터리에 복사합니다. 이렇게 하면 SSM 에이전트에서 컨테이너 모드가 활성화됩니다.
**참고**  
이 기능이 예상대로 작동하려면 사용자 지정 이미지에 최근 업데이트한 SSM 에이전트가 필요합니다.
+ CodeBuild 서비스 역할에는 다음과 같은 SSM 정책이 있어야 합니다.

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

****  

  ```
  {
     "Version":"2012-10-17",		 	 	  
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
            "ssmmessages:CreateControlChannel",
            "ssmmessages:CreateDataChannel",
            "ssmmessages:OpenControlChannel",
            "ssmmessages:OpenDataChannel"
         ],
         "Resource": "*"
       }
     ]
  }
  ```

------

  빌드를 시작할 때 CodeBuild 콘솔이 이 정책을 서비스 역할에 자동으로 연결하도록 할 수 있습니다. 또는 이 정책을 서비스 역할에 수동으로 연결할 수도 있습니다.
+ Systems Manager 기본 설정에서 **감사 및 로깅 세션 활동**을 활성화한 경우 CodeBuild 서비스 역할에도 추가 권한이 있어야 합니다. 권한은 로그가 저장되는 위치에 따라 다릅니다.  
CloudWatch Logs  
CloudWatch Logs를 사용하여 로그를 저장하는 경우 CodeBuild 서비스 역할에 다음 권한을 추가합니다.    
****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": "logs:DescribeLogGroups",
              "Resource": "arn:aws:logs:us-east-1:111122223333:log-group:*:*"
          },
          {
              "Effect": "Allow",
              "Action": [
                  "logs:CreateLogStream",
                  "logs:PutLogEvents"
              ],
              "Resource": "arn:aws:logs:us-east-1:111122223333:log-group:MyLogGroup:*"
          }
      ]
  }
  ```  
Amazon S3  
Amazon S3를 사용하여 로그를 저장하는 경우 CodeBuild 서비스 역할에 다음 권한을 추가합니다.    
****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "s3:GetEncryptionConfiguration",
          "s3:PutObject"
        ],
        "Resource": [
          "arn:aws:s3:::<bucket-name>",
          "arn:aws:s3:::<bucket-name>/*"
        ]
      }
    ]
  }
  ```

  자세한 내용은AWS Systems Manager 사용 설명서의 [세션 활동 감사 및 로깅](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-logging-auditing.html)을 참조하세요.**

## 빌드 일시 중지
<a name="ssm-pause-build"></a>

빌드를 일시 중지하려면 buildspec 파일의 모든 빌드 단계에 **codebuild-breakpoint** 명령을 삽입합니다. 이 시점에서 빌드가 일시 중지되므로 빌드 컨테이너에 연결하여 컨테이너를 현재 상태로 볼 수 있습니다.

예를 들어, buildspec 파일의 빌드 단계에 다음을 추가합니다.

```
phases:
  pre_build:
    commands:
      - echo Entered the pre_build phase...
      - echo "Hello World" > /tmp/hello-world
      - codebuild-breakpoint
```

이 코드는 `/tmp/hello-world` 파일을 생성한 다음, 이 시점에서 빌드를 일시 중지합니다.

## 빌드를 시작합니다.
<a name="ssm-start-build"></a>

Session Manager를 빌드 세션과 함께 사용할 수 있게 하려면 빌드의 세션 연결을 활성화해야 합니다. 이렇게 하려면 빌드를 시작할 때 다음 절차를 따르세요.

1. [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home) AWS CodeBuild 콘솔을 엽니다.

1. 탐색 창에서 **프로젝트 빌드**를 선택합니다. 빌드 프로젝트를 선택한 다음, **재정의로 빌드 시작**을 선택합니다.

1. **Advanced build overrides(고급 빌드 재정의)**를 선택합니다.

1. **환경** 섹션에서 **세션 연결 활성화** 옵션을 선택합니다. 이 옵션을 선택하지 않으면 **codebuild-breakpoint** 및 **codebuild-resume** 명령이 모두 무시됩니다.

1. 다른 사항을 원하는 대로 변경하고 **빌드 시작**을 선택합니다.

1. 콘솔에서 빌드 상태를 모니터링합니다. 세션을 사용할 수 있게 되면 **빌드 상태** 섹션에 **AWS Session Manager** 링크가 나타납니다.

## 빌드 컨테이너에 연결
<a name="ssm-connect"></a>

다음 두 방법 중 하나로 빌드 컨테이너에 연결할 수 있습니다.

CodeBuild 콘솔  
웹 브라우저에서 **AWS Session Manager** 링크를 열어 빌드 컨테이너에 연결합니다. 빌드 컨테이너를 탐색하고 제어할 수 있는 터미널 세션이 열립니다.

AWS CLI  
이 절차를 수행하려면 로컬 컴퓨터에 Session Manager 플러그인이 설치되어 있어야 합니다. 자세한 내용은 AWS Systems Manager 사용 설명서[의 AWS CLI용 세션 관리자 플러그인 설치를](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html) 참조하세요.

1. 빌드 ID로 **batch-get-builds** API를 호출하여 세션 대상 식별자를 비롯한 빌드 관련 정보를 가져옵니다. 세션 대상 식별자 속성 이름은 `aws` 명령의 출력 유형에 따라 달라집니다. 바로 이 때문에 `--output json`이 명령에 추가된 것입니다.

   ```
   aws codebuild batch-get-builds --ids <buildID> --region <region> --output json
   ```

1. `sessionTarget` 속성 값을 복사합니다. `sessionTarget` 속성 이름은 `aws` 명령의 출력 유형에 따라 달라질 수 있습니다. 바로 이 때문에 `--output json`이 이전 단계의 명령에 추가된 것입니다.

1. 다음 명령을 사용하여 빌드 컨테이너에 연결합니다.

   ```
   aws ssm start-session --target <sessionTarget> --region <region>
   ```

이 예제에서는 `/tmp/hello-world` 파일이 존재하고 텍스트 `Hello World`가 포함되어 있는지 확인하세요.

## 빌드 재개
<a name="ssm-resume-build"></a>

빌드 컨테이너 검사를 마친 후 컨테이너 쉘에서 **codebuild-resume** 명령을 실행합니다.

```
$ codebuild-resume
```