

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

# AWS AppSync에서 환경 변수 사용
<a name="environment-variables"></a>

환경 변수를 사용하면 코드를 업데이트하지 않고 AWS AppSync 해석기 및 함수의 동작을 조정할 수 있습니다. 환경 변수는 API 구성과 함께 저장된 문자열 쌍으로, 해석기와 함수가 런타임 시 활용할 수 있습니다. 초기 설정 중에만 사용할 수 있지만 실행 중에 해석기와 함수에서 사용해야 하는 구성 데이터를 참조해야 하는 상황에서 특히 유용합니다. 환경 변수는 코드에 구성 데이터를 노출하므로 해당 값을 하드 코딩할 필요가 없습니다.

**참고**  
데이터베이스 보안을 강화하려면 환경 변수 대신 [Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) 또는 [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html)를 사용하여 자격 증명 또는 민감한 정보를 저장하는 것이 좋습니다. 이 기능을 활용하려면 [AWS AppSync HTTP 데이터 소스로 AWS 서비스 간접 호출](https://docs.aws.amazon.com/appsync/latest/devguide/tutorial-http-resolvers-js.html#invoking-aws-services-js)을 참조하세요.

환경 변수가 제대로 작동하려면 몇 가지 동작과 규칙을 따라야 합니다.
+ JavaScript 해석기 및 함수 및 VTL 템플릿은 모두 환경 변수를 지원합니다.
+ 환경 변수는 함수 간접 호출 전에 평가되지 않습니다.
+ 환경 변수는 문자열 값**만** 지원합니다.
+ 환경 변수에 정의된 모든 값은 문자열 리터럴로 간주되며 확장되지 않습니다.
+ 변수 평가는 함수 코드에서 수행하는 것이 가장 좋습니다.

## 환경 변수 구성(콘솔)
<a name="configuring-environment-variables-console"></a>

변수를 생성하고 키-값 쌍을 정의하여 AWS AppSync GraphQL API의 환경 변수를 구성할 수 있습니다. 해석기와 함수는 환경 변수의 키 이름을 사용하여 런타임 시 값을 검색합니다. AWS AppSync 콘솔에서 환경 변수 설정: 

1. AWS Management Console에 로그인한 다음 [AppSync 콘솔](https://console.aws.amazon.com/appsync/)을 엽니다.

1. **API** 페이지에서 GraphQL API의 이름을 선택합니다.

1. API 홈페이지의 탐색 창에서 **설정** 을 선택합니다.

1. **환경 변수**에서 **환경 변수 추가**를 선택합니다.

1. **Add environment variable(환경 변수 추가)**을 선택합니다.

1. 키와 값을 입력합니다.

1. 필요한 경우 5단계와 6단계를 반복하여 키 값을 더 추가합니다. 키 값을 제거해야 할 경우 **제거** 옵션과 제거할 키(들)를 선택합니다.

1. **제출**을 선택합니다.

**작은 정보**  
키와 값을 생성할 때 따라야 하는 몇 가지 규칙이 있습니다.  
키는 문자로 시작해야 합니다.
키는 2자 이상이어야 합니다.
키에는 문자, 숫자 및 밑줄(\$1)만 포함됩니다.
값은 최대 512자일 수 있습니다.
GraphQL API에서 최대 50개의 키-값 쌍을 구성할 수 있습니다.

## 환경 변수 구성(API)
<a name="configuring-environment-variables-api"></a>

`PutGraphqlApiEnvironmentVariables`를 사용하여 API를 사용하여 환경 변수를 설정할 수 있습니다. 해당 CLI 명령은 `put-graphql-api-environment-variables`입니다.

`GetGraphqlApiEnvironmentVariables`를 사용하여 API를 사용하여 환경 변수를 검색할 수 있습니다. 해당 CLI 명령은 `get-graphql-api-environment-variables`입니다.

명령에는 API ID와 환경 변수 목록이 포함되어야 합니다.

```
aws appsync put-graphql-api-environment-variables \  
  --api-id "<api-id>" \
  --environment-variables '{"key1":"value1","key2":"value2", …}'
```

다음 예제에서는 `put-graphql-api-environment-variables` 명령을 사용하는 ID가 `abcdefghijklmnopqrstuvwxyz`인 API의 두 환경 변수를 설정합니다.

```
aws appsync put-graphql-api-environment-variables \  
  --api-id "abcdefghijklmnopqrstuvwxyz" \
  --environment-variables '{"USER_TABLE":"users_prod","DEBUG":"true"}'
```

`put-graphql-api-environment-variables` 명령을 사용하여 환경 변수를 적용하면 환경 변수의 구조 내용이 덮어써집니다. 즉, 기존 환경 변수가 사라집니다. 새 환경 변수를 추가할 때 기존 환경 변수를 유지하려면 요청에 새 환경 변수와 함께 **모든 기존의 키-값 쌍을 포함**합니다. 위의 예제에 따라 다음을 수행하여 `"EMPTY":""`를 추가할 수 있습니다.

```
aws appsync put-graphql-api-environment-variables \  
  --api-id "abcdefghijklmnopqrstuvwxyz" \
  --environment-variables '{"USER_TABLE":"users_prod","DEBUG":"true", "EMPTY":""}'
```

현재 구성을 검색하려면 `get-graphql-api-environment-variables` 명령을 사용합니다.

```
aws appsync get-graphql-api-environment-variables --api-id "<api-id>"
```

위의 예제에 따라 다음 명령을 사용할 수 있습니다.

```
aws appsync get-graphql-api-environment-variables --api-id "abcdefghijklmnopqrstuvwxyz"
```

결과는 환경 변수 목록과 키 값을 보여줍니다.

```
{
    "environmentVariables": {
        "USER_TABLE": "users_prod",
        "DEBUG": "true",
        "EMPTY": ""
    }
}
```

## 환경 변수 구성(CFN)
<a name="configuring-environment-variables-cfn"></a>

아래 템플릿을 사용하여 환경 변수를 생성할 수 있습니다.

```
AWSTemplateFormatVersion: 2010-09-09
Resources:
  GraphQLApiWithEnvVariables:
    Type: "AWS::AppSync::GraphQLApi"
    Properties:
      Name: "MyApiWithEnvVars"
      AuthenticationType: "AWS_IAM"
      EnvironmentVariables:
        EnvKey1: "non-empty"
        EnvKey2: ""
```

## 환경 변수 및 병합된 API
<a name="configuring-environment-variables-merged-api"></a>

소스 API에 정의된 환경 변수는 병합된 API에서도 사용할 수 있습니다. 병합된 API의 환경 변수는 읽기 전용이며 업데이트할 수 없습니다. 환경 변수 키는 병합에 성공하려면 모든 소스 API에서 고유해야 합니다. 중복 키는 항상 병합 실패를 초래합니다.

## 환경 변수 검색
<a name="retrieving-environment-variables"></a>

함수 코드에서 환경 변수를 검색하려면 해석기 및 함수의 `ctx.env` 객체에서 값을 검색합니다. 다음은 이 문제의 몇 가지 실제 예입니다.

------
#### [ Publishing to Amazon SNS ]

이 예제에서는 HTTP 해석기가 Amazon SNS 주제에 메시지를 보냅니다. 주제의 ARN은 GraphQL API를 정의하는 스택과 주제가 배포된 후에만 알 수 있습니다.

```
/**
 * Sends a publish request to the SNS topic
 */
export function request(ctx) {
    const TOPIC_ARN = ctx.env.TOPIC_ARN;
    const { input: values } = ctx.args;
    // this custom function sends values to the SNS topic
    return publishToSNSRequest(TOPIC_ARN, values);
}
```

------
#### [ Transactions with DynamoDB ]

이 예제에서는 API가 스테이징을 위해 배포되었거나 이미 프로덕션 상태인 경우 DynamoDB 테이블의 이름이 다릅니다. 해석기 코드는 변경할 필요가 없습니다. 환경 변수의 값은 API가 배포되는 위치에 따라 업데이트됩니다.

```
import { util } from '@aws-appsync/utils';
export function request(ctx) {
  const { authorId, postId } = ctx.args;
  return {
    operation: 'TransactWriteItems',
    transactItems: [
      {
        table: ctx.env.POST_TABLE,
        operation: 'PutItem',
        key: util.dynamodb.toMapValues({ postId }),
        // rest of the configuration
      },
      {
        table: ctx.env.AUTHOR_TABLE,
        operation: 'UpdateItem',
        key: util.dynamodb.toMapValues({ authorId }),
        // rest of the configuration
      },
    ],
  };
}
```

------