

# 소스에서 AWS CLI 빌드 및 설치
<a name="getting-started-source-install"></a>

이 주제에서는 지원되는 운영 체제에서 AWS Command Line Interface(AWS CLI)의 최신 릴리스를 설치하거나 업데이트하는 방법을 설명합니다.

AWS CLI의 최신 릴리스에 대한 자세한 내용은 GitHub에서 [AWS CLI 버전 2 변경 로그](https://raw.githubusercontent.com/aws/aws-cli/v2/CHANGELOG.rst)를 참조하세요.

**중요**  
AWS CLI 버전 1과 2는 동일한 `aws` 명령 이름을 사용합니다. 이전에 AWS CLI 버전 1을 설치한 경우 [AWS CLI 버전 2의 마이그레이션 가이드](cliv2-migration.md) 섹션을 참조하세요.

**Topics**
+ [소스에서 빌드하는 이유](#source-getting-started-install-why)
+ [빠른 단계](#source-getting-started-install-quicksteps)
+ [1단계: 모든 요구 사항 구성](#source-getting-started-install-reqs)
+ [2단계: AWS CLI 소스 설치 구성](#source-getting-started-install-config)
+ [3단계: AWS CLI 빌드](#source-getting-started-install-build)
+ [4단계: AWS CLI 설치](#source-getting-started-install-instructions)
+ [5단계: AWS CLI 설치 확인](#source-getting-started-install-verify)
+ [워크플로우 예시](#source-getting-started-install-workflows)
+ [AWS CLI 설치 및 제거 오류 문제 해결](#source-install-tshoot)
+ [다음 단계](#source-install-next-steps)

## 소스에서 빌드하는 이유
<a name="source-getting-started-install-why"></a>

AWS CLI는 대부분의 플랫폼 및 환경에서 [사전 빌드된 설치 프로그램](getting-started-install.md)과 도커 이미지로 제공됩니다.

일반적으로 이러한 설치 프로그램은 대부분의 사용 사례를 지원합니다. 소스에서 설치하기 위한 지침은 설치 프로그램이 지원하지 않는 사용 사례에 도움을 주기 위한 것입니다. 이러한 사용 사례에는 다음이 포함됩니다.
+ 사전 빌드된 설치 프로그램이 사용자 환경을 지원하지 않습니다. 예를 들어 ARM 32비트는 사전 빌드된 설치 프로그램에서 지원되지 않습니다.
+ 사전 빌드된 설치 프로그램에 사용자 환경에 없는 종속 항목이 있습니다. 예를 들어 Alpine Linux는 [https://musl.libc.org/](https://musl.libc.org/)을 사용하지만 현재 설치 프로그램에는 `glibc`가 필요하므로 사전 빌드된 설치 프로그램이 즉시 작동하지 않습니다.
+ 사전 빌드된 설치 프로그램에 사용자 환경에서 액세스를 제한하는 리소스가 필요합니다. 예를 들어 보안이 강화된 시스템은 공유 메모리에 대한 권한을 부여하지 않을 수 있습니다. 이는 고정된 `aws` 설치 프로그램에 필요합니다.
+ 사전 빌드된 설치 프로그램은 패키지 관리자의 유지 관리 프로그램을 차단하는 경우가 있습니다. 코드 및 패키지의 빌드 프로세스를 완전히 제어하는 것이 권장되기 때문입니다. 소스에서 빌드하면 배포 유지 관리 프로그램이 보다 간소화된 프로세스를 통해 AWS CLI를 최신 상태로 유지할 수 있습니다. 유지 관리 프로그램을 활성화하면 타사 패키지 관리자(예: `brew`, `yum`, `apt`)에서 설치할 때 고객에게 최신 버전의 AWS CLI가 제공됩니다.
+ AWS CLI 기능을 패치하는 고객은 소스에서 AWS CLI를 빌드하고 설치해야 합니다. 이는 AWS CLI GitHub 리포지토리에 변경 사항을 제공하기 전에 소스에 대한 변경 사항을 테스트하려는 커뮤니티 구성원에게 특히 중요합니다.

## 빠른 단계
<a name="source-getting-started-install-quicksteps"></a>

**참고**  
모든 코드 예제는 소스 디렉터리의 루트에서 실행되는 것으로 가정합니다.

소스에서 AWS CLI를 빌드하고 설치하려면 이 섹션의 단계를 따릅니다. AWS CLI는 [GNU Autotools](https://www.gnu.org/software/automake/faq/autotools-faq.html)를 활용하여 소스에서 설치됩니다. 가장 단순한 경우로, AWS CLI GitHub 리포지토리의 루트에서 기본 예제 명령을 실행하여 소스에서 AWS CLI를 설치할 수 있습니다.



1. [사용자 환경에 대한 모든 요구 사항을 구성합니다.](#source-getting-started-install-reqs) 여기에는 [GNU Autotools](https://www.gnu.org/software/automake/faq/autotools-faq.html) 생성 파일을 실행할 수 있도록 하는 것과 Python 3.8 이상을 설치하는 것이 포함됩니다.

1. 터미널에서 AWS CLI 소스 폴더의 최상위 수준으로 이동하여 `./configure` 명령을 실행합니다. 이 명령은 시스템에서 필요한 모든 종속 항목을 확인하고 감지 및 지정된 구성을 기반으로 AWS CLI를 빌드 및 설치하기 위한 `Makefile`을 생성합니다.

------
#### [ Linux and macOS ]

   다음 `./configure` 명령 예제는 기본 설정을 사용하여 AWS CLI에 대한 빌드 구성을 설정합니다.

   ```
   $ ./configure
   ```

------
#### [ Windows PowerShell ]

   MSYS2 호출 명령을 실행하기 전에 현재 작업 디렉터리를 보존해야 합니다.

   ```
   PS C:\> $env:CHERE_INVOKING = 'yes'
   ```

   또한 다음 `./configure` 명령 예제를 사용하여 Python 실행 파일의 로컬 경로를 사용해 C:\$1Program Files\$1AWSCLI에 설치하고 모든 종속 항목을 다운로드하여 AWS CLI에 대한 빌드 구성을 설정합니다.

   ```
   PS C:\> C:\msys64\usr\bin\bash  -lc " PYTHON='C:\path\to\python.exe' ./configure --prefix='C:\Program Files\AWSCLI' --with-download-deps "
   ```

------

   자세한 내용, 사용 가능한 구성 옵션 및 기본 설정 정보는 [2단계: AWS CLI 소스 설치 구성](#source-getting-started-install-config) 섹션을 참조하세요.

1. `make` 명령을 실행합니다. 이 명령은 구성 설정에 따라 AWS CLI를 빌드합니다.

   다음 `make` 명령 예제는 기존 `./configure` 설정을 사용하여 기본 옵션으로 빌드합니다.

------
#### [ Linux and macOS ]

   ```
   $ make
   ```

------
#### [ Windows PowerShell ]

   ```
   PS C:\> C:\msys64\usr\bin\bash -lc "make" 
   ```

------

   자세한 내용과 사용 가능한 빌드 옵션은 [3단계: AWS CLI 빌드](#source-getting-started-install-build) 섹션을 참조하세요.

1. `make install` 명령을 실행합니다. 이 명령은 빌드된 AWS CLI를 시스템의 구성된 위치에 설치합니다.

   다음 `make install` 명령 예제는 빌드된 AWS CLI를 설치하고 기본 명령 설정을 사용하여 구성된 위치에 symlink를 생성합니다.

------
#### [ Linux and macOS ]

   ```
   $ make install
   ```

------
#### [ Windows PowerShell ]

   ```
   PS C:\> C:\msys64\usr\bin\bash -lc "make install" 
   ```

   설치 후 다음을 사용하여 AWS CLI에 대한 경로를 추가합니다.

   ```
   PS C:\> $Env:PATH +=";C:\Program Files\AWSCLI\bin\"
   ```

------

   자세한 내용과 사용 가능한 설치 옵션은 [4단계: AWS CLI 설치](#source-getting-started-install-instructions) 섹션을 참조하세요.

1. 다음 명령을 사용하여 AWS CLI가 성공적으로 설치되었는지 확인합니다.

   ```
   $ aws --version
   aws-cli/2.27.41 Python/3.11.6 Windows/10 exe/AMD64 prompt/off
   ```

   설치 오류에 대한 문제 해결 단계는 [AWS CLI 설치 및 제거 오류 문제 해결](#source-install-tshoot) 섹션을 참조하세요.

## 1단계: 모든 요구 사항 구성
<a name="source-getting-started-install-reqs"></a>

소스에서 AWS CLI를 빌드하려면 다음 사항을 미리 완료해야 합니다.

**참고**  
모든 코드 예제는 소스 디렉터리의 루트에서 실행되는 것으로 가정합니다.

1. AWS CLI GitHub 리포지토리를 분기하거나 소스 tarball을 다운로드하여 AWS CLI 소스를 다운로드합니다. 다음 중 한 가지 지침을 따릅니다.
   + *GitHub*에서 [AWS CLI 리포지토리](https://github.com/aws/aws-cli)를 분기하고 복제합니다. 자세한 내용은 *GitHub Docs*에서 [Fork a repo](https://docs.github.com/en/get-started/quickstart/fork-a-repo)(리포지토리 분기)를 참조하세요.
   + 다음 명령을 사용하여 [https://awscli.amazonaws.com/awscli.tar.gz](https://awscli.amazonaws.com/awscli.tar.gz)에서 최신 소스 tarball을 다운로드하고 그 내용물을 추출합니다.

     ```
     $ curl "https://awscli.amazonaws.com/awscli.tar.gz" -o "awscli.tar.gz"
     $ tar -xzf awscli.tar.gz
     ```
**참고**  
특정 버전을 다운로드하려면 다음 링크 형식을 사용합니다. [https://awscli.amazonaws.com/awscli-*versionnumber*.tar.gz](https://awscli.amazonaws.com/awscli.tar.gz)   
예를 들어 버전 2.10.0의 경우 링크는 다음과 같습니다. [https://awscli.amazonaws.com/awscli-*2.10.0*.tar.gz](https://awscli.amazonaws.com/awscli.tar.gz)  
소스 버전은 AWS CLI 버전 **2.10.0**부터 사용할 수 있습니다.

     **(선택 사항) 다음 단계를 완료하여 다운로드한 zip 파일의 무결성 확인:**

     1. 다음 단계에 따라 `GnuPG` 도구를 사용하여 서명을 확인할 수 있습니다.

        AWS CLI 설치 관리자 패키지 `.zip` 파일은 PGP 서명을 사용하여 암호로 서명됩니다. 파일이 손상되거나 변경되면 이 확인이 실패하며 설치를 진행해서는 안 됩니다.

     1. 패키지 관리자를 사용하여 `gpg` 명령을 다운로드하고 설치합니다. `GnuPG`에 대한 자세한 내용은 [GnuPG 웹 사이트](https://www.gnupg.org/)를 참조하세요.

     1. 퍼블릭 키 파일을 만들려면 텍스트 파일을 만들고 다음 텍스트를 붙여 넣습니다.

        ```
        -----BEGIN PGP PUBLIC KEY BLOCK-----
        
        mQINBF2Cr7UBEADJZHcgusOJl7ENSyumXh85z0TRV0xJorM2B/JL0kHOyigQluUG
        ZMLhENaG0bYatdrKP+3H91lvK050pXwnO/R7fB/FSTouki4ciIx5OuLlnJZIxSzx
        PqGl0mkxImLNbGWoi6Lto0LYxqHN2iQtzlwTVmq9733zd3XfcXrZ3+LblHAgEt5G
        TfNxEKJ8soPLyWmwDH6HWCnjZ/aIQRBTIQ05uVeEoYxSh6wOai7ss/KveoSNBbYz
        gbdzoqI2Y8cgH2nbfgp3DSasaLZEdCSsIsK1u05CinE7k2qZ7KgKAUIcT/cR/grk
        C6VwsnDU0OUCideXcQ8WeHutqvgZH1JgKDbznoIzeQHJD238GEu+eKhRHcz8/jeG
        94zkcgJOz3KbZGYMiTh277Fvj9zzvZsbMBCedV1BTg3TqgvdX4bdkhf5cH+7NtWO
        lrFj6UwAsGukBTAOxC0l/dnSmZhJ7Z1KmEWilro/gOrjtOxqRQutlIqG22TaqoPG
        fYVN+en3Zwbt97kcgZDwqbuykNt64oZWc4XKCa3mprEGC3IbJTBFqglXmZ7l9ywG
        EEUJYOlb2XrSuPWml39beWdKM8kzr1OjnlOm6+lpTRCBfo0wa9F8YZRhHPAkwKkX
        XDeOGpWRj4ohOx0d2GWkyV5xyN14p2tQOCdOODmz80yUTgRpPVQUtOEhXQARAQAB
        tCFBV1MgQ0xJIFRlYW0gPGF3cy1jbGlAYW1hem9uLmNvbT6JAlQEEwEIAD4CGwMF
        CwkIBwIGFQoJCAsCBBYCAwECHgECF4AWIQT7Xbd/1cEYuAURraimMQrMRnJHXAUC
        aGveYQUJDMpiLAAKCRCmMQrMRnJHXKBYD/9Ab0qQdGiO5hObchG8xh8Rpb4Mjyf6
        0JrVo6m8GNjNj6BHkSc8fuTQJ/FaEhaQxj3pjZ3GXPrXjIIVChmICLlFuRXYzrXc
        Pw0lniybypsZEVai5kO0tCNBCCFuMN9RsmmRG8mf7lC4FSTbUDmxG/QlYK+0IV/l
        uJkzxWa+rySkdpm0JdqumjegNRgObdXHAQDWlubWQHWyZyIQ2B4U7AxqSpcdJp6I
        S4Zds4wVLd1WE5pquYQ8vS2cNlDm4QNg8wTj58e3lKN47hXHMIb6CHxRnb947oJa
        pg189LLPR5koh+EorNkA1wu5mAJtJvy5YMsppy2y/kIjp3lyY6AmPT1posgGk70Z
        CmToEZ5rbd7ARExtlh76A0cabMDFlEHDIK8RNUOSRr7L64+KxOUegKBfQHb9dADY
        qqiKqpCbKgvtWlds909Ms74JBgr2KwZCSY1HaOxnIr4CY43QRqAq5YHOay/mU+6w
        hhmdF18vpyK0vfkvvGresWtSXbag7Hkt3XjaEw76BzxQH21EBDqU8WJVjHgU6ru+
        DJTs+SxgJbaT3hb/vyjlw0lK+hFfhWKRwgOXH8vqducF95NRSUxtS4fpqxWVaw3Q
        V2OWSjbne99A5EPEySzryFTKbMGwaTlAwMCwYevt4YT6eb7NmFhTx0Fis4TalUs+
        j+c7Kg92pDx2uQ==
        =OBAt
        -----END PGP PUBLIC KEY BLOCK-----
        ```

        참고로 다음은 퍼블릭 키의 세부 정보입니다.

        ```
        Key ID:           A6310ACC4672
        Type:             RSA
        Size:             4096/4096
        Created:          2019-09-18
        Expires:          2026-07-07
        User ID:          AWS CLI Team <aws-cli@amazon.com>
        Key fingerprint:  FB5D B77F D5C1 18B8 0511  ADA8 A631 0ACC 4672 475C
        ```

     1. 다음 명령을 사용하여 AWS CLI 퍼블릭 키를 가져옵니다. *public-key-file-name*을 생성한 퍼블릭 키의 파일 이름으로 대체합니다.

        ```
        $ gpg --import public-key-file-name
        gpg: /home/username/.gnupg/trustdb.gpg: trustdb created
        gpg: key A6310ACC4672475C: public key "AWS CLI Team <aws-cli@amazon.com>" imported
        gpg: Total number processed: 1
        gpg:               imported: 1
        ```

     1. [https://awscli.amazonaws.com/awscli.tar.gz.sig](https://awscli.amazonaws.com/awscli.tar.gz.sig)에서 다운로드한 패키지의 AWS CLI 서명 파일을 다운로드합니다. 해당 tarball 파일과 경로 및 이름은 같지만 확장명은 `.sig`입니다. tarball 파일과 같은 경로에 저장합니다. 또는 다음 명령 블록을 사용합니다.

        ```
        $ curl awscliv2.sig https://awscli.amazonaws.com/ -o awscli.tar.gz.sig
        ```

     1. `.sig` 및 `.zip` 파일 이름을 모두 `gpg` 명령의 파라미터로 전달하여 서명을 확인합니다.

        ```
        $ gpg --verify awscliv2.sig awscli.tar.gz
        ```

        다음과 같이 출력됩니다.

        ```
        gpg: Signature made Mon Nov  4 19:00:01 2019 PST
        gpg:                using RSA key FB5D B77F D5C1 18B8 0511 ADA8 A631 0ACC 4672 475C
        gpg: Good signature from "AWS CLI Team <aws-cli@amazon.com>" [unknown]
        gpg: WARNING: This key is not certified with a trusted signature!
        gpg:          There is no indication that the signature belongs to the owner.
        Primary key fingerprint: FB5D B77F D5C1 18B8 0511  ADA8 A631 0ACC 4672 475C
        ```
**중요**  
결과에서 경고가 예상되지만 문제가 되지는 않습니다. 이 경고는 개인 PGP 키(보유한 경우)와 AWS CLI PGP 키 사이에 신뢰 체인이 없기 때문에 발생한 것입니다. 자세한 내용은 [Web of trust](https://wikipedia.org/wiki/Web_of_trust)를 참조하세요.

1. 사용자 환경에서는 [GNU Autotools](https://www.gnu.org/software/automake/faq/autotools-faq.html)로 생성된 파일(예: `configure` 및 `Makefile`)을 실행할 수 있습니다. 이러한 파일은 POSIX 플랫폼 간에 광범위하게 이식할 수 있습니다.

------
#### [ Linux and macOS ]

   Autotools가 사용자 환경에 아직 설치되지 않았거나 이를 업데이트해야 하는 경우 [How do I install the Autotools (as user)?](https://www.gnu.org/software/automake/faq/autotools-faq.html#How-do-I-install-the-Autotools-_0028as-user_0029_003f)(사용자가 Autotools를 설치하는 방법) 또는 *GNU 설명서*의 [Basic Installation](https://www.gnu.org/savannah-checkouts/gnu/automake/manual/automake.html#Basic-Installation)(기본 설치)에 나온 설치 지침을 따르세요.

------
#### [ Windows PowerShell ]

**주의**  
Windows 환경에서는 사전 빌드된 설치 프로그램을 사용하는 것이 좋습니다. 사전 빌드된 설치 프로그램에 대한 설치 지침은 [최신 버전의 AWS CLI 설치 또는 업데이트](getting-started-install.md) 섹션을 참조하세요.

   Windows에는 POSIX 호환 셸이 제공되지 않으므로 AWS CLI 소스에서 설치하려면 추가 소프트웨어를 설치해야 합니다. [MSYS2](https://www.msys2.org/)는 특히 Autotools가 사용하는 POSIX 기반 스크립팅을 위해 Windows 소프트웨어를 빌드하고 설치하는 데 도움이 되는 도구 및 라이브러리 모음을 제공합니다.

   1. MSYS2를 설치합니다. MSYS2 설치 및 사용에 대한 자세한 내용은 *MSYS2 설명서*의 [설치 및 사용 지침](https://www.msys2.org/)을 참조하세요.

   1. MSYS2 터미널을 열고 다음 명령을 사용하여 autotools를 설치합니다.

      ```
      $ pacman -S autotools
      ```

**참고**  
Windows용 이 가이드의 구성, 빌드 및 설치 코드 예제에서는 기본 MSYS2 설치 경로인 `C:\msys64\usr\bin\bash`를 사용하는 것으로 가정합니다. PowerShell 내에서 MSYS2 을 호출할 때는 bash 명령을 따옴표로 묶은 다음 형식을 사용하게 됩니다.  

   ```
   PS C:\> C:\msys64\usr\bin\bash  -lc "command example" 
   ```
다음 명령 예제는 `./configure` 명령을 호출합니다.  

   ```
   PS C:\> C:\msys64\usr\bin\bash  -lc "./configure" 
   ```

------

1. Python 3.8 이상의 인터프리터가 설치되어 있습니다. 필요한 최소 Python 버전은 [AWS SDK 및 도구에 대한 공식 Python 지원 정책](https://aws.amazon.com/blogs/developer/python-support-policy-updates-for-aws-sdks-and-tools/)과 동일한 일정을 따릅니다. 인터프리터는 지원 종료일로부터 6개월 동안만 지원됩니다.

1. **(선택 사항)** AWS CLI의 모든 빌드 및 런타임 Python 라이브러리 종속 항목을 설치합니다. `./configure` 명령은 종속 항목이 누락되었는지 여부와 해당 종속 항목을 설치하는 방법을 알려줍니다.

   구성을 통해 이러한 종속 항목을 자동으로 설치하고 사용할 수 있습니다. 자세한 내용은 [종속 항목 다운로드](#source-getting-started-install-config-dependencies) 섹션을 참조하세요.

## 2단계: AWS CLI 소스 설치 구성
<a name="source-getting-started-install-config"></a>

AWS CLI 빌드 및 설치를 위한 구성은 `configure` 스크립트를 사용하여 지정됩니다. 모든 구성 옵션에 대한 문서를 보려면 `--help` 옵션과 함께 `configure` 스크립트를 실행합니다.

------
#### [ Linux and macOS ]

```
$ ./configure --help
```

------
#### [ Windows PowerShell ]

```
PS C:\> C:\msys64\usr\bin\bash -lc "./configure --help" 
```

------

**Topics**
+ [설치 위치](#source-getting-started-install-config-location)
+ [Python 인터프리터](#source-getting-started-install-config-interpreter)
+ [종속 항목 다운로드](#source-getting-started-install-config-dependencies)
+ [설치 유형](#source-getting-started-install-config-type)

### 설치 위치
<a name="source-getting-started-install-config-location"></a>

AWS CLI의 소스 설치에서는 구성 가능한 두 개의 디렉터리를 사용하여 AWS CLI를 설치합니다.
+ `libdir` - AWS CLI가 설치될 상위 디렉터리입니다. AWS CLI 설치 경로는 `<libdir-value>/aws-cli`입니다. Linux 및 macOS의 기본 `libdir` 값은 `/usr/local/lib`이므로 기본 설치 디렉터리는 `/usr/local/lib/aws-cli`가 됩니다.
+ `bindir` - AWS CLI 실행 파일이 설치된 디렉터리입니다. 기본 위치는 `/usr/local/bin`입니다.

다음 `configure` 옵션은 사용되는 디렉터리를 제어합니다.
+ `--prefix` - 설치에 사용할 디렉터리 접두사를 설정합니다. Linux 및 macOS의 기본값은 `/usr/local`입니다.
+ `--libdir` - AWS CLI 설치에 사용할 `libdir`을 설정합니다. 기본값은 `<prefix-value>/lib`입니다. `--libdir` 및 `--prefix`를 모두 지정하지 않은 경우 Linux 및 macOS의 기본값은 `/usr/local/lib/`입니다.
+ `--bindir` - AWS CLI `aws` 및 `aws_completer` 실행 파일을 설치하는 데 사용할 `bindir`을 설정합니다. 기본값은 `<prefix-value>/bin`입니다. `bindir` 및 `--prefix`를 모두 지정하지 않은 경우 Linux 및 macOS의 기본값은 `/usr/local/bin/`입니다.

------
#### [ Linux and macOS ]

다음 명령 예제에서는 `--prefix` 옵션을 사용하여 AWS CLI의 로컬 사용자 설치를 수행합니다. 이 명령은 `$HOME/.local/lib/aws-cli`에 AWS CLI를 설치하고 `$HOME/.local/bin`에 실행 파일을 설치합니다.

```
$ ./configure --prefix=$HOME/.local
```

다음 명령 예제에서는 `--libdir` 옵션을 사용하여 AWS CLI를 `/opt` 디렉터리에 추가 기능 애플리케이션으로 설치합니다 이 명령은 AWS CLI를 `/opt/aws-cli`에 설치하고 실행 파일을 기본 위치인 `/usr/local/bin`에 설치합니다.

```
$ ./configure --libdir=/opt
```

------
#### [ Windows PowerShell ]

다음 명령 예제에서는 `--prefix` 옵션을 사용하여 AWS CLI의 로컬 사용자 설치를 수행합니다. 이 명령은 `$HOME/.local/lib/aws-cli`에 AWS CLI를 설치하고 `$HOME/.local/bin`에 실행 파일을 설치합니다.

```
$ C:\msys64\usr\bin\bash -lc "./configure --prefix='C:\Program Files\AWSCLI'" 
```

다음 명령 예제에서는 `--libdir` 옵션을 사용하여 AWS CLI를 `/opt` 디렉터리에 추가 기능 애플리케이션으로 설치합니다 이 명령은 AWS CLI를 `C:\Program Files\AWSCLI\opt\aws-cli`에 설치합니다.

------

### Python 인터프리터
<a name="source-getting-started-install-config-interpreter"></a>

**참고**  
Windows용으로 설치할 때 Python 인터프리터를 지정하는 것이 좋습니다.

`./configure` 스크립트는 [https://www.gnu.org/software/automake/manual/html_node/Python.html](https://www.gnu.org/software/automake/manual/html_node/Python.html) Autoconf 매크로를 사용하여 AWS CLI를 빌드 및 실행하는 데 사용할 설치된 Python 3.8 이상 버전의 인터프리터를 자동으로 선택합니다.

사용할 Python 인터프리터는 `configure` 스크립트를 실행할 때 `PYTHON` 환경 변수를 사용하여 명시적으로 설정할 수 있습니다.

------
#### [ Linux and macOS ]

```
$ PYTHON=/path/to/python ./configure
```

------
#### [ Windows PowerShell ]

```
PS C:\> C:\msys64\usr\bin\bash -lc "PYTHON='C:\path\to\python' ./configure"
```

------

### 종속 항목 다운로드
<a name="source-getting-started-install-config-dependencies"></a>

기본적으로 AWS CLI의 모든 빌드 및 런타임 종속 항목이 시스템에 이미 설치되어 있어야 합니다. 여기에는 모든 Python 라이브러리 종속 항목이 포함됩니다. `configure` 스크립트가 실행될 때 모든 종속 항목이 확인되며, 시스템에 Python 종속 항목이 누락되면 `configure` 스크립트 오류가 발생합니다.

시스템에 종속 항목이 없으면 다음 코드 예제에서 오류가 출력됩니다.

------
#### [ Linux and macOS ]

```
$ ./configure 
checking for a Python interpreter with version >= 3.8... python
checking for python... /Users/username/.envs/env3.11/bin/python
checking for python version... 3.11
checking for python platform... darwin
checking for GNU default python prefix... ${prefix}
checking for GNU default python exec_prefix... ${exec_prefix}
checking for python script directory (pythondir)... ${PYTHON_PREFIX}/lib/python3.11/site-packages
checking for python extension module directory (pyexecdir)... ${PYTHON_EXEC_PREFIX}/lib/python3.11/site-packages
checking for --with-install-type... system-sandbox
checking for --with-download-deps... Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "/Users/username/aws-code/aws-cli/./backends/build_system/__main__.py", line 125, in <module>
    main()
  File "/Users/username/aws-code/aws-cli/./backends/build_system/__main__.py", line 121, in main
    parsed_args.func(parsed_args)
  File "/Users/username/aws-code/aws-cli/./backends/build_system/__main__.py", line 49, in validate
    validate_env(parsed_args.artifact)
  File "/Users/username/aws-code/aws-cli/./backends/build_system/validate_env.py", line 68, in validate_env
    raise UnmetDependenciesException(unmet_deps, in_venv)
validate_env.UnmetDependenciesException: Environment requires following Python dependencies:

awscrt (required: ('>=0.12.4', '<0.17.0')) (version installed: None)

We recommend using --with-download-deps flag to automatically create a virtualenv and download the dependencies.

If you want to manage the dependencies yourself instead, run the following pip command:
/Users/username/.envs/env3.11/bin/python -m pip install --prefer-binary 'awscrt>=0.12.4,<0.17.0'

configure: error: "Python dependencies not met."
```

------
#### [ Windows PowerShell ]

```
PS C:\> C:\msys64\usr\bin\bash -lc "./configure" 
checking for a Python interpreter with version >= 3.8... python
checking for python... /Users/username/.envs/env3.11/bin/python
checking for python version... 3.11
checking for python platform... darwin
checking for GNU default python prefix... ${prefix}
checking for GNU default python exec_prefix... ${exec_prefix}
checking for python script directory (pythondir)... ${PYTHON_PREFIX}/lib/python3.11/site-packages
checking for python extension module directory (pyexecdir)... ${PYTHON_EXEC_PREFIX}/lib/python3.11/site-packages
checking for --with-install-type... system-sandbox
checking for --with-download-deps... Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "/Users/username/aws-code/aws-cli/./backends/build_system/__main__.py", line 125, in <module>
    main()
  File "/Users/username/aws-code/aws-cli/./backends/build_system/__main__.py", line 121, in main
    parsed_args.func(parsed_args)
  File "/Users/username/aws-code/aws-cli/./backends/build_system/__main__.py", line 49, in validate
    validate_env(parsed_args.artifact)
  File "/Users/username/aws-code/aws-cli/./backends/build_system/validate_env.py", line 68, in validate_env
    raise UnmetDependenciesException(unmet_deps, in_venv)
validate_env.UnmetDependenciesException: Environment requires following Python dependencies:

awscrt (required: ('>=0.12.4', '<0.17.0')) (version installed: None)

We recommend using --with-download-deps flag to automatically create a virtualenv and download the dependencies.

If you want to manage the dependencies yourself instead, run the following pip command:
/Users/username/.envs/env3.11/bin/python -m pip install --prefer-binary 'awscrt>=0.12.4,<0.17.0'

configure: error: "Python dependencies not met."
```

------

필요한 Python 종속 항목을 자동으로 설치하려면 `--with-download-deps` 옵션을 사용합니다. 이 플래그를 사용할 때 빌드 프로세스는 다음을 수행합니다.
+ Python 라이브러리 종속 항목 확인을 건너뜁니다.
+ 필요한 모든 Python 종속 항목을 다운로드하고 다운로드한 **종속 항목만** 사용하여 `make` 빌드 중에 AWS CLI를 빌드하도록 설정을 구성합니다.

다음 configure 명령 예제는 `--with-download-deps` 옵션을 사용하여 Python 종속 항목을 다운로드하고 사용합니다.

------
#### [ Linux and macOS ]

```
$ ./configure --with-download-deps
```

------
#### [ Windows PowerShell ]

```
PS C:\> C:\msys64\usr\bin\bash -lc "./configure --with-download-deps"
```

------

### 설치 유형
<a name="source-getting-started-install-config-type"></a>

소스 설치 프로세스는 다음 설치 유형을 지원합니다.
+ `system-sandbox` - **(기본값)** 격리된 Python 가상 환경을 만들고 가상 환경에 AWS CLI를 설치한 다음 가상 환경에서 `aws` 및 `aws_completer` 실행 파일에 symlink를 연결합니다. 이 AWS CLI 설치는 런타임에 선택한 Python 인터프리터에 직접 의존합니다.

  이는 AWS CLI를 시스템에 설치하기 위한 간단한 설치 메커니즘으로, 가상 환경에서 설치를 샌드박싱하여 Python 모범 사례를 따릅니다. 이 설치는 Python 설치와 함께 설치하여 가능한 한 가장 원활한 방식으로AWS CLI 소스에서 설치하려는 고객을 위한 것입니다.
+ `portable-exe` - AWS CLI를 유사한 아키텍처의 환경에 배포할 수 있는 독립형 실행 파일로 고정합니다. 이는 AWS CLI의 공식 사전 빌드된 실행 파일을 생성하는 데 사용되는 것과 동일한 프로세스입니다. `portable-exe`는 AWS CLI의 런타임에 사용하기 위해 `configure` 단계에서 선택한 Python 인터프리터의 복사본에서 정지됩니다. 이를 통해 Python 인터프리터가 없을 수 있는 다른 컴퓨터로 이동할 수 있습니다.

  이 유형의 빌드는 AWS CLI 설치가 환경에 설치된 Python 버전과 연결되지 않도록 하고 Python이 아직 설치되지 않은 다른 시스템에 빌드를 배포할 수 있기 때문에 유용합니다. 이를 통해 사용하는 AWS CLI 실행 파일의 종속 항목과 보안을 제어할 수 있습니다.

설치 유형을 구성하려면 `--with-install-type` 옵션을 사용하고 `portable-exe` 또는 `system-sandbox` 값을 지정합니다.

다음 `./configure` 명령 예제에서는 `portable-exe` 값을 지정합니다.

------
#### [ Linux and macOS ]

```
$ ./configure --with-install-type=portable-exe
```

------
#### [ Windows PowerShell ]

```
PS C:\> C:\msys64\usr\bin\bash -lc "./configure --with-install-type=portable-exe"
```

------

## 3단계: AWS CLI 빌드
<a name="source-getting-started-install-build"></a>

`make` 명령을 통해 구성 설정을 사용하여 AWS CLI를 빌드합니다.

------
#### [ Linux and macOS ]

```
$ make
```

------
#### [ Windows PowerShell ]

```
PS C:\> C:\msys64\usr\bin\bash -lc "make"
```

------

**참고**  
Python [https://docs.python.org/3/library/venv.html](https://docs.python.org/3/library/venv.html) 모듈을 사용하여 빌드 디렉터리에 가상 환경이 생성됩니다. 가상 환경은 [Python 표준 라이브러리에서 제공되는 pip 버전](https://docs.python.org/3/library/ensurepip.html)으로 부트스트랩됩니다.
Python 라이브러리 종속 항목을 복사합니다. `configure` 명령에 `--with-download-deps` 플래그가 지정되었는지 여부에 따라 이 단계는 다음 중 하나를 수행합니다.  
`--with-download-deps`가 **지정된** 경우. Python 종속 항목은 pip로 설치됩니다. 여기에는 `wheel`, `setuptools` 및 모든 AWS CLI 런타임 종속 항목이 포함됩니다. `portable-exe`를 빌드하는 경우 `pyinstaller`가 설치됩니다. 이러한 요구 사항은 모두 [https://github.com/jazzband/pip-tools](https://github.com/jazzband/pip-tools)에서 생성된 잠금 파일에 지정되어 있습니다.
`--with-download-deps`가 **지정되지 않은** 경우. Python 인터프리터 사이트 패키지의 Python 라이브러리와 모든 스크립트(예:`pyinstaller`)가 빌드에 사용되는 가상 환경에 복사됩니다.
AWS CLI 코드베이스에서 직접 `pip install`을 실행하여 오프라인 트리 내 빌드를 수행하고 빌드 가상 환경에 AWS CLI를 설치합니다. 이 설치는 pip 플래그 [--no-build-isolation](https://pip.pypa.io/en/stable/cli/pip_install/#cmdoption-no-build-isolation), [--use-feature=in-tree-build](https://pip.pypa.io/en/stable/cli/pip_install/#local-project-installs), [--no-cache-dir](https://pip.pypa.io/en/stable/cli/pip_install/#caching) 및 [https://pip.pypa.io/en/stable/cli/pip_install/#cmdoption-no-index](https://pip.pypa.io/en/stable/cli/pip_install/#cmdoption-no-index)를 사용합니다.
**(선택 사항)** `configure` 명령에서 `--install-type`이 `portable-exe`로 설정된 경우 [https://www.pyinstaller.org/](https://www.pyinstaller.org/)를 사용하여 독립 실행형 실행 파일을 빌드합니다.

## 4단계: AWS CLI 설치
<a name="source-getting-started-install-instructions"></a>

`make install` 명령은 빌드된 AWS CLI를 시스템의 구성된 위치에 설치합니다.

------
#### [ Linux and macOS ]

다음 명령 예제에서는 구성 및 빌드 설정을 사용하여 AWS CLI를 설치합니다.

```
$ make install
```

------
#### [ Windows PowerShell ]

다음 명령 예제에서는 구성 및 빌드 설정을 사용하여 AWS CLI를 설치한 다음 AWS CLI 경로와 함께 환경 변수를 추가합니다.

```
PS C:\> C:\msys64\usr\bin\bash -lc " make install "
PS C:\> $Env:PATH +=";C:\Program Files\AWSCLI\bin\"
```

------

`make install` 규칙은 [https://www.gnu.org/software/make/manual/html_node/DESTDIR.html#DESTDIR](https://www.gnu.org/software/make/manual/html_node/DESTDIR.html#DESTDIR) 변수를 지원합니다. 이 변수를 지정하면 AWS CLI 설치 시 이미 구성된 설치 경로 앞에 지정된 경로가 추가됩니다. 기본적으로 이 변수에는 값이 설정되지 않습니다.

------
#### [ Linux and macOS ]

다음 코드 예제에서는 `--prefix=/usr/local` 플래그를 사용하여 설치 위치를 구성한 다음 `make install` 명령에 `DESTDIR=/tmp/stage`를 사용하여 해당 대상을 변경합니다. 이러한 명령을 실행하면 AWS CLI가 `/tmp/stage/usr/local/lib/aws-cli`에 설치되고 해당 실행 파일이 `/tmp/stage/usr/local/bin`에 배치됩니다.

```
$ ./configure --prefix=/usr/local
$ make
$ make DESTDIR=/tmp/stage install
```

------
#### [ Windows PowerShell ]

다음 코드 예제에서는 `--prefix=\awscli` 플래그를 사용하여 설치 위치를 구성한 다음 `make install` 명령에 `DESTDIR=C:\Program Files`를 사용하여 해당 대상을 변경합니다. 이 명령을 실행하면 AWS CLI가 `C:\Program Files\awscli`에 설치됩니다.

```
$ ./configure --prefix=\awscli
$ make
$ make DESTDIR='C:\Program Files' install
```

------

**참고**  
다음 중 하나를 구성된 설치 디렉터리로 이동합니다.  
설치 유형이 `system-sandbox`인 경우 빌드된 가상 환경을 이동합니다.
설치 유형이 `portable-exe`인 경우 빌드된 독립 실행형 실행 파일을 이동합니다.
구성된 bin 디렉터리에 `aws` 및 `aws_completer` 실행 파일 모두에 대한 symlink를 만듭니다.

## 5단계: AWS CLI 설치 확인
<a name="source-getting-started-install-verify"></a>

다음 명령을 사용하여 AWS CLI가 성공적으로 설치되었는지 확인합니다.

```
$ aws --version
aws-cli/2.27.41 Python/3.11.6 Windows/10 exe/AMD64 prompt/off
```

`aws` 명령이 인식되지 않으면 새 symlink가 업데이트할 수 있도록 터미널을 재시작해야 할 수도 있습니다. AWS CLI를 설치하거나 제거한 후 추가 문제가 발생할 경우 [AWS CLI에 대한 오류 문제 해결](cli-chap-troubleshooting.md)에 나온 일반적인 문제 해결 단계를 참조하세요.

## 워크플로우 예시
<a name="source-getting-started-install-workflows"></a>

이 섹션에서는 소스에서 설치하기 위한 몇 가지 기본 워크플로 예제를 제공합니다.

### 기본 Linux 및 macOS 설치
<a name="source-getting-started-install-workflows-basic"></a>

다음 예제는 AWS CLI를 기본 위치인 `/usr/local/lib/aws-cli`에 설치하는 기본 설치 워크플로입니다.

```
$ cd path/to/cli/respository/
$ ./configure
$ make
$ make install
```

### 자동화된 Windows 설치
<a name="source-getting-started-install-workflows-win"></a>

**참고**  
이 워크플로를 사용하려면 PowerShell을 관리자 권한으로 실행해야 합니다.

CI 설정에서 자동화된 방식으로 MSYS2를 사용할 수 있습니다. *MSYS2 설명서*의 [Using MSYS2 in CI](https://www.msys2.org/docs/ci/)(CI에서 MSYS2 사용)를 참조하세요.

------
#### [ Downloaded Tarball ]

`awscli.tar.gz` 파일을 다운로드한 후 압축을 풀고 AWS CLI를 설치합니다. 다음 명령을 사용할 경우 다음과 같이 경로를 바꿉니다.
+ `C:\msys64\usr\bin\bash`를 MSYS2 경로 위치로
+ `.\awscli-2.x.x\`를 추출된 `awscli.tar.gz` 폴더 이름으로
+ `PYTHON='C:\path\to\python.exe'`를 로컬 Python 경로로

다음 코드 예제에서는 MSYS2를 사용하여 PowerShell에서 AWS CLI 빌드 및 설치를 자동화하고 사용할 Python 로컬 설치를 지정합니다.

```
PS C:\> curl "https://awscli.amazonaws.com/awscli.tar.gz" -o "awscliv2.zip"  #  Download the awscli.tar.gz file in the current working directory
PS C:\> tar -xvzf .\awscli.tar.gz #  Extract awscli.tar.gz file
PS C:\> cd .\awscli-2.x.x\ #  Navigate to the root of the extracted files
PS C:\> $env:CHERE_INVOKING = 'yes' #  Preserve the current working directory
PS C:\> C:\msys64\usr\bin\bash  -lc " PYTHON='C:\path\to\python.exe' ./configure --prefix='C:\Program Files\AWSCLI' --with-download-deps " 
PS C:\> C:\msys64\usr\bin\bash  -lc "make"
PS C:\> C:\msys64\usr\bin\bash  -lc "make install"
PS C:\> $Env:PATH +=";C:\Program Files\AWSCLI\bin\"
PS C:\> aws --version
aws-cli/2.27.41 Python/3.11.6 Windows/10 source-sandbox/AMD64
```

------
#### [ GitHub Repository ]

`awscli.tar.gz` 파일을 다운로드한 후 압축을 풀고 AWS CLI를 설치합니다. 다음 명령을 사용할 경우 다음과 같이 경로를 바꿉니다.
+ `C:\msys64\usr\bin\bash`를 MSYS2 경로 위치로
+ `C:path\to\cli\repository\`를 *GitHub*에서 복제된 [AWS CLI 리포지토리](https://github.com/aws/aws-cli)의 경로로. 자세한 내용은 *GitHub Docs*에서 [Fork a repo](https://docs.github.com/en/get-started/quickstart/fork-a-repo)(리포지토리 분기)를 참조하세요.
+ `PYTHON='C:\path\to\python.exe'`를 로컬 Python 경로로

다음 코드 예제에서는 MSYS2를 사용하여 PowerShell에서 AWS CLI 빌드 및 설치를 자동화하고 사용할 Python 로컬 설치를 지정합니다.

```
PS C:\> cd C:path\to\cli\repository\
PS C:\> $env:CHERE_INVOKING = 'yes' #  Preserve the current working directory
PS C:\> C:\msys64\usr\bin\bash  -lc " PYTHON='C:\path\to\python.exe' ./configure --prefix='C:\Program Files\AWSCLI' --with-download-deps " 
PS C:\> C:\msys64\usr\bin\bash  -lc "make"
PS C:\> C:\msys64\usr\bin\bash  -lc "make install"
PS C:\> $Env:PATH +=";C:\Program Files\AWSCLI\bin\"
PS C:\> aws --version
```

------

### Alpine Linux 컨테이너
<a name="source-getting-started-install-workflows-alpine"></a>

다음은 [Alpine용으로 사전 빌드된 바이너리의 대안](https://github.com/aws/aws-cli/issues/4685)으로 Alpine Linux 컨테이너에 AWS CLI를 제대로 설치하는 데 사용할 수 있는 Dockerfile의 예입니다. 이 예제를 사용할 때는 *AWSCLI\$1VERSION*을 원하는 AWS CLI 버전 번호로 바꿉니다.

```
 1. FROM python:3.8-alpine AS builder
 2. 
 3. ENV AWSCLI_VERSION=2.10.1
 4. 
 5. RUN apk add --no-cache \
 6.     curl \
 7.     make \
 8.     cmake \
 9.     gcc \
10.     g++ \
11.     libc-dev \
12.     libffi-dev \
13.     openssl-dev \
14.     && curl https://awscli.amazonaws.com/awscli-${AWSCLI_VERSION}.tar.gz | tar -xz \
15.     && cd awscli-${AWSCLI_VERSION} \
16.     && ./configure --prefix=/opt/aws-cli/ --with-download-deps \
17.     && make \
18.     && make install
19. 
20. FROM python:3.8-alpine
21. 
22. RUN apk --no-cache add groff
23. 
24. COPY --from=builder /opt/aws-cli/ /opt/aws-cli/
25. 
26. ENTRYPOINT ["/opt/aws-cli/bin/aws"]
```

Amazon Linux 2에서 빌드된 것과 유사한 컨테이너에서 이 이미지가 빌드되고 AWS CLI가 호출됩니다.

```
$ docker build --tag awscli-alpine .
$ docker run --rm -it awscli-alpine --version
aws-cli/2.2.1 Python/3.8.11 Linux/5.10.25-linuxkit source-sandbox/x86_64.alpine.3 prompt/off
```

이 이미지의 최종 크기는 공식 AWS CLI 도커 이미지 크기보다 작습니다. 공식 도커 이미지에 대한 자세한 내용은 [AWS CLI에 대한 공식 Amazon ECR 퍼블릭 또는 Docker 이미지 실행](getting-started-docker.md) 섹션을 참조하세요.

## AWS CLI 설치 및 제거 오류 문제 해결
<a name="source-install-tshoot"></a>

설치 오류에 대한 문제 해결 단계는 [AWS CLI에 대한 오류 문제 해결](cli-chap-troubleshooting.md)의 일반적인 문제 해결 단계를 참조하세요. 가장 관련성이 높은 문제 해결 단계는 [명령을 찾을 수 없음 오류](cli-chap-troubleshooting.md#tshoot-install-not-found), ['`aws --version`' 명령이 설치한 버전과 다른 버전을 반환함](cli-chap-troubleshooting.md#tshoot-install-wrong-version) 및 [AWS CLI를 제거한 후 '`aws --version`' 명령이 버전을 반환함](cli-chap-troubleshooting.md#tshoot-uninstall-1) 섹션을 참조하세요.

문제 해결 가이드에서 다루지 않는 문제의 경우 *GitHub*의 [AWS CLI 리포지토리](https://github.com/aws/aws-cli/labels/source-distribution)에서 `source-distribution` 레이블을 사용하여 문제를 검색합니다. 해당 오류와 관련된 기존 문제가 없는 경우 [새 문제를 생성](https://github.com/aws/aws-cli/issues/new?assignees=&labels=source-distribution%2Cneeds-triage&template=source-distribution.yml&title=%28short+issue+description%29)하여 AWS CLI 관리자에게 도움을 받습니다.

## 다음 단계
<a name="source-install-next-steps"></a>

AWS CLI를 설치한 후에는 [AWS CLI 설정](getting-started-quickstart.md)를 수행해야 합니다.