

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

# 튜토리얼: Amazon MWAA에서 자체 환경 엔드포인트 관리 자동화
<a name="tutorials-customer-managed-endpoints"></a>

[AWS Organizations](https://docs.aws.amazon.com/)를 사용하여 리소스를 공유하는 여러 AWS 계정를 관리하는 경우, Amazon MWAA를 사용하면 자체 Amazon VPC 엔드포인트를 생성하고 관리할 수 있습니다. 즉, 환경에 필요한 리소스에만 액세스할 수 있도록 허용하는 더 엄격한 보안 정책을 사용할 수 있습니다.

공유 Amazon VPC에서 환경을 생성하면 주 Amazon VPC를 소유한 계정(*o소유자*)이 Amazon MWAA에 필요한 두 개의 개인 서브넷을 동일한 조직에 속한 다른 계정(*참가자*)과 공유합니다. 해당 서브넷을 공유하는 참여자 계정은 공유된 VPC의 환경을 보고, 생성하고, 수정하며, 삭제할 수 있습니다.

공유 또는 정책으로 제한된 Amazon VPC에 환경을 생성하면 Amazon MWAA는 먼저 서비스 VPC 리소스를 생성한 다음, 최대 72시간 동안 [https://docs.aws.amazon.com/mwaa/latest/API/API_Environment.html#mwaa-Type-Environment-Status](https://docs.aws.amazon.com/mwaa/latest/API/API_Environment.html#mwaa-Type-Environment-Status) 상태를 입력합니다.

환경 상태가 `CREATING`에서 `PENDING`으로 변경되면 Amazon MWAA는 상태 변경에 대한 Amazon EventBridge 알림을 보냅니다. 이를 통해 소유자 계정은 Amazon MWAA 콘솔이나 API의 엔드포인트 서비스 정보를 기반으로 또는 프로그래밍 방식으로 참가자를 대신하여 필요한 엔드포인트를 생성할 수 있습니다. 다음에서 Lambda 함수와 Amazon MWAA 상태 변경 알림을 수신 대기하는 EventBridge 규칙을 사용하여 새로운 Amazon VPC 엔드포인트를 생성합니다.

여기서는 환경과 동일한 Amazon VPC에 새 엔드포인트를 생성합니다. 공유 Amazon VPC를 설정하려면 소유자 계정에서 EventBridge 규칙 및 Lambda 함수를 생성하고 참가자 계정에서 Amazon MWAA 환경을 생성합니다.

**Topics**
+ [사전 조건](#tutorials-customer-managed-endpoints-prerequisites)
+ [Amazon VPC 생성](#tutorials-customer-managed-endpoints-create-vpc)
+ [Lambda 함수 생성](#tutorials-customer-managed-endpoints-create-lambda-function)
+ [EventBridge 규칙 생성](#tutorials-customer-managed-endpoints-create-eb-rule)
+ [Amazon MWAA 환경 생성](#tutorials-customer-managed-endpoints-create-mwaa)

## 사전 조건
<a name="tutorials-customer-managed-endpoints-prerequisites"></a>

이 튜토리얼을 완료하려면 다음이 필요합니다.
+ ...

## Amazon VPC 생성
<a name="tutorials-customer-managed-endpoints-create-vpc"></a>

다음 CloudFormation 템플릿과 AWS CLI 명령을 사용하여 새 Amazon VPC를 생성합니다. 템플릿은 Amazon VPC 리소스를 설정하고 엔드포인트 정책을 수정하여 특정 대기열에 대한 액세스를 제한합니다.

1. CloudFormation [템플릿](samples/cfn-vpc-private-network.zip)을 다운로드한 다음, `.yml` 파일의 압축을 풉니다.

1. 새 명령 프롬프트 창에서 템플릿을 저장한 폴더로 이동한 다음, [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html)을 사용하여 스택을 생성합니다. `--template-body` 플래그는 템플릿의 경로를 지정합니다.

   ```
   aws cloudformation create-stack --stack-name stack-name --template-body file://cfn-vpc-private-network.yml
   ```

다음 섹션에서 Lambda 함수를 생성합니다.

## Lambda 함수 생성
<a name="tutorials-customer-managed-endpoints-create-lambda-function"></a>

다음 Python 코드 및 IAM JSON 정책을 사용하여 새 Lambda 함수 및 실행 역할을 생성합니다. 이 함수는 프라이빗 Apache Airflow 웹 서버 및 Amazon SQS 대기열에 대한 Amazon VPC 엔드포인트를 생성합니다. Amazon MWAA는 Amazon SQS를 사용하여 환경 규모를 조정할 때 여러 작업자 간에 Celery를 사용하여 작업을 대기열에 넣습니다.

1. Python [함수 코드](./samples/mwaa-lambda-shared-vpc.zip)를 다운로드합니다.

1. IAM [권한 정책](./samples/lambda-mwaa-shared-vpce-policy.zip)을 다운로드한 다음, 파일의 압축을 풉니다.

1. 명령 프롬프트를 연 다음, JSON 권한 정책을 저장한 폴더로 이동합니다. IAM [https://docs.aws.amazon.com/](https://docs.aws.amazon.com/) 명령을 사용하여 새 역할을 생성합니다.

   ```
   aws iam create-role --role-name function-role \
   						--assume-role-policy-document file://lambda-mwaa-vpce-policy.json
   ```

   AWS CLI 응답의 역할 ARN을 기록합니다. 다음 단계에서는 ARN을 사용하여 이 새로운 역할을 함수의 실행 역할로 지정합니다.

1. 함수 코드를 저장한 폴더로 이동한 다음, [https://docs.aws.amazon.com/](https://docs.aws.amazon.com/) 명령을 사용하여 새 함수를 생성합니다.

   ```
   aws lambda create-function --function-name mwaa-vpce-lambda \
   --zip-file file://mwaa-lambda-shared-vpc.zip --runtime python3.8 --role arn:aws:iam::123456789012:role/function-role --handler lambda_handler
   ```

   AWS CLI 응답의 함수 ARN을 기록합니다. 다음 단계에서는 함수를 새로운 EventBridge 규칙의 대상으로 구성하도록 ARN을 지정합니다.

다음 섹션에서는 환경이 `PENDING` 상태가 될 때 이 함수를 간접적으로 호출하는 EventBridge 규칙을 생성합니다.

## EventBridge 규칙 생성
<a name="tutorials-customer-managed-endpoints-create-eb-rule"></a>

다음을 수행하여 Amazon MWAA 알림을 수신 대기하고 새로운 Lambda 함수를 대상으로 하는 새 규칙을 생성합니다.

1. EventBridge `put-rule` 명령을 사용하여 새로운 EventBridge 이벤트 규칙을 생성합니다.

   ```
   aws events put-rule --name "mwaa-lambda-rule" \
   --event-pattern "{\"source\":[\"aws.airflow\"],\"detail-type\":[\"MWAA Environment Status Change\"]}"
   ```

   이벤트 패턴은 환경 상태가 변경될 때마다 Amazon MWAA가 보내는 알림을 수신 대기합니다.

   ```
   {
   					"source": ["aws.airflow"],
   					"detail-type": ["MWAA Environment Status Change"]
   					}
   ```

1. `put-targets` 명령을 사용하여 Lambda 함수를 새로운 규칙의 대상으로 추가합니다.

   ```
   aws events put-targets --rule "mwaa-lambda-rule" \
   --targets "Id"="1","Arn"="arn:aws:lambda:us-east-1:123456789012:function:mwaa-vpce-lambda"
   ```

이제 고객 관리형 Amazon VPC 엔드포인트를 사용하여 새로운 Amazon MWAA 환경을 생성할 수 있습니다.

## Amazon MWAA 환경 생성
<a name="tutorials-customer-managed-endpoints-create-mwaa"></a>

Amazon MWAA 콘솔을 사용하여 고객 관리형 Amazon VPC 엔드포인트로 새로운 환경을 생성합니다.

1. [Amazon MWAA](https://console.aws.amazon.com/mwaa/home/) 콘솔을 열고 **환경 생성**을 선택합니다.

1. **이름**에 고유한 이름을 입력합니다.

1. **Airflow 버전**에서 최신 버전을 선택합니다.

1. **Amazon S3 버킷** 및 환경에서 사용할 `dags/`와 같은 **DAG 폴더**를 선택한 후 **다음**을 선택합니다.

1. **고급 설정 구성** 페이지에서 다음을 수행합니다.

   1. **Virtual Private Cloud**의 경우, [이전 단계](#tutorials-customer-managed-endpoints-create-vpc)에서 생성한 Amazon VPC를 선택합니다.

   1. **웹 서버 액세스**의 경우 **퍼블릭 네트워크(인터넷 액세스 가능)**를 선택합니다.

   1. **보안 그룹**의 경우 CloudFormation으로 생성한 보안 그룹을 선택합니다. 이전 단계의 AWS PrivateLink 엔드포인트에 대한 보안 그룹은 자체 참조이므로 환경에 대해 동일한 보안 그룹을 선택해야 합니다.

   1. **엔드포인트 관리**에서 **고객 관리형 엔드포인트**를 선택합니다.

1. 나머지 기본 설정을 유지하고 **다음**을 선택합니다.

1. 선택 사항을 검토한 다음, **환경 생성**을 선택합니다.

**작은 정보**  
새로운 환경 설정에 대한 자세한 내용은 [Amazon MWAA 시작하기](get-started.md)를 참조하세요.

환경이 `PENDING`이면 Amazon MWAA에서 사용자가 규칙에 대해 설정한 이벤트 패턴과 일치하는 알림을 보냅니다. 이 규칙은 Lambda 함수를 간접적으로 호출합니다. 함수는 알림 이벤트를 구문 분석하고 웹 서버 및 Amazon SQS 대기열에 필요한 엔드포인트 정보를 가져옵니다. 그런 다음 Amazon VPC에 엔드포인트를 생성합니다.

엔드포인트를 사용할 수 있게 되면 Amazon MWAA에서 환경 생성을 재개합니다. 준비가 되면 환경 상태가 `AVAILABLE`로 변경되고 Amazon MWAA 콘솔을 사용하여 Apache Airflow 웹 서버에 액세스할 수 있습니다.