

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

# Terraform을 사용하여 AWS DevOps 에이전트 시작하기
<a name="getting-started-with-aws-devops-agent-getting-started-with-aws-devops-agent-using-terraform"></a>

## 개요
<a name="overview"></a>

이 가이드에서는 Terraform을 사용하여 AWS DevOps 에이전트 리소스를 생성하고 배포하는 방법을 보여줍니다. Terraform 구성은 에이전트 공간, IAM 역할, 운영자 앱 및 AWS 계정 연결 생성을 자동화합니다.

Terraform 접근 방식은 필요한 모든 리소스를 코드형 인프라로 정의하여 [CLI 온보딩 가이드](https://docs.aws.amazon.com/devopsagent/latest/userguide/getting-started-with-aws-devops-agent-cli-onboarding-guide.html)에 설명된 수동 단계를 자동화합니다.

AWS DevOps 에이전트는 미국 동부(버지니아 북부), 미국 서부(오레곤), 아시아 태평양(시드니), 아시아 태평양(도쿄), 유럽(프랑크푸르트) 및 유럽(아일랜드)의 6개 AWS 리전에서 사용할 수 있습니다. 지원되는 리전에 대한 자세한 내용은 섹션을 참조하세요[지원되는 리전:](about-aws-devops-agent-supported-regions.md).

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

시작하기 전에 다음 항목이 준비되었는지 확인합니다.
+ Terraform >= 1.0 설치됨
+ AWS 적절한 자격 증명으로 CLI 설치 및 구성
+ 모니터링(기본) AWS 계정에 대한 하나의 계정
+ (선택 사항) 교차 AWS 계정 모니터링을 설정하려는 경우 두 번째 계정

## 이 가이드에서 다루는 내용
<a name="what-this-guide-covers"></a>

이 가이드는 두 부분으로 나뉩니다.
+ **1부 **- 운영자 앱과 모니터링 계정의 AWS 연결을 사용하여 에이전트 공간을 배포합니다. 이 부분을 완료한 후 에이전트는 해당 계정의 문제를 모니터링할 수 있습니다.
+ **2부(선택 사항)** - 서비스 계정에 대한 소스 AWS 연결을 추가하고 교차 계정 IAM 역할과 에코 Lambda를 해당 계정에 배포합니다. 이렇게 하면 에이전트 공간이 계정 전체에서 리소스를 모니터링할 수 있습니다.

## 생성할 리소스
<a name="resources-created"></a>

### 1부: 계정 모니터링
<a name="part-1-monitoring-account"></a>
+ **IAM 역할**(`DevOpsAgentRole-AgentSpace-*`) - 계정을 모니터링하기 위해 DevOps 에이전트 서비스에서 수임합니다. `AIDevOpsAgentAccessPolicy` 관리형 정책과 Resource Explorer 서비스 연결 역할 생성을 허용하는 인라인 정책을 포함합니다.
+ **IAM 역할**(`DevOpsAgentRole-WebappAdmin-*`) - 에이전트 작업에 대한 `AIDevOpsOperatorAppAccessPolicy` 관리형 정책이 있는 운영자 앱 역할입니다.
+ **에이전트 공간**(구성 가능한 이름) - `awscc_devopsagent_agent_space` 리소스를 사용하여 생성된 중앙 에이전트 공간입니다. 운영자 앱 구성을 포함합니다.
+ **연결**(AWS 모니터) - `awscc_devopsagent_association` 리소스를 사용하여 모니터링 계정을 에이전트 스페이스에 연결합니다.
+ **연결**(AWS 소스) - (선택 사항) 교차 계정 모니터링을 위해 서비스 계정을 에이전트 스페이스에 연결합니다.

### 2부: 서비스 계정(선택 사항)
<a name="part-2-service-account-optional"></a>
+ **IAM 역할**(`DevOpsAgentRole-SecondaryAccount-TF`) - 이름이 고정된 교차 계정 역할입니다. 모니터링 계정의 에이전트 공간에서 신뢰합니다. `AIDevOpsAgentAccessPolicy` 관리형 정책과 Resource Explorer 서비스 연결 역할 생성을 허용하는 인라인 정책을 포함합니다.
+ **Lambda 함수**(`echo-service-tf`) - 입력 이벤트를 에코백하는 간단한 예제 서비스입니다.

## 설정
<a name="setup"></a>

### 1단계: 샘플 리포지토리 복제
<a name="step-1-clone-the-sample-repository"></a>

```
git clone https://github.com/aws-samples/sample-aws-devops-agent-terraform.git
cd sample-aws-devops-agent-terraform
```

### 2단계: 변수 구성
<a name="step-2-configure-variables"></a>

예제 변수 파일을 복사하여 환경에 맞게 사용자 지정합니다.

```
cp terraform.tfvars.example terraform.tfvars
```

에이전트 스페이스 이름 및 설명`terraform.tfvars`으로를 편집합니다.

```
agent_space_name        = "MyCompanyAgentSpace"
agent_space_description = "DevOps Agent Space for monitoring production workloads"
```

## 1부: 에이전트 공간 배포
<a name="part-1-deploy-the-agent-space"></a>

이 섹션에서는 모니터링 계정에 에이전트 공간, IAM 역할, 운영자 앱 및 AWS 연결을 생성합니다.

### 1단계: 자동화를 사용하여 배포(권장)
<a name="step-1-deploy-with-automation-recommended"></a>

간소화된 설정을 위해 제공된 배포 스크립트를 사용합니다.

```
./deploy.sh
```

이 스크립트는 자동으로 다음을 수행합니다.
+ 사전 조건 확인(Terraform, AWS CLI, 자격 증명)
+ 필요한 경우 예제`terraform.tfvars`에서 생성
+ Terraform 초기화, 검증, 계획 및 적용

또는 수동 제어를 선호하는 경우:

```
terraform init
terraform plan
terraform apply
```

배포를 확인하라는 메시지가 `yes` 표시되면를 입력합니다.

### 2단계: 출력 기록
<a name="step-2-record-the-outputs"></a>

배포가 완료되면 Terraform이 출력을 인쇄합니다. 나중에 사용할 수 있도록 다음 값을 기록합니다.

```
Outputs:
agent_space_id              = "abc123"
agent_space_arn             = "arn:aws:aidevops:<REGION>:<MONITORING_ACCOUNT_ID>:agentspace/abc123"
agent_space_name            = "MyCompanyAgentSpace"
devops_agentspace_role_arn  = "arn:aws:iam::<MONITORING_ACCOUNT_ID>:role/DevOpsAgentRole-AgentSpace-a1b2c3d4"
devops_operator_role_arn    = "arn:aws:iam::<MONITORING_ACCOUNT_ID>:role/DevOpsAgentRole-WebappAdmin-a1b2c3d4"
primary_account_id          = "<MONITORING_ACCOUNT_ID>"
primary_account_association_id = "assoc-xyz"
```

2부를 완료하려는 경우 `agent_space_arn` 값을 저장합니다. 서비스 계정 리소스를 구성하는 데 필요합니다.

### 3단계: 배포 확인
<a name="step-3-verify-the-deployment"></a>

배포 후 확인 스크립트를 실행합니다.

```
./post-deploy.sh
```

또는 AWS CLI를 사용하여 에이전트 공간이 성공적으로 생성되었는지 확인합니다.

```
aws devops-agent get-agent-space \
  --agent-space-id <AGENT_SPACE_ID> \
  --region <REGION>
```

이 시점에서 에이전트 공간은 운영자 앱이 활성화되고 모니터링 계정이 연결된 상태로 배포됩니다. 에이전트는이 계정의 문제를 모니터링할 수 있습니다.

## 2부(선택 사항): 교차 계정 모니터링 추가
<a name="part-2-optional-add-cross-account-monitoring"></a>

이 섹션에서는 에이전트 공간이 두 번째 AWS 계정(서비스 계정)의 리소스를 모니터링할 수 있도록 설정을 확장합니다. 여기에는 다음 두 가지 작업이 포함됩니다.

1. 서비스 계정을 가리키는 소스 AWS 연결 추가.

1. 교차 계정 IAM 역할과 에코 Lambda 함수를 서비스 계정에 배포합니다.

**중요**  
** 계속하기 전에 1부를 완료해야 합니다. 서비스 계정 리소스에는 파트 1 배포 출력`agent_space_arn`의가 필요합니다.

### 1단계: 서비스 계정 ID 구성
<a name="step-1-configure-the-service-account-id"></a>

에서 서비스 계정 ID를 `terraform.tfvars`설정합니다.

```
service_account_id = "<YOUR_SERVICE_ACCOUNT_ID>"
```

### 2단계: 에이전트 공간 ARN 설정
<a name="step-2-set-the-agent-space-arn"></a>

1부 출력(2단계)에서 `agent_space_arn` 값을 복사하고에서 설정합니다`terraform.tfvars`.

```
agent_space_arn = "arn:aws:aidevops:<REGION>:<MONITORING_ACCOUNT_ID>:agentspace/<SPACE_ID>"
```

서비스 계정 리소스는이 값을 사용하여 보조 계정 역할에 대한 신뢰 정책의 범위를 지정합니다. 이러한 리소스는이 값이 설정된 경우에만 생성됩니다.

### 3단계: `aws.service` 공급자 구성
<a name="step-3-configure-the-awsservice-provider"></a>

에서 서비스 계정의 자격 증명을 사용하여 `aws.service` 공급자 별칭을 `main.tf`구성합니다. 명명된 프로필 또는 수임 역할을 사용할 수 있습니다.

프로필 사용:

```
provider "aws" {
  alias   = "service"
  region  = var.aws_region
  profile = "your-service-account-profile"
}
```

또는 수임 역할 사용:

```
provider "aws" {
  alias  = "service"
  region = var.aws_region
  assume_role {
    role_arn = "arn:aws:iam::<SERVICE_ACCOUNT_ID>:role/OrganizationAccountAccessRole"
  }
}
```

### 4단계: 배포
<a name="step-4-deploy"></a>

업데이트된 구성을 적용합니다.

```
terraform apply
```

이렇게 하면 서비스 계정에 다음 리소스가 생성됩니다.
+ 모니터링 계정의 에이전트 공간을 신뢰하는 IAM 역할(`DevOpsAgentRole-SecondaryAccount-TF`)
+ 예제 서비스로 사용되는 에코 Lambda 함수(`echo-service-tf`)

또한 서비스 계정을 연결하는 소스 AWS 연결을 모니터링 계정에 생성합니다.

### 5단계: 배포 확인
<a name="step-5-verify-the-deployment"></a>

에코 서비스를 테스트하여 Lambda 함수가 성공적으로 배포되었는지 확인합니다.

```
aws lambda invoke \
  --function-name echo-service-tf \
  --payload '{"test": "hello world"}' \
  --profile <your-service-account-profile> \
  --region <REGION> \
  response.json
cat response.json
```

## 문제 해결
<a name="troubleshooting"></a>

**IAM 전파 지연**
+ 구성에는 IAM 역할 생성과 에이전트 공간 생성 `time_sleep` 사이에 30초가 포함됩니다. DevOps 에이전트 서비스는 에이전트 스페이스 생성 중에 운영자 역할의 신뢰 정책을 검증하며, IAM이 완전히 전파되지 않은 경우 실패할 수 있습니다. 그래도 신뢰 정책 오류가 계속 표시되면 잠시 기다렸다가 `terraform apply` 다시 실행합니다. IAM 역할이 이미 존재하고 적용이 중단된 위치를 선택합니다.

**권한 오류**
+ 자격 AWS 증명에 역할 및 정책을 생성하는 데 필요한 IAM 권한이 있는지 확인합니다.
+ 신뢰 정책 조건이 계정 ID와 일치하는지 확인합니다.

**교차 계정 배포 실패**
+ 서비스 계정의 자격 증명으로 `aws.service` 공급자를 구성해야 합니다. 명명된 프로필 또는 수임 역할 블록을 사용합니다.
+ `agent_space_arn` 값이 파트 1 출력의 ARN과 일치하는지 확인합니다.

**Terraform 리소스 유형을 찾을 수 없음**
+ `awscc` 공급자 버전 `~> 1.0` 이상이 있는지 확인합니다. `awscc_devopsagent_agent_space` 및 `awscc_devopsagent_association` 리소스에는 AWS Cloud Control 공급자가 필요합니다.

## 정리
<a name="cleanup"></a>

모든 리소스를 제거하려면 2부를 배포한 경우 역순으로 삭제합니다.

```
./cleanup.sh
```

또는 수동으로 다음을 수행합니다.

```
terraform destroy
```

**경고:** 그러면 에이전트 공간과 모든 관련 데이터가 영구적으로 삭제됩니다. 계속하기 전에 중요한 정보를 백업했는지 확인합니다.

## 보안 고려 사항
<a name="security-considerations"></a>
+ Terraform 구성은 `aidevops.amazonaws.com` 서비스 보안 주체만 해당 역할을 수임하도록 허용하는 신뢰 정책을 사용하여 IAM 역할을 생성합니다.
+ 신뢰 정책에는 특정 AWS 계정 및 에이전트 공간 ARN에 대한 액세스를 제한하는 조건이 포함됩니다.
+ 모든 정책은 최소 권한 원칙을 따릅니다. 조직의 보안 요구 사항에 따라 IAM 정책을 검토하고 사용자 지정합니다.
+ 교차 계정 역할(`DevOpsAgentRole-SecondaryAccount-TF`)은 고정된 이름을 사용하며 특정 에이전트 공간 ARN으로 범위가 지정됩니다.

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

Terraform을 사용하여 AWS DevOps 에이전트를 배포한 후:

1. DevOps 에이전트 [AWS 사용 설명서에서 DevOps 에이전트](https://docs.aws.amazon.com/devopsagent/latest/userguide/) 기능의 전체 범위에 대해 알아봅니다.

1. 자동화된 인프라 관리를 위해 Terraform 배포를 CI/CD 파이프라인에 통합하는 것이 좋습니다.

## 추가 리소스
<a name="additional-resources"></a>
+ [AWS DevOps 에이전트 사용 설명서](https://docs.aws.amazon.com/devopsagent/latest/userguide/)
+ [샘플 Terraform 리포지토리](https://github.com/aws-samples/sample-aws-devops-agent-terraform)
+ [CLI 온보딩 가이드](https://docs.aws.amazon.com/devopsagent/latest/userguide/getting-started-with-aws-devops-agent-cli-onboarding-guide.html)