

새로운 *CloudFormation 템플릿 참조 안내서*입니다. 북마크와 링크를 업데이트하세요. CloudFormation을 시작하는 데 도움이 필요한 경우 [AWS CloudFormation 사용 설명서](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)를 참조하세요.

# `AWS::Serverless` 변환
<a name="transform-aws-serverless"></a>

이 주제에서는 `AWS::Serverless` 변형을 사용하여 AWS Serverless Application Model(AWS SAM) 구문으로 작성된 템플릿을 처리하고 규정 준수 CloudFormation 템플릿으로 변환하는 방법을 설명합니다.

`AWS::Serverless` 변환 사용에 대한 자세한 내용은 GitHub의 [AWS SAM transform](https://github.com/aws/serverless-application-model)을 참조하세요.

## 사용법
<a name="aws-serverless-usage"></a>

`AWS::Serverless` 변환을 사용하려면 CloudFormation 템플릿의 최상위 수준에서 이를 선언해야 합니다. 다른 템플릿 섹션에 포함된 변환으로 `AWS::Serverless`을 사용할 수 없습니다.

선언에서는 리터럴 문자열 `AWS::Serverless-2016-10-31`을 해당 값으로 사용해야 합니다. 파라미터나 함수를 사용하여 변환 값을 지정할 수 없습니다.

### 구문
<a name="aws-serverless-syntax"></a>

CloudFormation 템플릿에서 이 변환을 선언하려면 다음 구문을 사용합니다.

#### JSON
<a name="aws-serverless-syntax.json"></a>

```
{
  "Transform":"AWS::Serverless-2016-10-31",
  "Resources":{
    ...
  }
}
```

#### YAML
<a name="aws-serverless-syntax.yaml"></a>

```
Transform: AWS::Serverless-2016-10-31
Resources:
  ...
```

`AWS::Serverless` 변환은 추가 파라미터가 없는 독립 실행형 선언입니다.

## 예제
<a name="aws-serverless-examples"></a>

다음 예제에서는 `AWS::Serverless` 변환 및 AWS SAM 구문을 사용하여 Lambda 함수 및 해당 실행 역할의 선언을 간소화하는 방법을 보여줍니다.

### JSON
<a name="aws-serverless-example.json"></a>

```
{
  "Transform":"AWS::Serverless-2016-10-31",
  "Resources":{
    "MyFunction":{
      "Type":"AWS::Serverless::Function",
      "Properties":{
        "Handler":"index.handler",
        "Runtime":"nodejs20.x",
        "CodeUri":"s3://amzn-s3-demo-bucket/MySourceCode.zip"
      }
    }
  }
}
```

### YAML
<a name="aws-serverless-example.yaml"></a>

```
Transform: AWS::Serverless-2016-10-31
Resources:
  MyFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: index.handler
      Runtime: nodejs20.x
      CodeUri: 's3://amzn-s3-demo-bucket/MySourceCode.zip'
```

템플릿에서 변경 세트 생성 시 CloudFormation은 변환에서 정의한 대로 AWS SAM 구문을 확장합니다. 처리된 템플릿은 Lambda 함수 및 실행 역할을 선언하며 `AWS::Serverless::Function` 리소스를 확장합니다.

```
{
  "Resources": {
    "MyFunction": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Handler": "index.handler",
        "Code": {
          "S3Bucket": "amzn-s3-demo-bucket",
          "S3Key": "MySourceCode.zip"
        },
        "Role": {
          "Fn::GetAtt": ["MyFunctionRole", "Arn"]
        },
        "Runtime": "nodejs20.x"
      }
    },
    "MyFunctionRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "ManagedPolicyArns": ["arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"],
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",		 	 	 
          "Statement": [{
            "Action": ["sts:AssumeRole"],
            "Effect": "Allow",
            "Principal": {
              "Service": ["lambda.amazonaws.com"]
            }
          }]
        }
      }
    }
  }
}
```

## `AWS::LanguageExtensions`과 함께 `AWS::Serverless` 사용
<a name="aws-serverless-language-extensions"></a>

`AWS::Serverless` 및 `AWS::LanguageExtensions` 변환을 모두 사용하는 경우 `AWS::ApiGateway::Stage`와 같은 리소스를 참조하려면 스테이지 이름이 비 `NoEcho` 파라미터 값으로 전달될 때 특수 구문이 필요합니다.

참조(`MyApi.Stage`)에 AWS SAM 구문을 사용하는 대신 `Fn::Sub`를 사용하여 논리적 ID 참조를 생성합니다. 예를 들어 `"Ref": {"Fn::Sub": "${MyApi}${StageName}Stage"}`입니다. 이렇게 하면 런타임 시 올바른 논리적 ID가 빌드됩니다.

이 특수 형식의 이유는 두 변환이 값을 다르게 처리하기 때문입니다.
+ `AWS::LanguageExtensions`는 내장 함수를 실제 값으로 해석합니다.
+ `AWS::Serverless`는 정적 값을 수신하는지 아니면 내장 함수를 수신하는지에 따라 서로 다른 논리적 ID를 생성합니다.

## 관련 리소스
<a name="aws-serverless-related-resources"></a>

서버리스 애플리케이션과 AWS Serverless Application Model(AWS SAM)에 대한 자세한 내용은 [AWS Serverless Application Model 개발자 안내서](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html)를 참조하세요.

AWS SAM에 특정한 리소스 및 속성 유형은 *AWS Serverless Application Model 개발자 안내서*의 [AWS SAM resources and properties](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-specification-resources-and-properties.html)를 참조하세요.

매크로 사용에 대한 일반적인 정보는 *AWS CloudFormation 사용 설명서*의 [템플릿 매크로를 사용하여 CloudFormation 템플릿에서 사용자 지정 처리 수행](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html)을 참조하세요.