

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

# 를 사용하여 애플리케이션 및 리소스 배포 AWS SAM
<a name="serverless-deploying"></a>

애플리케이션을 배포하면 AWS 클라우드에서 AWS 리소스가 프로비저닝 및 구성되어 애플리케이션이 cloud. AWS SAM use에서 기본 배포 메커니즘[CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/)으로 실행됩니다.는 **sam build** 명령을 실행할 때 생성한 빌드 아티팩트를 서버리스 애플리케이션을 배포하기 위한 표준 입력으로 AWS SAM 사용합니다.

를 사용하면 서버리스 애플리케이션을 수동으로 AWS SAM배포하거나 배포를 자동화할 수 있습니다. 배포를 자동화하려면 선택한 지속적 통합 및 지속적 배포(CI/CD) 시스템과 함께 AWS SAM 파이프라인을 사용합니다. 배포 파이프라인은 서버리스 애플리케이션의 새 버전을 릴리스하기 위해 수행되는 자동화된 단계의 시퀀스입니다.

이 섹션의 주제에서는 자동 및 수동 배포 모두에 대한 지침을 제공합니다. 애플리케이션을 수동으로 배포하려면 AWS SAMCLI 명령을 사용합니다. 배포를 자동화하려면 이 섹션의 주제를 참조하세요. 특히 파이프라인과 CI/CD 시스템을 사용하여 배포를 자동화하는 것과 관련된 심층적인 콘텐츠를 제공합니다. 여기에는 스타터 파이프라인 생성, 자동화 설정, 배포 문제 해결, OpenID Connect(OIDC) 사용자 인증 사용, 배포 시 로컬 파일 업로드 등이 포함됩니다.

**Topics**
+ [

# 를 사용한 배포 소개 AWS SAM
](using-sam-cli-deploy.md)
+ [

# 를 사용하여 애플리케이션을 배포하는 옵션 AWS SAM
](deploying-options.md)
+ [

# CI/CD 시스템 및 파이프라인을 사용하여 로 배포 AWS SAM
](deploying-cicd-overview.md)
+ [

# 를 사용하여 sam sync에 동기화 소개 AWS 클라우드
](using-sam-cli-sync.md)

# 를 사용한 배포 소개 AWS SAM
<a name="using-sam-cli-deploy"></a>

 AWS Serverless Application Model 명령줄 인터페이스(AWS SAM CLI) `sam deploy` 명령을 사용하여 서버리스 애플리케이션을에 배포합니다 AWS 클라우드.
+ 에 대한 소개는 단원을 AWS SAM CLI참조하십시오[란 무엇입니까 AWS SAM CLI?](what-is-sam-overview.md#what-is-sam-cli).
+ `sam deploy` 명령 옵션 목록은 [sam deploy](sam-cli-command-reference-sam-deploy.md) 섹션을 참조하세요.
+ 일반적인 개발 워크플로 중 `sam deploy`를 사용하는 예는 [3단계:에 애플리케이션 배포 AWS 클라우드](serverless-getting-started-hello-world.md#serverless-getting-started-hello-world-deploy) 섹션을 참조하세요.

**Topics**
+ [

## 사전 조건
](#using-sam-cli-deploy-prerequisites)
+ [

## sam deploy를 사용하여 애플리케이션 배포하기
](#using-sam-cli-deploy-deploying)
+ [

## 모범 사례
](#using-sam-cli-deploy-best)
+ [

## sam deploy 옵션
](#using-sam-cli-deploy-options)
+ [

## 문제 해결
](#using-sam-cli-deploy-troubleshooting)
+ [

## 예제
](#using-sam-cli-deploy-examples)
+ [

## 자세히 알아보기
](#using-sam-cli-deploy-learn)

## 사전 조건
<a name="using-sam-cli-deploy-prerequisites"></a>

`sam deploy`를 사용하려면 다음을 완료하여 AWS SAM CLI를 설치합니다.
+ [AWS SAM 사전 조건](prerequisites.md).
+ [AWS SAM CLI 설치](install-sam-cli.md).

`sam deploy`를 사용하기 전에 다음 사항에 대한 기본적인 이해를 하는 것이 좋습니다.
+ [AWS SAM CLI 구성](using-sam-cli-configure.md).
+ [에서 애플리케이션 생성 AWS SAM](using-sam-cli-init.md).
+ [를 사용한 빌드 소개 AWS SAM](using-sam-cli-build.md).

## sam deploy를 사용하여 애플리케이션 배포하기
<a name="using-sam-cli-deploy-deploying"></a>

서버리스 애플리케이션을 처음 배포하는 경우 `--guided` 옵션을 사용합니다. AWS SAMCLI는 애플리케이션의 배포 설정을 구성하는 대화형 흐름을 안내합니다.

**대화형 흐름을 사용하여 애플리케이션을 배포하려면**

1. 프로젝트의 루트 디렉터리로 이동합니다. 템플릿과 동일한 위치입니다 AWS SAM .

   ```
   $ cd sam-app
   ```

1. 다음 명령을 실행합니다.

   ```
   $ sam deploy --guided
   ```

1. 대화형 흐름 중에 AWS SAMCLI에 애플리케이션의 배포 설정을 구성할 수 있는 옵션을 묻는 메시지가 표시됩니다.

   대괄호(`[ ]`)는 기본값을 나타냅니다. 기본값을 선택하려면 답을 비워둡니다. 기본값은 다음 구성 파일에서 가져옵니다.
   + `~/.aws/config` - 일반 AWS 계정 설정입니다.
   + `~/.aws/credentials` - AWS 계정 자격 증명입니다.
   + `<project>/samconfig.toml` - 프로젝트의 구성 파일.

    AWS SAMCLI 프롬프트에 응답하여 값을 제공합니다. 예를 들어, **예(yes)**는 `y`, **아니요(no)**는 `n`, 또는 문자열 값을 입력할 수 있습니다.

    AWS SAMCLI는 프로젝트 `samconfig.toml` 파일에 응답을 기록합니다. 후속 배포의 경우 `sam deploy`를 사용하여 이러한 구성된 값을 사용해 배포할 수 있습니다. 이러한 값을 재구성하려면 다시 `sam deploy --guided`를 사용하거나 직접 구성 파일을 수정합니다.

   다음은 출력의 예제입니다.

   ```
   sam-app $ sam deploy --guided
   
   Configuring SAM deploy
   ======================
   
           Looking for config file [samconfig.toml] :  Found
           Reading default arguments  :  Success
   
           Setting default arguments for 'sam deploy'
           =========================================
           Stack Name [sam-app]: ENTER
           AWS Region [us-west-2]: ENTER
           #Shows you resources changes to be deployed and require a 'Y' to initiate deploy
           Confirm changes before deploy [Y/n]: ENTER
           #SAM needs permission to be able to create roles to connect to the resources in your template
           Allow SAM CLI IAM role creation [Y/n]: ENTER
           #Preserves the state of previously provisioned resources when an operation fails
           Disable rollback [y/N]: ENTER
           HelloWorldFunction may not have authorization defined, Is this okay? [y/N]: y
           Save arguments to configuration file [Y/n]: ENTER
           SAM configuration file [samconfig.toml]: ENTER
           SAM configuration environment [default]: ENTER
   ```

1. 다음으로는 AWS SAM CLI 애플리케이션을에 배포합니다 AWS 클라우드. 배포하는 동안 명령 프롬프트에 진행 상황이 표시됩니다. 배포의 주요 단계는 다음과 같습니다.
   +  AWS Lambda 함수가 .zip 파일 아카이브로 패키징된 애플리케이션의 경우는 AWS SAM CLI 패키지를 압축하여 Amazon Simple Storage Service(Amazon S3) 버킷에 업로드합니다. 필요한 경우 AWS SAMCLI가 새 버킷을 생성합니다.
   + Lambda 함수가 컨테이너 이미지로 패키징되는 애플리케이션의 경우, AWS SAMCLI는 Amazon Elastic Container Registry(Amazon ECR)에 이미지를 업로드합니다. 필요한 경우 AWS SAMCLI가 새 리포지토리를 생성합니다.
   + 는 AWS SAM CLI AWS CloudFormation 변경 세트를 생성하고 애플리케이션을 스택 CloudFormation 으로에 배포합니다.
   + 는 AWS SAM CLI Lambda 함수의 새 `CodeUri` 값으로 배포된 AWS SAM 템플릿을 수정합니다.

   다음은 AWS SAM CLI 배포의 예제입니다.

   ```
           Looking for resources needed for deployment:
   
           Managed S3 bucket: aws-sam-cli-managed-default-samclisam-s3-demo-bucket-1a4x26zbcdkqr
           A different default S3 bucket can be set in samconfig.toml and auto resolution of buckets turned off by setting resolve_s3=False
   
           Parameter "stack_name=sam-app" in [default.deploy.parameters] is defined as a global parameter [default.global.parameters].
           This parameter will be only saved under [default.global.parameters] in /Users/.../sam-app/samconfig.toml.
   
           Saved arguments to config file
           Running 'sam deploy' for future deployments will use the parameters saved above.
           The above parameters can be changed by modifying samconfig.toml
           Learn more about samconfig.toml syntax at 
           https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-config.html
   
           Uploading to sam-app-zip/da3c598813f1c2151579b73ad788cac8  262144 / 619839  (42.29%)Uploading to sam-app-zip/da3c598813f1c2151579b73ad788cac8  524288 / 619839  (84.58%)Uploading to sam-app-zip/da3c598813f1c2151579b73ad788cac8  619839 / 619839  (100.00%)
   
           Deploying with following values
           ===============================
           Stack name                   : sam-app
           Region                       : us-west-2
           Confirm changeset            : True
           Disable rollback             : False
           Deployment s3 bucket         : aws-sam-cli-managed-default-samclisam-s3-demo-bucket-1a4x26zbcdkqr
           Capabilities                 : ["CAPABILITY_IAM"]
           Parameter overrides          : {}
           Signing Profiles             : {}
   
   Initiating deployment
   =====================
   
           Uploading to sam-app-zip/be84c20f868068e4dc4a2c11966edf2d.template  1212 / 1212  (100.00%)
   
   
   Waiting for changeset to be created..
   
   CloudFormation stack changeset
   -------------------------------------------------------------------------------------------------
   Operation                LogicalResourceId        ResourceType             Replacement            
   -------------------------------------------------------------------------------------------------
   + Add                    HelloWorldFunctionHell   AWS::Lambda::Permissio   N/A                    
                            oWorldPermissionProd     n                                               
   + Add                    HelloWorldFunctionRole   AWS::IAM::Role           N/A                    
   + Add                    HelloWorldFunction       AWS::Lambda::Function    N/A                    
   + Add                    ServerlessRestApiDeplo   AWS::ApiGateway::Deplo   N/A                    
                            yment47fc2d5f9d          yment                                           
   + Add                    ServerlessRestApiProdS   AWS::ApiGateway::Stage   N/A                    
                            tage                                                                     
   + Add                    ServerlessRestApi        AWS::ApiGateway::RestA   N/A                    
                                                     pi                                              
   -------------------------------------------------------------------------------------------------
   
   
   Changeset created successfully. arn:aws:cloudformation:us-west-2:012345678910:changeSet/samcli-deploy1680559234/d9f58a77-98bc-41cd-b9f4-433a5a450d7a
   
   
   Previewing CloudFormation changeset before deployment
   ======================================================
   Deploy this changeset? [y/N]: y
   
   2023-04-03 12:00:50 - Waiting for stack create/update to complete
   
   CloudFormation events from stack operations (refresh every 5.0 seconds)
   -------------------------------------------------------------------------------------------------
   ResourceStatus           ResourceType             LogicalResourceId        ResourceStatusReason   
   -------------------------------------------------------------------------------------------------
   CREATE_IN_PROGRESS       AWS::IAM::Role           HelloWorldFunctionRole   -                      
   CREATE_IN_PROGRESS       AWS::IAM::Role           HelloWorldFunctionRole   Resource creation      
                                                                              Initiated              
   CREATE_COMPLETE          AWS::IAM::Role           HelloWorldFunctionRole   -                      
   CREATE_IN_PROGRESS       AWS::Lambda::Function    HelloWorldFunction       -                      
   CREATE_IN_PROGRESS       AWS::Lambda::Function    HelloWorldFunction       Resource creation      
                                                                              Initiated              
   CREATE_COMPLETE          AWS::Lambda::Function    HelloWorldFunction       -                      
   CREATE_IN_PROGRESS       AWS::ApiGateway::RestA   ServerlessRestApi        -                      
                            pi                                                                       
   CREATE_IN_PROGRESS       AWS::ApiGateway::RestA   ServerlessRestApi        Resource creation      
                            pi                                                Initiated              
   CREATE_COMPLETE          AWS::ApiGateway::RestA   ServerlessRestApi        -                      
                            pi                                                                       
   CREATE_IN_PROGRESS       AWS::Lambda::Permissio   HelloWorldFunctionHell   -                      
                            n                        oWorldPermissionProd                            
   CREATE_IN_PROGRESS       AWS::ApiGateway::Deplo   ServerlessRestApiDeplo   -                      
                            yment                    yment47fc2d5f9d                                 
   CREATE_IN_PROGRESS       AWS::Lambda::Permissio   HelloWorldFunctionHell   Resource creation      
                            n                        oWorldPermissionProd     Initiated              
   CREATE_IN_PROGRESS       AWS::ApiGateway::Deplo   ServerlessRestApiDeplo   Resource creation      
                            yment                    yment47fc2d5f9d          Initiated              
   CREATE_COMPLETE          AWS::ApiGateway::Deplo   ServerlessRestApiDeplo   -                      
                            yment                    yment47fc2d5f9d                                 
   CREATE_IN_PROGRESS       AWS::ApiGateway::Stage   ServerlessRestApiProdS   -                      
                                                     tage                                            
   CREATE_IN_PROGRESS       AWS::ApiGateway::Stage   ServerlessRestApiProdS   Resource creation      
                                                     tage                     Initiated              
   CREATE_COMPLETE          AWS::ApiGateway::Stage   ServerlessRestApiProdS   -                      
                                                     tage                                            
   CREATE_COMPLETE          AWS::Lambda::Permissio   HelloWorldFunctionHell   -                      
                            n                        oWorldPermissionProd                            
   CREATE_COMPLETE          AWS::CloudFormation::S   sam-app-zip              -                      
                            tack                                                                     
   -------------------------------------------------------------------------------------------------
   
   CloudFormation outputs from deployed stack
   -------------------------------------------------------------------------------------------------
   Outputs                                                                                         
   -------------------------------------------------------------------------------------------------
   Key                 HelloWorldFunctionIamRole                                                   
   Description         Implicit IAM Role created for Hello World function                          
   Value               arn:aws:iam::012345678910:role/sam-app-zip-                                 
   HelloWorldFunctionRole-11ZOGSCG28H0M                                                            
   
   Key                 HelloWorldApi                                                               
   Description         API Gateway endpoint URL for Prod stage for Hello World function            
   Value               https://njzfhdmls0.execute-api.us-west-2.amazonaws.com/Prod/hello/          
   
   Key                 HelloWorldFunction                                                          
   Description         Hello World Lambda Function ARN                                             
   Value               arn:aws:lambda:us-west-2:012345678910:function:sam-app-                 
   HelloWorldFunction-XPqNX4TBu7qn                                                                 
   -------------------------------------------------------------------------------------------------
   
   
   Successfully created/updated stack - sam-app-zip in us-west-2
   ```

1. 배포한 애플리케이션을 보려면 다음 작업을 수행합니다.

   1. URL [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 콘솔을 CloudFormation 직접 엽니다.

   1. **스택**을 선택합니다.

   1. 애플리케이션 이름으로 스택을 식별하고 선택합니다.

### 배포 전에 변경 사항을 확인합니다.
<a name="using-sam-cli-deploy-deploying-changes"></a>

 CloudFormation 변경 세트를 표시하고 배포하기 전에 확인을 요청하도록를 구성할 AWS SAM CLI 수 있습니다.

**배포 전에 변경 내용을 확인하려면**

1. `sam deploy --guided` 중에 **Y**를 입력하여 배포 전에 변경 사항을 확인합니다.

   ```
   #Shows you resources changes to be deployed and require a 'Y' to initiate deploy
   Confirm changes before deploy [Y/n]: Y
   ```

   또는 다음과 같이 `samconfig.toml` 파일을 수정할 수 있습니다.

   ```
   [default.deploy]
   [default.deploy.parameters]
   confirm_changeset = true
   ```

1. 배포 중에, 배포 전에 변경 사항을 확인하라는 메시지가 AWS SAMCLI에 표시됩니다. 다음은 예제입니다.

   ```
   Waiting for changeset to be created..
   
   CloudFormation stack changeset
   -------------------------------------------------------------------------------------------------
   Operation                LogicalResourceId        ResourceType             Replacement            
   -------------------------------------------------------------------------------------------------
   + Add                    HelloWorldFunctionHell   AWS::Lambda::Permissio   N/A                    
                            oWorldPermissionProd     n                                               
   + Add                    HelloWorldFunctionRole   AWS::IAM::Role           N/A                    
   + Add                    HelloWorldFunction       AWS::Lambda::Function    N/A                    
   + Add                    ServerlessRestApiDeplo   AWS::ApiGateway::Deplo   N/A                    
                            yment47fc2d5f9d          yment                                           
   + Add                    ServerlessRestApiProdS   AWS::ApiGateway::Stage   N/A                    
                            tage                                                                     
   + Add                    ServerlessRestApi        AWS::ApiGateway::RestA   N/A                    
                                                     pi                                              
   -------------------------------------------------------------------------------------------------
   
   Changeset created successfully. arn:aws:cloudformation:us-west-2:012345678910:changeSet/samcli-deploy1680559234/d9f58a77-98bc-41cd-b9f4-433a5a450d7a
   Previewing CloudFormation changeset before deployment
   ======================================================
   Deploy this changeset? [y/N]: y
   ```

### 배포 중에 추가 파라미터 지정
<a name="using-sam-cli-deploy-deploying-params"></a>

배포 시 구성할 추가 파라미터 값을 지정할 수 있습니다. AWS SAM 템플릿을 수정하고 배포 중에 파라미터 값을 구성하여 이 작업을 수행할 수 있습니다.

**추가 파라미터를 지정하려면**

1.  AWS SAM 템플릿의 `Parameters` 섹션을 수정합니다. 다음은 예제입니다.

   ```
   AWSTemplateFormatVersion: '2010-09-09'
   Transform: AWS::Serverless-2016-10-31
   ...
   Globals:
   ...
   Parameters:
     DomainName:
       Type: String
       Default: example
       Description: Domain name
   ```

1. `sam deploy --guided`를 실행합니다. 다음은 출력의 예제입니다.

   ```
   sam-app $ sam deploy --guided
   
   Configuring SAM deploy
   ======================
   
           Looking for config file [samconfig.toml] :  Found
           Reading default arguments  :  Success
   
           Setting default arguments for 'sam deploy'
           =========================================
           Stack Name [sam-app-zip]: ENTER
           AWS Region [us-west-2]: ENTER
           Parameter DomainName [example]: ENTER
   ```

### Lambda 함수에 대한 코드 서명
<a name="using-sam-cli-deploy-deploying-signing"></a>

배포 시 Lambda 함수의 코드 서명을 구성할 수 있습니다. 이렇게 하려면 AWS SAM 템플릿을 수정하고 배포 중에 코드 서명을 구성해야 합니다.

**코드 서명을 구성하려면**

1.  AWS SAM 템플릿`CodeSigningConfigArn`에서를 지정합니다. 다음은 예제입니다.

   ```
   AWSTemplateFormatVersion: '2010-09-09'
   Transform: AWS::Serverless-2016-10-31
   ...
   Resources:
     HelloWorldFunction:
       Type: AWS::Serverless::Function
       Properties:
         CodeUri: hello_world/
         Handler: app.lambda_handler
         Runtime: python3.7
         CodeSigningConfigArn: arn:aws:lambda:us-east-1:111122223333:code-signing-config:csc-12e12345db1234567
   ```

1. `sam deploy --guided`를 실행합니다. AWS SAMCLI에 코드 서명을 구성하라는 메시지가 표시됩니다. 다음은 출력의 예제입니다.

   ```
   #Found code signing configurations in your function definitions
   Do you want to sign your code? [Y/n]: ENTER
   #Please provide signing profile details for the following functions & layers
   #Signing profile details for function 'HelloWorld'
   Signing Profile Name: 
   Signing Profile Owner Account ID (optional):
   #Signing profile details for layer 'MyLayer', which is used by functions {'HelloWorld'}
   Signing Profile Name: 
   Signing Profile Owner Account ID (optional):
   ```

## 모범 사례
<a name="using-sam-cli-deploy-best"></a>
+ `sam deploy`를 사용하면 AWS SAMCLI가 `.aws-sam` 디렉터리에 있는 애플리케이션의 빌드 아티팩트를 배포합니다. 애플리케이션의 원본 파일을 변경하는 경우 배포하기 전에 `sam build`를 실행하여 `.aws-sam`디렉터리를 업데이트합니다.
+ 애플리케이션을 처음 배포하는 경우 `sam deploy --guided`를 사용하여 배포 설정을 구성합니다. 후속 배포의 경우 `sam deploy`를 사용하여 구성된 설정으로 배포할 수 있습니다.

## sam deploy 옵션
<a name="using-sam-cli-deploy-options"></a>

다음은 `sam deploy`에 일반적으로 사용되는 옵션입니다. 콘텐츠 옵션 목록은 [sam deploy](sam-cli-command-reference-sam-deploy.md) 섹션을 참조하세요.

### 안내된 대화형 흐름을 사용하여 애플리케이션을 배포합니다.
<a name="using-sam-cli-deploy-options-guided"></a>

`--guided` 옵션을 사용하여 대화형 흐름을 통해 애플리케이션의 배포 설정을 구성할 수 있습니다. 다음은 예제입니다.

```
$ sam deploy --guided
```

애플리케이션의 배포 설정은 프로젝트 `samconfig.toml` 파일에 저장됩니다. 자세한 내용은 [프로젝트 설정 구성](using-sam-cli-configure.md#using-sam-cli-configure-project) 섹션을 참조하세요.

## 문제 해결
<a name="using-sam-cli-deploy-troubleshooting"></a>

문제를 해결하려면 섹션을 AWS SAM CLI참조하세요[AWS SAMCLI 문제 해결](sam-cli-troubleshooting.md).

## 예제
<a name="using-sam-cli-deploy-examples"></a>

### .zip 파일 아카이브로 패키징된 Lambda 함수를 포함하는 Hello World 애플리케이션을 배포합니다.
<a name="using-sam-cli-deploy-examples-example1"></a>

예제는 Hello World 애플리케이션 자습서의 [3단계:에 애플리케이션 배포 AWS 클라우드](serverless-getting-started-hello-world.md#serverless-getting-started-hello-world-deploy) 섹션을 참조하세요.

### 컨테이너 이미지로 패키징된 Lambda 함수를 포함하는 Hello World 애플리케이션을 배포합니다.
<a name="using-sam-cli-deploy-examples-example2"></a>

먼저 `sam init`를 사용하여 Hello World 애플리케이션을 만듭니다. 대화형 흐름 중에 `Python3.9` 런타임과 `Image` 패키지 유형을 선택합니다.

```
$ sam init
...
Which template source would you like to use?
        1 - AWS Quick Start Templates
        2 - Custom Template Location
Choice: 1

Choose an AWS Quick Start application template
        1 - Hello World Example
        2 - Multi-step workflow
        ...
Template: 1

Use the most popular runtime and package type? (Python and zip) [y/N]:  ENTER

Which runtime would you like to use?
        1 - aot.dotnet7 (provided.al2)
        ...
        15 - nodejs12.x
        16 - python3.9
        17 - python3.8
        ...
Runtime: 16

What package type would you like to use?
        1 - Zip
        2 - Image
Package type: 2

Based on your selections, the only dependency manager available is pip.
We will proceed copying the template using pip.
...
Project name [sam-app]: ENTER

    -----------------------
    Generating application:
    -----------------------
    Name: sam-app
    Base Image: amazon/python3.9-base
    Architectures: x86_64
    Dependency Manager: pip
    Output Directory: .
    Configuration file: sam-app/samconfig.toml

    Next steps can be found in the README file at sam-app/README.md
...
```

다음으로 프로젝트의 루트 디렉터리에 `cd`를 사용하여 `sam build`를 실행합니다. AWS SAMCLI는 Docker를 사용하여 로컬에서 Lambda 함수를 빌드합니다.

```
sam-app $ sam build
Building codeuri: /Users/.../sam-app runtime: None metadata: {'Dockerfile': 'Dockerfile', 'DockerContext': '/Users/.../sam-app/hello_world', 'DockerTag': 'python3.9-v1'} architecture: x86_64 functions: HelloWorldFunction
Building image for HelloWorldFunction function
Setting DockerBuildArgs: {} for HelloWorldFunction function
Step 1/5 : FROM public.ecr.aws/lambda/python:3.9
 ---> 0a5e3da309aa
Step 2/5 : COPY requirements.txt ./
 ---> abc4e82e85f9
Step 3/5 : RUN python3.9 -m pip install -r requirements.txt -t .
 ---> [Warning] The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
 ---> Running in 43845e7aa22d
Collecting requests
  Downloading requests-2.28.2-py3-none-any.whl (62 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 62.8/62.8 KB 829.5 kB/s eta 0:00:00
Collecting idna<4,>=2.5
  Downloading idna-3.4-py3-none-any.whl (61 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 61.5/61.5 KB 2.4 MB/s eta 0:00:00
Collecting charset-normalizer<4,>=2
  Downloading charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (199 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 199.2/199.2 KB 2.1 MB/s eta 0:00:00
Collecting certifi>=2017.4.17
  Downloading certifi-2022.12.7-py3-none-any.whl (155 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 155.3/155.3 KB 10.2 MB/s eta 0:00:00
Collecting urllib3<1.27,>=1.21.1
  Downloading urllib3-1.26.15-py2.py3-none-any.whl (140 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 140.9/140.9 KB 9.1 MB/s eta 0:00:00
Installing collected packages: urllib3, idna, charset-normalizer, certifi, requests
Successfully installed certifi-2022.12.7 charset-normalizer-3.1.0 idna-3.4 requests-2.28.2 urllib3-1.26.15
Removing intermediate container 43845e7aa22d
 ---> cab8ace899ce
Step 4/5 : COPY app.py ./
 ---> 4146f3cd69f2
Step 5/5 : CMD ["app.lambda_handler"]
 ---> [Warning] The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
 ---> Running in f4131ddffb31
Removing intermediate container f4131ddffb31
 ---> d2f5180b2154
Successfully built d2f5180b2154
Successfully tagged helloworldfunction:python3.9-v1


Build Succeeded

Built Artifacts  : .aws-sam/build
Built Template   : .aws-sam/build/template.yaml

Commands you can use next
=========================
[*] Validate SAM template: sam validate
[*] Invoke Function: sam local invoke
[*] Test Function in the Cloud: sam sync --stack-name {{stack-name}} --watch
[*] Deploy: sam deploy --guided
```

다음으로 `sam deploy --guided`를 실행하여 애플리케이션을 배포합니다. AWS SAMCLI는 배포 설정을 구성하는 방법을 안내합니다. 그런 다음는 AWS SAM CLI에 애플리케이션을 배포합니다 AWS 클라우드.

```
sam-app $ sam deploy --guided

Configuring SAM deploy
======================

        Looking for config file [samconfig.toml] :  Found
        Reading default arguments  :  Success

        Setting default arguments for 'sam deploy'
        =========================================
        Stack Name [sam-app]: ENTER
        AWS Region [us-west-2]: ENTER
        #Shows you resources changes to be deployed and require a 'Y' to initiate deploy
        Confirm changes before deploy [Y/n]: ENTER
        #SAM needs permission to be able to create roles to connect to the resources in your template
        Allow SAM CLI IAM role creation [Y/n]: ENTER
        #Preserves the state of previously provisioned resources when an operation fails
        Disable rollback [y/N]: ENTER
        HelloWorldFunction may not have authorization defined, Is this okay? [y/N]: y
        Save arguments to configuration file [Y/n]: ENTER
        SAM configuration file [samconfig.toml]: ENTER
        SAM configuration environment [default]: ENTER

        Looking for resources needed for deployment:

        Managed S3 bucket: aws-sam-cli-managed-default-samclisam-s3-demo-bucket-1a4x26zbcdkqr
        A different default S3 bucket can be set in samconfig.toml and auto resolution of buckets turned off by setting resolve_s3=False

        Parameter "stack_name=sam-app" in [default.deploy.parameters] is defined as a global parameter [default.global.parameters].
        This parameter will be only saved under [default.global.parameters] in /Users/.../sam-app/samconfig.toml.

        Saved arguments to config file
        Running 'sam deploy' for future deployments will use the parameters saved above.
        The above parameters can be changed by modifying samconfig.toml
        Learn more about samconfig.toml syntax at 
        https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-config.html

e95fc5e75742: Pushed 
d8df51e7bdd7: Pushed 
b1d0d7e0b34a: Pushed 
0071317b94d8: Pushed 
d98f98baf147: Pushed 
2d244e0816c6: Pushed 
eb2eeb1ebe42: Pushed 
a5ca065a3279: Pushed 
fe9e144829c9: Pushed 
helloworldfunction-d2f5180b2154-python3.9-v1: digest: sha256:cceb71401b47dc3007a7a1e1f2e0baf162999e0e6841d15954745ecc0c447533 size: 2206

        Deploying with following values
        ===============================
        Stack name                   : sam-app
        Region                       : us-west-2
        Confirm changeset            : True
        Disable rollback             : False
        Deployment image repository  : 
                                       {
                                           "HelloWorldFunction": "012345678910.dkr.ecr.us-west-2.amazonaws.com/samapp7427b055/helloworldfunction19d43fc4repo"
                                       }
        Deployment s3 bucket         : aws-sam-cli-managed-default-samclisam-s3-demo-bucket-1a4x26zbcdkqr
        Capabilities                 : ["CAPABILITY_IAM"]
        Parameter overrides          : {}
        Signing Profiles             : {}

Initiating deployment
=====================

HelloWorldFunction may not have authorization defined.
        Uploading to sam-app/682ad27c7cf7a17c7f77a1688b0844f2.template  1328 / 1328  (100.00%)


Waiting for changeset to be created..

CloudFormation stack changeset
-------------------------------------------------------------------------------------------------
Operation                LogicalResourceId        ResourceType             Replacement            
-------------------------------------------------------------------------------------------------
+ Add                    HelloWorldFunctionHell   AWS::Lambda::Permissio   N/A                    
                         oWorldPermissionProd     n                                               
+ Add                    HelloWorldFunctionRole   AWS::IAM::Role           N/A                    
+ Add                    HelloWorldFunction       AWS::Lambda::Function    N/A                    
+ Add                    ServerlessRestApiDeplo   AWS::ApiGateway::Deplo   N/A                    
                         yment47fc2d5f9d          yment                                           
+ Add                    ServerlessRestApiProdS   AWS::ApiGateway::Stage   N/A                    
                         tage                                                                     
+ Add                    ServerlessRestApi        AWS::ApiGateway::RestA   N/A                    
                                                  pi                                              
-------------------------------------------------------------------------------------------------


Changeset created successfully. arn:aws:cloudformation:us-west-2:012345678910:changeSet/samcli-deploy1680634124/0ffd4faf-2e2b-487e-b9e0-9116e8299ac4


Previewing CloudFormation changeset before deployment
======================================================
Deploy this changeset? [y/N]: y

2023-04-04 08:49:15 - Waiting for stack create/update to complete

CloudFormation events from stack operations (refresh every 5.0 seconds)
-------------------------------------------------------------------------------------------------
ResourceStatus           ResourceType             LogicalResourceId        ResourceStatusReason   
-------------------------------------------------------------------------------------------------
CREATE_IN_PROGRESS       AWS::CloudFormation::S   sam-app                  User Initiated         
                         tack                                                                     
CREATE_IN_PROGRESS       AWS::IAM::Role           HelloWorldFunctionRole   -                      
CREATE_IN_PROGRESS       AWS::IAM::Role           HelloWorldFunctionRole   Resource creation      
                                                                           Initiated              
CREATE_COMPLETE          AWS::IAM::Role           HelloWorldFunctionRole   -                      
CREATE_IN_PROGRESS       AWS::Lambda::Function    HelloWorldFunction       -                      
CREATE_IN_PROGRESS       AWS::Lambda::Function    HelloWorldFunction       Resource creation      
                                                                           Initiated              
CREATE_COMPLETE          AWS::Lambda::Function    HelloWorldFunction       -                      
CREATE_IN_PROGRESS       AWS::ApiGateway::RestA   ServerlessRestApi        -                      
                         pi                                                                       
CREATE_IN_PROGRESS       AWS::ApiGateway::RestA   ServerlessRestApi        Resource creation      
                         pi                                                Initiated              
CREATE_COMPLETE          AWS::ApiGateway::RestA   ServerlessRestApi        -                      
                         pi                                                                       
CREATE_IN_PROGRESS       AWS::Lambda::Permissio   HelloWorldFunctionHell   -                      
                         n                        oWorldPermissionProd                            
CREATE_IN_PROGRESS       AWS::ApiGateway::Deplo   ServerlessRestApiDeplo   -                      
                         yment                    yment47fc2d5f9d                                 
CREATE_IN_PROGRESS       AWS::Lambda::Permissio   HelloWorldFunctionHell   Resource creation      
                         n                        oWorldPermissionProd     Initiated              
CREATE_IN_PROGRESS       AWS::ApiGateway::Deplo   ServerlessRestApiDeplo   Resource creation      
                         yment                    yment47fc2d5f9d          Initiated              
CREATE_COMPLETE          AWS::ApiGateway::Deplo   ServerlessRestApiDeplo   -                      
                         yment                    yment47fc2d5f9d                                 
CREATE_IN_PROGRESS       AWS::ApiGateway::Stage   ServerlessRestApiProdS   -                      
                                                  tage                                            
CREATE_IN_PROGRESS       AWS::ApiGateway::Stage   ServerlessRestApiProdS   Resource creation      
                                                  tage                     Initiated              
CREATE_COMPLETE          AWS::ApiGateway::Stage   ServerlessRestApiProdS   -                      
                                                  tage                                            
CREATE_COMPLETE          AWS::Lambda::Permissio   HelloWorldFunctionHell   -                      
                         n                        oWorldPermissionProd                            
CREATE_COMPLETE          AWS::CloudFormation::S   sam-app                  -                      
                         tack                                                                     
-------------------------------------------------------------------------------------------------

CloudFormation outputs from deployed stack
-------------------------------------------------------------------------------------------------
Outputs                                                                                         
-------------------------------------------------------------------------------------------------
Key                 HelloWorldFunctionIamRole                                                   
Description         Implicit IAM Role created for Hello World function                          
Value               arn:aws:iam::012345678910:role/sam-app-HelloWorldFunctionRole-JFML1JOKHJ71  

Key                 HelloWorldApi                                                               
Description         API Gateway endpoint URL for Prod stage for Hello World function            
Value               https://endlwiqqod.execute-api.us-west-2.amazonaws.com/Prod/hello/          

Key                 HelloWorldFunction                                                          
Description         Hello World Lambda Function ARN                                             
Value               arn:aws:lambda:us-west-2:012345678910:function:sam-app-HelloWorldFunction-  
kyg6Y2iNRUPg                                                                                    
-------------------------------------------------------------------------------------------------


Successfully created/updated stack - sam-app in us-west-2
```

## 자세히 알아보기
<a name="using-sam-cli-deploy-learn"></a>

`sam deploy` 명령 사용에 AWS SAM CLI 대한 자세한 내용은 다음을 참조하세요.
+ **[전체 AWS SAM 워크숍: 모듈 3 - 수동 배포](https://s12d.com/sam-ws-en-manual-deploy)** -를 사용하여 서버리스 애플리케이션을 빌드, 패키징 및 배포하는 방법을 알아봅니다 AWS SAM CLI.

# 를 사용하여 애플리케이션을 배포하는 옵션 AWS SAM
<a name="deploying-options"></a>

를 사용하면 애플리케이션을 수동으로 배포하고 배포를 자동화 AWS SAM할 수 있습니다. AWS SAM CLI를 사용하여 애플리케이션을 수동으로 배포합니다. 배포를 자동화하려면 파이프라인과 지속적 통합 및 지속적 배포(CI/CD) 시스템을 사용합니다. 이 섹션의 주제에서는 두 접근 방식 모두에 대한 정보를 제공합니다.

**Topics**
+ [

## AWS SAM CLI를 사용하여 수동으로 배포하는 방법
](#serverless-sam-cli-using-package-and-deploy)
+ [

## CI/CD 시스템 및 파이프라인을 사용하여 배포
](#serverless-deploying-ci-cd)
+ [

## 점진적 배포
](#serverless-deploying-gradual)
+ [

## AWS SAM CLI를 이용한 배포 문제 해결
](#serverless-deploying-troubleshooting)
+ [

## 자세히 알아보기
](#serverless-sam-cli-using-invoke-learn)

## AWS SAM CLI를 사용하여 수동으로 배포하는 방법
<a name="serverless-sam-cli-using-package-and-deploy"></a>

로컬에서 서버리스 애플리케이션을 개발하고 테스트한 후 **[sam deploy](sam-cli-command-reference-sam-deploy.md)** 명령을 사용하여 애플리케이션을 배포할 수 있습니다.

프롬프트를 사용하여 배포를 AWS SAM 안내하려면 **--guided** 플래그를 지정합니다. 이 플래그를 지정하면 **sam deploy** 명령은 애플리케이션 아티팩트를 압축하여 Amazon Simple Storage Service(Amazon S3)(.zip 파일 아카이브용) 또는 Amazon Elastic Container Registry(Amazon ECR)(컨테이너 이미지용)에 업로드합니다. 그런 다음 명령은 애플리케이션을 AWS 클라우드에 배포합니다.

**예:**

```
# Deploy an application using prompts:
sam deploy --guided
```

## CI/CD 시스템 및 파이프라인을 사용하여 배포
<a name="serverless-deploying-ci-cd"></a>

AWS SAM 를 사용하면 파이프라인과 지속적 통합 및 지속적 배포(CI/CD) 시스템을 사용하여 배포를 자동화할 AWS SAM 수 있습니다. 파이프라인을 생성하고 서버리스 애플리케이션의 CI/CD 작업을 간소화하는 데 사용할 수 있습니다. 여러 CI/CD 시스템은 AWS SAM 빌드 컨테이너 이미지를 지원하며, AWS의 배포 모범 사례를 캡슐화하는 여러 CI/CD 시스템에 대한 기본 파이프라인 템플릿 세트 AWS SAM 도 제공합니다.

자세한 내용은 [CI/CD 시스템 및 파이프라인을 사용하여 로 배포 AWS SAM](deploying-cicd-overview.md) 단원을 참조하십시오.

## 점진적 배포
<a name="serverless-deploying-gradual"></a>

 AWS SAM 애플리케이션을 한 번에 모두 배포하지 않고 점진적으로 배포하려는 경우 AWS CodeDeploy 에서 제공하는 배포 구성을 지정할 수 있습니다. 자세한 정보는 *AWS CodeDeploy 사용자 가이드*의 [CodeDeploy에서 배포 구성으로 작업](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-configurations.html)을 잠조하세요.

 AWS SAM 애플리케이션을 점진적으로 배포하도록 구성하는 방법에 대한 자세한 내용은 섹션을 참조하세요[를 사용하여 서버리스 애플리케이션 점진적으로 배포 AWS SAM](automating-updates-to-serverless-apps.md).

## AWS SAM CLI를 이용한 배포 문제 해결
<a name="serverless-deploying-troubleshooting"></a>

### AWS SAM CLI오류: “보안 제약 조건이 충족되지 않았음”
<a name="troubleshooting-security-constraints"></a>

**sam deploy --guided** 실행 중에 질문 `HelloWorldFunction may not have authorization defined, Is this okay? [y/N]`을 묻는 메시지가 표시됩니다. 이 프롬프트에 **N**(기본 응답)으로 응답하면 다음 오류가 표시됩니다.

```
 
Error: Security Constraints Not Satisfied
```

귀하가 배포하려는 애플리케이션에 승인 없이 Amazon API Gateway API가 구성되어 있을 수 있다는 메시지를 프롬프트가 표시합니다. 이 프롬프트에 **N**으로 응답하는 것은 괜찮지 않다고 말하는 것입니다.

이 문제를 해결할 수 있도록 다음 옵션이 제공됩니다.
+ 권한 부여를 통해 애플리케이션을 구성하세요. 권한 부여 구성에 대한 자세한 내용은을 잠조하세요[AWS SAM 템플릿을 사용하여 API 액세스 제어](serverless-controlling-access-to-apis.md)
+ 이 질문에 **Y**로 응답함으로써, 권한 없이 구성된 API Gateway API가 있는 애플리케이션을 배포해도 괜찮다는 의사를 표시하십시오.

## 자세히 알아보기
<a name="serverless-sam-cli-using-invoke-learn"></a>

서버리스 애플리케이션 배포의 실습 예제*는 전체 AWS SAM 워크숍*에서 다음을 참조하세요.
+ [모듈 3 - 수동 배포](https://s12d.com/sam-ws-en-manual-deploy) -를 사용하여 서버리스 애플리케이션을 빌드, 패키징 및 배포하는 방법을 알아봅니다 AWS SAM CLI.
+ [모듈 4 - CI/CD](https://s12d.com/sam-ws-en-cicd-deploy) - *지속적 통합 및 전달 (CI/CD)* 파이프라인을 만들어 빌드, 패키지, 배포 단계를 자동화하는 방법을 알아봅니다.

# CI/CD 시스템 및 파이프라인을 사용하여 로 배포 AWS SAM
<a name="deploying-cicd-overview"></a>

AWS SAM 는 조직이 선호하는 CI/CD 시스템에 대한 파이프라인을 생성하도록 지원하므로 배포 빈도 가속화, 변경 리드 타임 단축, 배포 오류 감소 등 최소한의 노력으로 CI/CD의 이점을 실현할 수 있습니다.

AWS SAM 는 컨테이너 이미지 빌드를 통해 서버리스 애플리케이션의 CI/CD 작업을 간소화합니다. 에서 AWS SAM 제공하는 이미지에는 지원되는 여러 AWS Lambda 런타임에 AWS SAM CLI 대한 및 빌드 도구가 포함되어 있습니다. 이렇게 하면를 사용하여 서버리스 애플리케이션을 더 쉽게 빌드하고 패키징할 수 있습니다 AWS SAM CLI. 또한 이러한 이미지를 사용하면 작업팀들이 CI/CD 시스템용 이미지를 직접 만들고 관리해야 할 필요성이 줄어듭니다. AWS SAM 빌드 컨테이너 이미지에 대한 자세한 내용은 섹션을 참조하세요[의 이미지 리포지토리 AWS SAM](serverless-image-repositories.md).

여러 CI/CD 시스템이 AWS SAM 빌드 컨테이너 이미지를 지원합니다. 사용해야 하는 CI/CD 시스템은 여러 요인에 따라 달라집니다. 여기에는 애플리케이션이 단일 런타임을 사용하는지 다중 런타임을 사용하는지, 컨테이너 이미지 내에 애플리케이션을 구축할지 아니면 가상 머신(VM) 또는 베어메탈 호스트와 같은 호스트 머신에 직접 빌드할지 여부가 포함됩니다.

AWS SAM 는의 AWS배포 모범 사례를 캡슐화하는 여러 CI/CD 시스템에 대한 기본 파이프라인 템플릿 세트도 제공합니다. 이러한 기본 파이프라인 템플릿은 표준 JSON/YAML 파이프라인 구성 형식을 사용하며, 내장된 모범 사례는 다중 계정 및 다중 지역 배포를 수행하고 파이프라인이 인프라를 의도하지 않게 변경할 수 없도록 확인하는 데 도움이 됩니다.

를 사용하여 서버리스 애플리케이션을 배포 AWS SAM 하는 두 가지 주요 옵션이 있습니다. 1) 명령을 사용하도록 AWS SAM CLI 기존 파이프라인 구성을 수정하거나 2) 자체 애플리케이션의 시작점으로 사용할 수 있는 예제 CI/CD 파이프라인 구성을 생성합니다.

**Topics**
+ [

## 파이프라인이란 무엇입니까?
](#deploying-whatis-pipeline)
+ [

# 가 배포 시 로컬 파일을 AWS SAM 업로드하는 방법
](deploy-upload-local-files.md)
+ [

# 를 사용하여 스타터 CI/CD 파이프라인 생성 AWS SAM
](serverless-generating-example-ci-cd.md)
+ [

# 를 사용하여 스타터 파이프라인을 사용자 지정하는 방법 AWS SAM
](serverless-customizing-starter-pipelines.md)
+ [

# AWS SAM 애플리케이션 배포 자동화
](serverless-deploying-modify-pipeline.md)
+ [

# AWS SAM 파이프라인에서 OIDC 인증을 사용하는 방법
](deploying-with-oidc.md)

## 파이프라인이란 무엇입니까?
<a name="deploying-whatis-pipeline"></a>

파이프라인은 애플리케이션의 새 버전을 릴리스하기 위해 수행되는 자동화된 단계의 시퀀스입니다. 를 사용하면 AWS SAM, [AWS CodePipeline](https://aws.amazon.com/codepipeline) [Jenkins](https://www.jenkins.io/), [GitLab CI/CD, GitHub Actions 등 많은 공통 CI/CD](https://docs.gitlab.com/ee/ci/) 시스템을 사용하여 애플리케이션을 배포할 수 있습니다. [GitHub ](https://github.com/features/actions)

파이프라인 템플릿에는 다중 계정 및 다중 리전 AWS 배포에 도움이 되는 배포 모범 사례가 포함되어 있습니다. 개발 및 프로덕션과 같은 AWS 환경은 일반적으로 서로 다른 AWS 계정에 존재합니다. 이를 통해 개발 팀은 의도하지 않은 인프라 변경을 방지하면서 안전한 배포 파이프라인을 구성할 수 있습니다.

고유한 사용자 지정 파이프라인 템플릿을 제공하여 전체 개발 팀에서 파이프라인을 표준화할 수도 있습니다.

# 가 배포 시 로컬 파일을 AWS SAM 업로드하는 방법
<a name="deploy-upload-local-files"></a>

애플리케이션을에 배포할 때 AWS 클라우드는 로컬 파일을 먼저 Amazon Simple Storage Service(Amazon S3)와 같은 액세스 가능한 AWS 서비스에 업로드해야 AWS CloudFormation 합니다. 여기에는 AWS SAM 템플릿이 참조하는 로컬 파일이 포함됩니다. 이 요구 사항을 충족하기 위해 `sam deploy` 또는 `sam package` 명령을 사용할 경우 AWS SAM CLI는 다음을 수행합니다.

1. 로컬 파일을 액세스 가능한 AWS 서비스에 자동으로 업로드합니다.

1. 새 파일 경로를 참조하도록 애플리케이션 템플릿을 자동으로 업데이트합니다.

**Topics**
+ [

## 데모: AWS SAMCLI를 사용하여 Lambda 함수 코드를 업로드합니다.
](#deploy-upload-local-files-demo)
+ [

## 지원되는 사용 사례
](#deploy-upload-local-files-use)
+ [

## 자세히 알아보기
](#deploy-upload-local-files-learn)

## 데모: AWS SAMCLI를 사용하여 Lambda 함수 코드를 업로드합니다.
<a name="deploy-upload-local-files-demo"></a>

이 데모에서는 Lambda 함수에 .zip 패키지 유형을 사용하여 샘플 Hello World 애플리케이션을 초기화합니다. AWS SAMCLI를 사용하여 Lambda 함수 코드를 Amazon S3에 자동으로 업로드하고 애플리케이션 템플릿에서 새 경로를 참조합니다.

먼저 Hello World 애플리케이션을 초기화하기 위해 `sam init`를 실행합니다.

```
$ sam init
...
Which template source would you like to use?
        1 - AWS Quick Start Templates
        2 - Custom Template Location
Choice: 1

Choose an AWS Quick Start application template
        1 - Hello World Example
        2 - Multi-step workflow
        ...
Template: 1

Use the most popular runtime and package type? (Python and zip) [y/N]: y

Would you like to enable X-Ray tracing on the function(s) in your application?  [y/N]: ENTER

Would you like to enable monitoring using CloudWatch Application Insights?
For more info, please view https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html [y/N]: ENTER

Project name [sam-app]: demo

    -----------------------
    Generating application:
    -----------------------
    Name: demo
    Runtime: python3.9
    Architectures: x86_64
    Dependency Manager: pip
    Application Template: hello-world
    Output Directory: .
    Configuration file: demo/samconfig.toml
    
...
```

Lambda 함수 코드는 프로젝트의 `hello_world` 하위 디렉터리에 구성되어 있습니다.

```
demo
├── README.md
├── hello_world
│   ├── __init__.py
│   ├── app.py
│   └── requirements.txt
├── template.yaml
└── tests
```

 AWS SAM 템플릿 내에서 `CodeUri` 속성을 사용하여 Lambda 함수 코드의 로컬 경로를 참조합니다.

```
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
...
Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
    Properties:
      CodeUri: hello_world/
      Handler: app.lambda_handler
      Runtime: python3.9
      ...
```

다음으로 애플리케이션을 빌드하고 배포를 준비하기 위해 `sam build`를 실행합니다.

```
$ sam build
Starting Build use cache
Manifest file is changed (new hash: 3298f13049d19cffaa37ca931dd4d421) or dependency folder (.aws-sam/deps/7896875f-9bcc-4350-8adb-2c1d543627a1) is missing for (HelloWorldFunction), downloading dependencies and copying/building source
Building codeuri: /Users/.../demo/hello_world runtime: python3.9 metadata: {} architecture: x86_64 functions: HelloWorldFunction
Running PythonPipBuilder:CleanUp
Running PythonPipBuilder:ResolveDependencies
Running PythonPipBuilder:CopySource
Running PythonPipBuilder:CopySource

Build Succeeded

Built Artifacts  : .aws-sam/build
Built Template   : .aws-sam/build/template.yaml
...
```

다음으로 `sam deploy --guided`를 실행하여 애플리케이션을 배포합니다.

```
$ sam deploy --guided

Configuring SAM deploy
======================

        Looking for config file [samconfig.toml] :  Found
        Reading default arguments  :  Success

        Setting default arguments for 'sam deploy'
        =========================================
        Stack Name [demo]: ENTER
        AWS Region [us-west-2]: ENTER
        #Shows you resources changes to be deployed and require a 'Y' to initiate deploy
        Confirm changes before deploy [Y/n]: n
        #SAM needs permission to be able to create roles to connect to the resources in your template
        Allow SAM CLI IAM role creation [Y/n]: ENTER
        #Preserves the state of previously provisioned resources when an operation fails
        Disable rollback [y/N]: ENTER
        HelloWorldFunction may not have authorization defined, Is this okay? [y/N]: y
        Save arguments to configuration file [Y/n]: ENTER
        SAM configuration file [samconfig.toml]: ENTER
        SAM configuration environment [default]: ENTER

        Looking for resources needed for deployment:
        ...
        Saved arguments to config file
        Running 'sam deploy' for future deployments will use the parameters saved above.
        The above parameters can be changed by modifying samconfig.toml
        Learn more about samconfig.toml syntax at 
        https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-config.html

File with same data already exists at demo/da3c598813f1c2151579b73ad788cac8, skipping upload

        Deploying with following values
        ===============================
        Stack name                   : demo
        Region                       : us-west-2
        Confirm changeset            : False
        Disable rollback             : False
        Deployment s3 bucket         : aws-sam-cli-managed-default-samclisam-s3-demo-bucket-1a4x26zbcdkqr
        Capabilities                 : ["CAPABILITY_IAM"]
        Parameter overrides          : {}
        Signing Profiles             : {}

Initiating deployment
=====================
...
Waiting for changeset to be created..
CloudFormation stack changeset
-------------------------------------------------------------------------------------------------
Operation                LogicalResourceId        ResourceType             Replacement            
-------------------------------------------------------------------------------------------------
+ Add                    HelloWorldFunctionHell   AWS::Lambda::Permissio   N/A                    
                         oWorldPermissionProd     n                                               
+ Add                    HelloWorldFunctionRole   AWS::IAM::Role           N/A                    
...                     
-------------------------------------------------------------------------------------------------

Changeset created successfully. arn:aws:cloudformation:us-west-2:012345678910:changeSet/samcli-deploy1680906292/1164338d-72e7-4593-a372-f2b3e67f542f

2023-04-07 12:24:58 - Waiting for stack create/update to complete

CloudFormation events from stack operations (refresh every 5.0 seconds)
-------------------------------------------------------------------------------------------------
ResourceStatus           ResourceType             LogicalResourceId        ResourceStatusReason   
-------------------------------------------------------------------------------------------------
CREATE_IN_PROGRESS       AWS::IAM::Role           HelloWorldFunctionRole   -                      
CREATE_IN_PROGRESS       AWS::IAM::Role           HelloWorldFunctionRole   Resource creation      
                                                                           Initiated              
...                    
-------------------------------------------------------------------------------------------------
CloudFormation outputs from deployed stack
-------------------------------------------------------------------------------------------------
Outputs                                                                                         
-------------------------------------------------------------------------------------------------
Key                 HelloWorldFunctionIamRole                                                   
Description         Implicit IAM Role created for Hello World function                          
Value               arn:aws:iam::012345678910:role/demo-HelloWorldFunctionRole-VQ4CU7UY7S2K     

Key                 HelloWorldApi                                                               
Description         API Gateway endpoint URL for Prod stage for Hello World function            
Value               https://satnon55e9.execute-api.us-west-2.amazonaws.com/Prod/hello/          

Key                 HelloWorldFunction                                                          
Description         Hello World Lambda Function ARN                                             
Value               arn:aws:lambda:us-west-2:012345678910:function:demo-                        
HelloWorldFunction-G14inKTmSQvK                                                                 
-------------------------------------------------------------------------------------------------
Successfully created/updated stack - demo in us-west-2
```

배포 중에 AWS SAMCLI는 Lambda 함수 코드를 Amazon S3에 자동으로 업로드하고 템플릿을 업데이트합니다. CloudFormation 콘솔에서 수정된 템플릿은 Amazon S3 버킷 경로를 반영합니다.

```
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
...
Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: s3://aws-sam-cli-managed-default-samclisam-s3-demo-bucket-1a4x26zbcdkqr/demo/da3c598813f1c2151579b73ad788cac8
      Handler: app.lambda_handler
      ...
```

## 지원되는 사용 사례
<a name="deploy-upload-local-files-use"></a>

는 AWS SAM CLI 여러 파일 유형, CloudFormation 리소스 유형 및 CloudFormation 매크로에 대해이 프로세스를 자동으로 용이하게 할 수 있습니다.

### 파일 유형
<a name="deploy-upload-local-files-use-types"></a>

애플리케이션 파일 및 Docker 이미지가 지원됩니다.

### CloudFormation 리소스 유형
<a name="deploy-upload-local-files-use-resources"></a>

다음은 지원되는 리소스 유형 및 해당 속성의 목록입니다.


| Resource | 속성 | 
| --- | --- | 
| AWS::ApiGateway::RestApi | BodyS3Location | 
| AWS::ApiGatewayV2::Api | BodyS3Location | 
| AWS::AppSync:FunctionConfiguration |  `CodeS3Location` `RequestMappingTemplateS3Location` `ResponseMappingTemplateS3Location`  | 
| AWS::AppSync::GraphQLSchema | DefinitionS3Location | 
| AWS::AppSync::Resolver |  `CodeS3Location` `RequestMappingTemplateS3Location` `ResponseMappingTemplateS3Location`  | 
| AWS::CloudFormation::ModuleVersion | ModulePackage | 
| AWS::CloudFormation::ResourceVersion | SchemaHandlerPackage | 
| AWS::ECR::Repository | RepositoryName | 
| AWS::ElasticBeanstalk::ApplicationVersion | SourceBundle | 
| AWS::Glue::Job | Command.ScriptLocation | 
| AWS::Lambda::Function |  `Code` `Code.ImageUri`  | 
| AWS::Lambda::LayerVersion | Content | 
| AWS::Serverless::Api | DefinitionUri | 
| AWS::Serverless::Function |  `CodeUri` `ImageUri`  | 
| AWS::Serverless::GraphQLApi |  `SchemaUri` `Function.CodeUri` `Resolver.CodeUri`  | 
| AWS::Serverless::HttpApi | DefinitionUri | 
| AWS::Serverless::LayerVersion | ContentUri | 
| AWS::Serverless::StateMachine | DefinitionUri | 
| AWS::StepFunctions::StateMachine | DefinitionS3Location | 

### CloudFormation 매크로
<a name="deploy-upload-local-files-use-macros"></a>

`AWS::Include` 변환 매크로를 사용하여 참조된 파일이 지원됩니다.

## 자세히 알아보기
<a name="deploy-upload-local-files-learn"></a>

`AWS::Include` 변환에 대해 자세히 알아보려면 *AWS CloudFormation 사용 설명서*의 [AWS::Include 변환](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/create-reusable-transform-function-snippets-and-add-to-your-template-with-aws-include-transform.html) 섹션을 참조하세요.

 AWS SAM 템플릿에서 `AWS::Include` 변환을 사용하는 예를 보려면 * Serverless Land*의 [API Gateway HTTP API to SQS](https://serverlessland.com/patterns/apigw-sqs) 패턴을 참조하세요.

# 를 사용하여 스타터 CI/CD 파이프라인 생성 AWS SAM
<a name="serverless-generating-example-ci-cd"></a>

배포를 자동화할 준비가 되면 AWS SAM의 스타터 파이프라인 템플릿 중 하나를 사용하여 사용하려는 CI/CD 시스템에 대한 배포 파이프라인을 생성할 수 있습니다. 서버리스 애플리케이션의 배포를 자동화하려면 배포 파이프라인을 구성하고 사용해야 합니다. 스타터 파이프라인 템플릿은 서버리스 애플리케이션에 필요한 배포 파이프라인을 빠르게 설정할 수 있도록 사전 구성되어 있습니다.

스타터 파이프라인 템플릿이 있으면 [sam pipeline init](sam-cli-command-reference-sam-pipeline-init.md) 명령을 사용하여 몇 분 안에 파이프라인을 생성할 수 있습니다.

스타터 파이프라인 템플릿은 CI/CD 시스템의 친숙한 JSON/YAML 구문을 사용하며, 여러 계정 및 리전의 아티팩트 관리, 애플리케이션 배포에 필요한 최소한의 권한 사용 등의 모범 사례를 통합합니다. 현재 AWS SAM CLI는 [AWS CodePipeline](https://aws.amazon.com/codepipeline), [Jenkins](https://www.jenkins.io/), [GitLab CI/CD](https://docs.gitlab.com/ee/ci/), [GitHub Actions](https://github.com/features/actions), [Bitbucket Pipeline](https://support.atlassian.com/bitbucket-cloud/docs/get-started-with-bitbucket-pipelines/)에 대한 스타터 CI/CD 파이프라인 구성 생성을 지원합니다.

스타터 파이프라인 구성을 생성하기 위해 수행해야 하는 고급 수준은 태스크는 다음과 같습니다.

1. **인프라 리소스 생성** - 파이프라인에는 필요한 권한이 있는 IAM 사용자 및 역할, Amazon S3 버킷, 선택적으로 Amazon ECR 리포지토리와 같은 특정 AWS 리소스가 필요합니다.

1. **Git 리포지토리를 CI/CD 시스템에 연결** - CI/CD 시스템은 파이프라인 실행을 트리거할 Git 리포지토리를 알아야 합니다. 사용 중인 Git 리포지토리와 CI/CD 시스템의 조합에 따라 이 단계가 필요하지 않을 수도 있습니다.

1. **파이프라인 구성 생성** - 이 단계는 두 개의 배포 단계를 포함하는 스타터 파이프라인 구성을 생성합니다.

1. **파이프라인 구성을 Git 리포지토리에 커밋** - 이 단계는 CI/CD 시스템이 파이프라인 구성을 인식하도록 하는데 필요하며, 변경 사항이 커밋될 때 실행됩니다.

스타터 파이프라인 구성을 생성하여 Git 리포지토리에 커밋하면 누군가 해당 리포지토리에 코드 변경을 커밋할 때마다 파이프라인이 트리거되어 자동으로 실행됩니다.

이러한 단계의 순서와 각 단계의 세부 사항은 CI/CD 시스템에 따라 다릅니다.
+ 를 사용하는 경우 단원을 AWS CodePipeline참조하십시오[AWS CodePipeline 에서에 대한 스타터 파이프라인 생성 AWS SAM](serverless-generating-example-ci-cd-codepipeline.md).
+ Jenkins, GitLab CI/CD, GitHub Actions 또는 Bitbucket Pipeline을 사용하는 경우 [AWS SAM 를 사용하여 Jenkins, GitLab CI/CD, GitHub Actions, Bitbucket Pipelines용 스타터 파이프라인 생성](serverless-generating-example-ci-cd-others.md) 섹션을 참조하세요.

# AWS CodePipeline 에서에 대한 스타터 파이프라인 생성 AWS SAM
<a name="serverless-generating-example-ci-cd-codepipeline"></a>

에 대한 스타터 파이프라인 구성을 생성하려면 다음 작업을 다음 순서로 AWS CodePipeline수행합니다.

1. 인프라 리소스

1. 파이프라인 구성 생성

1. 파이프라인 구성을 Git에 커밋

1. Git 리포지토리를 CI/CD 시스템에 연결

**참고**  
다음 절차에서는 두 개의 AWS SAMCLI 명령, `sam pipeline bootstrap` 및 `sam pipeline init`을 사용합니다. 두 가지 명령이 있는 이유는 관리자(즉, IAM 사용자 및 역할과 같은 인프라 AWS 리소스를 설정할 권한이 필요한 사용자)가 개발자(즉, 개별 파이프라인을 설정할 권한만 필요하지만 필요한 인프라 AWS 리소스는 필요하지 않은 사용자)에게 더 많은 권한을 부여하는 사용 사례를 처리하기 위한 것입니다.

## 1단계: 인프라 리소스 생성
<a name="generating-example-step-1"></a>

를 사용하는 파이프라인에는 필요한 권한이 있는 IAM 사용자 및 역할, Amazon S3 버킷, 선택적으로 Amazon ECR 리포지토리와 같은 특정 AWS 리소스가 AWS SAM 필요합니다. 파이프라인의 각 배포 단계를 위한 인프라 리소스 세트가 있어야 합니다.

다음 명령을 실행하여 이 설정을 편집하거나 추가할 수 있습니다.

```
sam pipeline bootstrap
```

**참고**  
파이프라인의 각 배포 단계에 대해 이전 명령어를 실행합니다.

## 2단계: 파이프라인 구성 생성
<a name="generating-example-step-2"></a>

파이프라인 구성을 생성하려면 다음 명령을 실행합니다.

```
sam pipeline init
```

## 3단계: 파이프라인 구성을 Git 리포지토리에 커밋
<a name="generating-example-step-3"></a>

이 단계는 CI/CD 시스템이 파이프라인 구성을 인식하도록 할 때 필요하며, 변경 사항이 커밋될 때 실행됩니다.

## 4단계: Git 리포지토리를 CI/CD 시스템에 연결
<a name="generating-example-step-4"></a>

이제 다음 명령을 실행하여 연결을 생성할 AWS CodePipeline 수 있습니다.

```
sam deploy -t codepipeline.yaml --stack-name <pipeline-stack-name> --capabilities=CAPABILITY_IAM --region <region-X>
```

GitHub 또는 Bitbucket을 사용하는 경우, 이전에 **sam deploy** 명령을 실행한 후 *개발자 도구 콘솔 사용 안내서*의 [보류 중인 연결 업데이트](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-update.html) 주제에 있는 **연결을 완료하려면** 섹션의 단계를 따라 연결을 완료합니다. 또한를 이외의 다른 브랜치와 AWS CodePipeline 함께 사용하려면 **sam deploy** 명령의 출력`CodeStarConnectionArn`에서의 사본을 저장해야 합니다`main`.

## 기타 브랜치 구성
<a name="configuring-other-branches"></a>

기본적으로는 `main`브랜치를와 함께 AWS CodePipeline 사용합니다 AWS SAM. `main` 이외의 브랜치를 사용하려면 **sam deploy** 명령을 다시 실행해야 합니다. 사용 중인 Git 리포지토리에 따라 `CodeStarConnectionArn`를 제공해야 합니다.

```
# For GitHub and Bitbucket
sam deploy -t codepipeline.yaml --stack-name <feature-pipeline-stack-name> --capabilities=CAPABILITY_IAM --parameter-overrides="FeatureGitBranch=<branch-name> CodeStarConnectionArn=<codestar-connection-arn>"

# For AWS CodeCommit
sam deploy -t codepipeline.yaml --stack-name <feature-pipeline-stack-name> --capabilities=CAPABILITY_IAM --parameter-overrides="FeatureGitBranch=<branch-name>"
```

## 자세히 알아보기
<a name="serverless-generating-cicd-learn"></a>

CI/CD 파이프라인을 설정하는 실습 예제는 *Complete AWS SAM Workshop*의 [ CI/CD with AWS CodePipeline](https://catalog.workshops.aws/complete-aws-sam/en-US/module-4-cicd) 섹션을 참조하세요.

# AWS SAM 를 사용하여 Jenkins, GitLab CI/CD, GitHub Actions, Bitbucket Pipelines용 스타터 파이프라인 생성
<a name="serverless-generating-example-ci-cd-others"></a>

Jenkins, GitLab CI/CD, GitHub Actions 또는 Bitbucket Pipeline에 대한 스타터 파이프라인 구성을 생성하려면 다음 태스크를 순서대로 수행합니다.

1. 인프라 리소스

1. Git 리포지토리를 CI/CD 시스템에 연결

1. 보안 인증 정보 객체 생성

1. 파이프라인 구성 생성

1. 파이프라인 구성을 Git 리포지토리에 커밋

**참고**  
다음 절차에서는 두 개의 AWS SAMCLI 명령, `sam pipeline bootstrap` 및 `sam pipeline init`을 사용합니다. 두 가지 명령이 있는 이유는 관리자(즉, IAM 사용자 및 역할과 같은 인프라 AWS 리소스를 설정할 권한이 필요한 사용자)가 개발자(즉, 개별 파이프라인을 설정할 권한만 필요하지만 필요한 인프라 AWS 리소스는 필요하지 않은 사용자)에게 더 많은 권한을 부여하는 사용 사례를 처리하기 위한 것입니다.

## 1단계: 인프라 리소스 생성
<a name="generating-example-step-1"></a>

를 사용하는 파이프라인에는 필요한 권한이 있는 IAM 사용자 및 역할, Amazon S3 버킷, 선택적으로 Amazon ECR 리포지토리와 같은 특정 AWS 리소스가 AWS SAM 필요합니다. 파이프라인의 각 배포 단계를 위한 인프라 리소스 세트가 있어야 합니다.

다음 명령을 실행하여 이 설정을 편집하거나 추가할 수 있습니다.

```
sam pipeline bootstrap
```

**참고**  
파이프라인의 각 배포 단계에 대해 이전 명령어를 실행합니다.

파이프라인의 각 배포 단계에 대한 파이프라인 사용자의 AWS 자격 증명(키 ID 및 보안 키)은 후속 단계에 필요하므로 캡처해야 합니다.

## 2단계: Git 리포지토리를 CI/CD 시스템에 연결
<a name="generating-example-step-2"></a>

CI/CD 시스템이 빌드 및 배포를 위해 애플리케이션 소스 코드에 액세스할 수 있으려면 Git 리포지토리를 CI/CD 시스템에 연결해야 합니다.

**참고**  
다음 중 하나를 사용하는 경우 연결은 자동으로 수행되므로 이 단계를 건너뛸 수 있습니다.  
GitHub 리포지토리를 사용한 GitHub Action
GitLab 리포지토리를 사용한 GitLab CI/CD
Bitbucket 리포지토리가 있는 Bitbucket Pipeline

Git 리포지토리를 CI/CD 시스템에 연결하려면 다음 중 하나를 수행합니다.
+ Jenkins를 사용하는 경우 [Jenkins 설명서](https://www.jenkins.io/doc/book/pipeline/multibranch/)의 ‘브랜치 소스에 추가’를 참조하세요.
+ GitLab이 아닌 GitLab CI/CD와 Git 리포지토리를 사용하고 있다면 [GitLab 설명서](https://docs.gitlab.com/ee/ci/ci_cd_for_external_repos/)에서 ‘외부 리포지토리에 연결’을 참조하세요.

## 3단계: 보안 인증 정보 객체 생성
<a name="generating-example-step-3"></a>

각 CI/CD 시스템은 CI/CD 시스템이 Git 리포지토리에 액세스하는 데 필요한 보안 인증 정보를 관리하는 고유한 방법을 가집니다.

필요한 보안 인증 정보 객체를 생성하려면 다음 중 하나를 수행합니다.
+ Jenkins를 사용하는 경우 키 ID와 보안 암호 키를 모두 저장하는 단일 ‘보안 인증 정보’을 만듭니다. [AWS SAM과 Jenkins Pipeline를 빌드](https://aws.amazon.com/blogs/compute/building-a-jenkins-pipeline-with-aws-sam/) 블로그, **Jenkins 구성** 섹션의 지침을 따르세요. 다음 단계에서 ‘보안 인증 id’가 필요합니다.
+ GitLab CI/CD를 사용하는 경우 키 ID와 보안 암호 키 각각에 하나씩, 두 개의 ‘보호되는 변수’를 만듭니다. [GitLab 설명서](https://docs.gitlab.com/ee/ci/variables/)의 지침을 따르세요. 다음 단계를 위해 두 개의 ‘변수 키’가 필요합니다.
+ GitHub Actions를 사용하는 경우 키와 보안 암호 키 각각에 하나씩, 두 개의 ‘암호화된 보안 암호’를 만듭니다. [GitHub 설명서](https://docs.github.com/en/actions/reference/encrypted-secrets)의 지침을 따르세요. 다음 단계를 수행하려면 두 개의 ‘보안 암호 이름’이 필요합니다.
+ Bitbucket Pipeline을 사용하는 경우, 키 ID와 보안 암호 키 각각에 하나씩, 두 개의 ‘보안 변수’를 만듭니다. [변수 및 보안 암호](https://support.atlassian.com/bitbucket-cloud/docs/variables-and-secrets)의 지침을 따르세요. 다음 단계를 수행하려면 두 개의 ‘보안 암호 이름’이 필요합니다.

## 4단계: 파이프라인 구성 생성
<a name="generating-example-step-4"></a>

파이프라인 구성을 생성하려면 다음 명령을 실행합니다. 이전 단계에서 생성한 보안 인증 정보 객체를 입력해야 합니다.

```
sam pipeline init
```

## 5단계: 파이프라인 구성을 Git 리포지토리에 커밋
<a name="generating-example-step-5"></a>

이 단계는 CI/CD 시스템이 파이프라인 구성을 인식하도록 할 때 필요하며, 변경 사항이 커밋될 때 실행됩니다.

## 자세히 알아보기
<a name="serverless-generating-other-cicd-learn"></a>

GitHub Actions을 사용하여 CI/CD 파이프라인을 설정하는 실제 예제는 *전체 AWS SAM 워크샵*의 [GitHub을 사용한 CI/CD](https://s12d.com/sam-ws-en-gh) 섹션을 참조하세요.

# 를 사용하여 스타터 파이프라인을 사용자 지정하는 방법 AWS SAM
<a name="serverless-customizing-starter-pipelines"></a>

CI/CD 관리자는 조직의 개발자가 파이프라인 구성을 생성하는 데 사용할 수 있는 스타터 파이프라인 템플릿과 관련 안내 프롬프트를 사용자 지정할 수 있습니다.

 AWS SAMCLI는 스타터 템플릿을 생성할 때 Cookiecutter 템플릿을 사용합니다. 쿠키 커터 템플릿에 대한 자세한 내용은 [Cookiecutter](https://cookiecutter.readthedocs.io/en/latest/README.html) 섹션을 참조하세요.

`sam pipeline init` 명령을 사용하여 파이프라인 구성을 생성할 때 AWS SAMCLI가 사용자에게 표시하는 프롬프트를 사용자 지정할 수도 있습니다. 사용자 프롬프트를 사용자 지정하려면 다음을 수행합니다.

1. **`questions.json` 파일 만들기** - `questions.json` 파일은 프로젝트 저장소의 루트에 있어야 합니다. `cookiecutter.json` 파일과 동일한 디렉터리에 있습니다. `questions.json` 파일의 스키마를 보려면 [questions.json.schema](https://github.com/aws/aws-sam-cli/blob/2b831b29f76ac9c4e0cbcbd68b37f8f664e136d8/samcli/lib/pipeline/init/questions.json.schema)를 참조합니다. 예제 `questions.json` 파일을 보려면 [questions.json](https://github.com/aws/aws-sam-cli-pipeline-init-templates/blob/main/Jenkins/two-stage-pipeline-template/questions.json)을 참조합니다.

1. **질문 키와 쿠키 커터 이름 매핑** - `questions.json`파일의 각 객체에는 쿠키 커터 템플릿의 이름과 일치하는 키가 필요합니다. 이 키 매칭은 AWS SAMCLI가 사용자 프롬프트 응답을 쿠키 커터 템플릿에 매핑하는 방식입니다. 이 키 매칭의 예를 보려면 이 주제의 [예제 파일](#serverless-customizing-starter-pipelines-example-files) 섹션을 참조하세요.

1. **`metadata.json` 파일 만들기** - 파이프라인이 `metadata.json` 파일에 포함할 단계 수를 선언합니다. 단계의 수는 `sam pipeline init` 명령에 정보를 표시할 단계 수를 지정하거나, `--bootstrap` 옵션의 경우 인프라 리소스를 생성할 단계의 수를 지정합니다. 2단계로 구성된 파이프라인을 선언하는 예제 `metadata.json` 파일을 보려면 [metadata.json](https://github.com/aws/aws-sam-cli-pipeline-init-templates/blob/main/Jenkins/two-stage-pipeline-template/metadata.json)을 참조하세요.

## 예제 프로젝트
<a name="serverless-customizing-starter-pipelines-example-projects"></a>

다음은 Cookiecutter 템플릿, `questions.json` 파일, `metadata.json` 파일을 포함하는 예제 프로젝트입니다.
+ Jenkins 예제: [2단계 Jenkins 파이프라인 템플릿](https://github.com/aws/aws-sam-cli-pipeline-init-templates/tree/main/Jenkins/two-stage-pipeline-template)
+ CodePipeline 예제: [ 2단계 CodePipeline 파이프라인 템플릿](https://github.com/aws/aws-sam-cli-pipeline-init-templates/tree/main/AWS-CodePipeline/two-stage-pipeline-template)

## 예제 파일
<a name="serverless-customizing-starter-pipelines-example-files"></a>

다음 파일 세트는 `questions.json` 파일의 질문이 Cookiecutter 템플릿 파일의 항목과 어떻게 연관되는지를 보여줍니다. 참고로 이 예제는 전체 파일이 아닌 파일 스니펫입니다. 전체 파일의 예제를 보려면 이 주제의 앞부분에 나오는 [예제 프로젝트](#serverless-customizing-starter-pipelines-example-projects) 섹션을 참조하세요.

예 **`questions.json`**:

```
{
  "questions": [{
    "key": "intro",
    "question": "\nThis template configures a pipeline that deploys a serverless application to a testing and a production stage.\n",
    "kind": "info"
  }, {
    "key": "pipeline_user_jenkins_credential_id",
    "question": "What is the Jenkins credential ID (via Jenkins plugin \"aws-credentials\") for pipeline user access key?",
    "isRequired": true
  }, {
    "key": "sam_template",
    "question": "What is the template file path?",
    "default": "template.yaml"
  }, {
    ...
```

예 **`cookiecutter.json`**:

```
{
  "outputDir": "aws-sam-pipeline",
  "pipeline_user_jenkins_credential_id": "",
  "sam_template": "",
    ...
```

예 **`Jenkinsfile`**:

```
pipeline {
  agent any
  environment {
    PIPELINE_USER_CREDENTIAL_ID = '{{cookiecutter.pipeline_user_jenkins_credential_id}}'
    SAM_TEMPLATE = '{{cookiecutter.sam_template}}'
    ...
```

# AWS SAM 애플리케이션 배포 자동화
<a name="serverless-deploying-modify-pipeline"></a>

에서 AWS SAM 애플리케이션 배포를 자동화하는 AWS SAM방법은 사용 중인 CI/CD 시스템에 따라 다릅니다. 이러한 이유로이 섹션의 예제에서는 AWS SAM 빌드 컨테이너 이미지에서 서버리스 애플리케이션 빌드를 자동화하도록 다양한 CI/CD 시스템을 구성하는 방법을 보여줍니다. 이러한 빌드 컨테이너 이미지를 사용하면를 사용하여 서버리스 애플리케이션을 더 쉽게 빌드하고 패키징할 수 있습니다 AWS SAM CLI.

 AWS SAM 를 사용하여 서버리스 애플리케이션을 배포하는 기존 CI/CD 파이프라인의 절차는 사용 중인 CI/CD 시스템에 따라 약간 다릅니다.

다음 주제에서는 AWS SAM 빌드 컨테이너 이미지 내에 서버리스 애플리케이션을 빌드하도록 CI/CD 시스템을 구성하는 예제를 제공합니다.

**Topics**
+ [

# AWS CodePipeline 를 사용하여와 함께 배포 AWS SAM
](deploying-using-codepipeline.md)
+ [

# Bitbucket Pipelines을 사용하여 로 배포 AWS SAM
](deploying-using-bitbucket.md)
+ [

# Jenkins를 사용하여 로 배포 AWS SAM
](deploying-using-jenkins.md)
+ [

# GitLab CI/CD를 사용하여 로 배포 AWS SAM
](deploying-using-gitlab.md)
+ [

# GitHub 작업을 사용하여 로 배포 AWS SAM
](deploying-using-github.md)

# AWS CodePipeline 를 사용하여와 함께 배포 AWS SAM
<a name="deploying-using-codepipeline"></a>

 AWS SAM 애플리케이션의 빌드 및 배포를 자동화하도록 [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) 파이프라인을 구성하려면 CloudFormation 템플릿과 `buildspec.yml` 파일에 다음을 수행하는 줄이 포함되어야 합니다.

1. 사용 가능한 이미지에서 필요한 런타임이 포함된 빌드 컨테이너 이미지를 참조합니다. 다음 예제에서는 `public.ecr.aws/sam/build-nodejs20.x` 빌드 컨테이너 이미지를 사용합니다.

1. 필요한 AWS SAM 명령줄 인터페이스(CLI) 명령을 실행하도록 파이프라인 단계를 구성합니다. 다음 예제에서는 **sam build** 및 **sam deploy**(필수 옵션 포함) 두 AWS SAMCLI 명령을 실행합니다.

이 예제에서는를 사용하여 AWS SAM 템플릿 파일의 모든 함수와 계층을 선언했다고 가정합니다`runtime: nodejs20.x`.

**CloudFormation 템플릿 코드 조각:**

```
  CodeBuildProject:
    Type: AWS::CodeBuild::Project
    Properties:
      Environment:
        ComputeType: BUILD_GENERAL1_SMALL
        Image: public.ecr.aws/sam/build-nodejs20.x
        Type: LINUX_CONTAINER
      ...
```

**`buildspec.yml` 코드 조각:**

```
version: 0.2
phases:
  build:
    commands:
      - sam build
      - sam deploy --no-confirm-changeset --no-fail-on-empty-changeset
```

다양한 런타임에 사용할 수 있는 Amazon Elastic Container Registry(Amazon ECR)빌드 컨테이너 이미지 목록은 [의 이미지 리포지토리 AWS SAM](serverless-image-repositories.md) 섹션을 참조하세요.

# Bitbucket Pipelines을 사용하여 로 배포 AWS SAM
<a name="deploying-using-bitbucket"></a>

 AWS SAM 애플리케이션의 빌드 및 배포를 자동화하도록 [Bitbucket Pipeline](https://support.atlassian.com/bitbucket-cloud/docs/get-started-with-bitbucket-pipelines/)을 구성하려면 `bitbucket-pipelines.yml` 파일에 다음을 수행하는 줄이 포함되어야 합니다.

1. 사용 가능한 이미지에서 필요한 런타임이 포함된 빌드 컨테이너 이미지를 참조합니다. 다음 예제에서는 `public.ecr.aws/sam/build-nodejs20.x` 빌드 컨테이너 이미지를 사용합니다.

1. 필요한 AWS SAM 명령줄 인터페이스(CLI) 명령을 실행하도록 파이프라인 단계를 구성합니다. 다음 예제에서는 **sam build** 및 **sam deploy**(필수 옵션 포함) 두 AWS SAMCLI 명령을 실행합니다.

이 예제에서는를 사용하여 AWS SAM 템플릿 파일의 모든 함수와 계층을 선언했다고 가정합니다`runtime: nodejs20.x`.

```
image: public.ecr.aws/sam/build-nodejs20.x

pipelines:
  branches:
    main: # branch name
      - step:
          name: Build and Package
          script:
            - sam build
            - sam deploy --no-confirm-changeset --no-fail-on-empty-changeset
```

다양한 런타임에 사용할 수 있는 Amazon Elastic Container Registry(Amazon ECR)빌드 컨테이너 이미지 목록은 [의 이미지 리포지토리 AWS SAM](serverless-image-repositories.md) 섹션을 참조하세요.

# Jenkins를 사용하여 로 배포 AWS SAM
<a name="deploying-using-jenkins"></a>

 AWS SAM 애플리케이션의 빌드 및 배포를 자동화하도록 [Jenkins](https://www.jenkins.io/) 파이프라인을 구성하려면에 다음을 수행하는 줄이 포함되어야 `Jenkinsfile` 합니다.

1. 사용 가능한 이미지에서 필요한 런타임이 포함된 빌드 컨테이너 이미지를 참조합니다. 다음 예제에서는 `public.ecr.aws/sam/build-nodejs20.x` 빌드 컨테이너 이미지를 사용합니다.

1. 필요한 AWS SAM 명령줄 인터페이스(CLI) 명령을 실행하도록 파이프라인 단계를 구성합니다. 다음 예제에서는 **sam build** 및 **sam deploy**(필수 옵션 포함) 두 AWS SAMCLI 명령을 실행합니다.

이 예제에서는를 사용하여 AWS SAM 템플릿 파일의 모든 함수와 계층을 선언했다고 가정합니다`runtime: nodejs20.x`.

```
pipeline {
    agent { docker { image 'public.ecr.aws/sam/build-nodejs20.x' } }
    stages {
        stage('build') {
            steps {
                sh 'sam build'
                sh 'sam deploy --no-confirm-changeset --no-fail-on-empty-changeset'
            }
        }
    }
}
```

다양한 런타임에 사용할 수 있는 Amazon Elastic Container Registry(Amazon ECR)빌드 컨테이너 이미지 목록은 [의 이미지 리포지토리 AWS SAM](serverless-image-repositories.md) 섹션을 참조하세요.

# GitLab CI/CD를 사용하여 로 배포 AWS SAM
<a name="deploying-using-gitlab"></a>

 AWS SAM 애플리케이션의 빌드 및 배포를 자동화하도록 [GitLab](https://about.gitlab.com) 파이프라인을 구성하려면 `gitlab-ci.yml` 파일에 다음을 수행하는 줄이 포함되어야 합니다.

1. 사용 가능한 이미지에서 필요한 런타임이 포함된 빌드 컨테이너 이미지를 참조합니다. 다음 예제에서는 `public.ecr.aws/sam/build-nodejs20.x` 빌드 컨테이너 이미지를 사용합니다.

1. 필요한 AWS SAM 명령줄 인터페이스(CLI) 명령을 실행하도록 파이프라인 단계를 구성합니다. 다음 예제에서는 **sam build** 및 **sam deploy**(필수 옵션 포함) 두 AWS SAMCLI 명령을 실행합니다.

이 예제에서는를 사용하여 AWS SAM 템플릿 파일의 모든 함수와 계층을 선언했다고 가정합니다`runtime: nodejs20.x`.

```
image: public.ecr.aws/sam/build-nodejs20.x
deploy:
  script:
    - sam build
    - sam deploy --no-confirm-changeset --no-fail-on-empty-changeset
```

다양한 런타임에 사용할 수 있는 Amazon Elastic Container Registry(Amazon ECR)빌드 컨테이너 이미지 목록은 [의 이미지 리포지토리 AWS SAM](serverless-image-repositories.md) 섹션을 참조하세요.

# GitHub 작업을 사용하여 로 배포 AWS SAM
<a name="deploying-using-github"></a>

 AWS SAM 애플리케이션의 빌드 및 배포를 자동화하도록 [GitHub](https://github.com/) 파이프라인을 구성하려면 먼저 호스트에 AWS SAM 명령줄 인터페이스(CLI)를 설치해야 합니다. GitHub 워크플로의 [GitHub Actions](https://github.com/features/actions)을 사용하면 이 설정에 도움이 될 수 있습니다.

다음 예제 GitHub 워크플로는 일련의 GitHub 작업을 사용하여 Ubuntu 호스트를 설정한 다음 명령을 실행 AWS SAM CLI하여 AWS SAM 애플리케이션을 빌드하고 배포합니다.

```
on:
  push:
    branches:
      - main
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-python@v3
      - uses: aws-actions/setup-sam@v2
      - uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: us-east-2
      - run: sam build --use-container
      - run: sam deploy --no-confirm-changeset --no-fail-on-empty-changeset
```

다양한 런타임에 사용할 수 있는 Amazon Elastic Container Registry(Amazon ECR)빌드 컨테이너 이미지 목록은 [의 이미지 리포지토리 AWS SAM](serverless-image-repositories.md) 섹션을 참조하세요.

# AWS SAM 파이프라인에서 OIDC 인증을 사용하는 방법
<a name="deploying-with-oidc"></a>

AWS Serverless Application Model ()는 Bitbucket, GitHub Actions 및 GitLab 지속적 통합 및 지속적 전송(CI/CD) 플랫폼에 대한 OpenID Connect(OIDC) 사용자 인증을AWS SAM지원합니다. 이 지원을 통해 모든 플랫폼에서 인증된 CI/CD 사용자 계정을 사용하여 서버리스 애플리케이션 파이프라인을 관리할 수 있습니다. 그렇지 않으면 AWS SAM 파이프라인에 대한 액세스를 제어하기 위해 여러 AWS Identity and Access Management (IAM) 사용자를 생성하고 관리해야 합니다.

## AWS SAM 파이프라인을 사용하여 OIDC 설정
<a name="deploying-with-oidc-setup"></a>

`sam pipeline bootstrap` 구성 프로세스 중에 다음을 수행하여 AWS SAM 파이프라인으로 OIDC를 설정합니다.

1. ID 제공자를 선택하라는 메시지가 표시되면 **OIDC**를 선택합니다.

1. 다음으로 지원되는 OIDC 공급자를 선택합니다.

1. **https://**로 시작하는 OIDC 공급자 URL을 입력합니다.
**참고**  
AWS SAM 는 `AWS::IAM::OIDCProvider` 리소스 유형을 생성할 때이 URL을 참조합니다.

1. 그런 다음 프롬프트에 따라 선택한 플랫폼에 액세스하는 데 필요한 CI/CD 플랫폼 정보를 입력합니다. 이러한 세부 정보는 플랫폼마다 다르며 다음을 포함할 수 있습니다.
   + OIDC 클라이언트 ID.
   + 코드 리포지토리 이름 또는 범용 고유 식별자(UUID).
   + 리포지토리와 연관된 그룹 또는 조직 이름.
   + 코드 리포지토리가 속한 GitHub 조직.
   + GitHub 리포지토리 이름.
   + 배포가 이루어지는 브랜치.

1. AWS SAM 는 입력된 OIDC 구성의 요약을 표시합니다. 편집하려면 설정 번호를 입력하거나 Enter를 눌러 계속 진행합니다.

1. 입력한 OIDC 연결을 지원하는 데 필요한 리소스 생성을 확인하라는 메시지가 표시되면 Y를 눌러 계속 진행합니다.

AWS SAM 는 파이프라인 실행 역할을 수임하는 제공된 구성으로 `AWS::IAM::OIDCProvider` AWS CloudFormation 리소스를 생성합니다. 이 CloudFormation 리소스 유형에 대해 자세히 알아보려면 *AWS CloudFormation 사용 설명서*의 [AWS::IAM::OIDCProvider](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-oidcprovider.html)를 참조하세요.

**참고**  
ID 제공업체(IdP) 리소스가 이미 AWS SAM 에 있는 경우는 새 리소스를 생성하는 대신 참조 AWS 계정합니다.

## 예제
<a name="deploying-with-oidc-setup-example"></a>

다음은 AWS SAM 파이프라인을 사용하여 OIDC를 설정하는 예제입니다.

```
Select a permissions provider:
    1 - IAM (default)
    2 - OpenID Connect (OIDC)
Choice (1, 2): 2
Select an OIDC provider:
    1 - GitHub Actions
    2 - GitLab
    3 - Bitbucket
Choice (1, 2, 3): 1
Enter the URL of the OIDC provider [https://token.actions.githubusercontent.com]:
Enter the OIDC client ID (sometimes called audience) [sts.amazonaws.com]:
Enter the GitHub organization that the code repository belongs to. If there is no organization enter your username instead: my-org
Enter GitHub repository name: testing
Enter the name of the branch that deployments will occur from [main]:

[3] Reference application build resources
Enter the pipeline execution role ARN if you have previously created one, or we will create one for you []:
Enter the CloudFormation execution role ARN if you have previously created one, or we will create one for you []:
Please enter the artifact bucket ARN for your Lambda function. If you do not have a bucket, we will create one for you []:
Does your application contain any IMAGE type Lambda functions? [y/N]:

[4] Summary
Below is the summary of the answers:
    1 - Account: 123456
    2 - Stage configuration name: dev
    3 - Region: us-east-1
    4 - OIDC identity provider URL: https://token.actions.githubusercontent.com
    5 - OIDC client ID: sts.amazonaws.com
    6 - GitHub organization: my-org
    7 - GitHub repository: testing
    8 - Deployment branch: main
    9 - Pipeline execution role: [to be created]
    10 - CloudFormation execution role: [to be created]
    11 - Artifacts bucket: [to be created]
    12 - ECR image repository: [skipped]
Press enter to confirm the values above, or select an item to edit the value:

This will create the following required resources for the 'dev' configuration:
    - IAM OIDC Identity Provider
    - Pipeline execution role
    - CloudFormation execution role
    - Artifact bucket
Should we proceed with the creation? [y/N]:
```

## 자세히 알아보기
<a name="deploying-with-oidc-setup-learn-more"></a>

 AWS SAM 파이프라인과 함께 OIDC를 사용하는 방법에 대한 자세한 내용은 섹션을 참조하세요[sam pipeline bootstrap](sam-cli-command-reference-sam-pipeline-bootstrap.md).

# 를 사용하여 sam sync에 동기화 소개 AWS 클라우드
<a name="using-sam-cli-sync"></a>

 AWS Serverless Application Model 명령줄 인터페이스(AWS SAM CLI) `sam sync` 명령은 로컬 애플리케이션 변경 사항을에 빠르게 동기화하는 옵션을 제공합니다 AWS 클라우드. 다음 작업을 수행하기 위해 애플리케이션을 개발할 때 `sam sync`를 사용합니다.

1. 로컬 변경 사항을 자동으로 감지하고에 동기화합니다 AWS 클라우드.

1.  AWS 클라우드에 동기화할 로컬 변경 사항을 사용자 지정합니다.

1. 테스트 및 검증을 위해 클라우드에서 애플리케이션을 준비합니다.

`sam sync`를 사용하면 테스트 및 검증을 위해 로컬 변경 사항을 클라우드에 동기화하는 데 걸리는 시간을 단축하는 빠른 개발 워크플로를 만들 수 있습니다.

**참고**  
이 `sam sync` 명령은 개발 환경에 권장됩니다. 프로덕션 환경에서는 `sam deploy`를 사용하여 *지속적 통합 및 제공(CI/CD)* 파이프라인을 사용하거나 구성하는 것이 좋습니다. 자세한 내용은 [를 사용하여 애플리케이션 및 리소스 배포 AWS SAM](serverless-deploying.md)를 참조하세요.

이 `sam sync` 명령은의 일부입니다 AWS SAM Accelerate.는에서 서버리스 애플리케이션을 개발하고 테스트하는 경험을 가속화하는 데 사용할 수 있는 도구를 *AWS SAM Accelerate* 제공합니다 AWS 클라우드.

**Topics**
+ [

## 로컬 변경 사항을 자동으로 감지하고에 동기화 AWS 클라우드
](#using-sam-cli-sync-auto)
+ [

## 에 동기화되는 로컬 변경 사항 사용자 지정 AWS 클라우드
](#using-sam-cli-sync-customize)
+ [

## 테스트 및 검증을 위해 클라우드에서 애플리케이션 준비하기
](#using-sam-cli-sync-test)
+ [

## sam sync 명령의 옵션
](#using-sam-cli-sync-options)
+ [

## 문제 해결
](#using-sam-cli-sync-troubleshooting)
+ [

## 예제
](#using-sam-cli-sync-examples)
+ [

## 자세히 알아보기
](#using-sam-cli-sync-learn)

## 로컬 변경 사항을 자동으로 감지하고에 동기화 AWS 클라우드
<a name="using-sam-cli-sync-auto"></a>

`--watch` 옵션으로 `sam sync`를 실행하여 애플리케이션을 AWS 클라우드에 동기화하기 시작합니다. 는 다음 동작을 수행합니다.

1. **애플리케이션 빌드** - 이 프로세스는 `sam build` 명령을 사용하는 것과 비슷합니다.

1. **애플리케이션 배포** - AWS SAMCLI는 기본 설정을 사용하여 애플리케이션을 AWS CloudFormation 에 배포합니다. 기본값은 다음과 같습니다.

   1. AWS `.aws` 사용자 폴더에 있는 자격 증명 및 일반 구성 설정.

   1. 애플리케이션의 `samconfig.toml` 파일에 있는 애플리케이션 배포 설정.

   기본값을 찾을 수 없는 경우 AWS SAMCLI는 이를 알리고 동기화 프로세스를 종료합니다.

1. **로컬 변경 사항 확인** - AWS SAMCLI는 계속 실행되면 애플리케이션의 로컬 변경 사항을 감시합니다. `--watch` 옵션이 제공하는 것은 다음과 같습니다.

   이 옵션은 기본적으로 활성화되어 있습니다. 기본값은 애플리케이션 `samconfig.toml` 파일을 참조하세요. 다음은 예제 파일입니다.

   ```
   ...
   [default.sync]
   [default.sync.parameters]
   watch = true
   ...
   ```

1. **에 대한 로컬 변경 사항 동기화 AWS 클라우드** - 로컬을 변경하면는 사용 가능한 가장 빠른 방법을 AWS 클라우드 통해 이러한 변경 사항을 AWS SAM CLI 감지하고에 동기화합니다. 변경 유형에 따라 다음과 같은 상황이 발생할 수 있습니다.

   1. 업데이트된 리소스가 AWS 서비스 APIs 지원하는 경우 AWS SAM CLI는 이를 사용하여 변경 사항을 배포합니다. 그러면 빠르게 동기화되어 AWS 클라우드에서 리소스가 업데이트됩니다.

   1. 업데이트된 리소스가 AWS 서비스 APIs 지원하지 않는 경우 AWS SAM CLI는 CloudFormation 배포를 수행합니다. 이렇게 하면 AWS 클라우드의 전체 애플리케이션이 업데이트됩니다. 빠르지는 않지만 배포를 수동으로 시작하지 않아도 됩니다.

`sam sync` 명령 AWS 클라우드은에서 애플리케이션을 자동으로 업데이트하므로 개발 환경에만 권장됩니다. `sam sync`를 실행하면 다음을 확인하라는 메시지가 표시됩니다.

```
**The sync command should only be used against a development stack**.

Confirm that you are synchronizing a development stack.

Enter Y to proceed with the command, or enter N to cancel:
 [Y/n]: ENTER
```

## 에 동기화되는 로컬 변경 사항 사용자 지정 AWS 클라우드
<a name="using-sam-cli-sync-customize"></a>

 AWS 클라우드에 동기화할 로컬 변경 사항을 사용자 지정하는 옵션을 제공합니다. 이를 통해 테스트 및 검증을 위해 클라우드에서 로컬 변경 사항을 확인하는 데 걸리는 시간을 단축할 수 있습니다.

예를 들어 AWS Lambda 함수 코드와 같은 코드 변경 사항만 동기화하는 `--code` 옵션을 제공합니다. 개발 중에 특히 Lambda 코드에 초점을 맞추면 테스트 및 검증을 위해 변경 사항을 클라우드로 빠르게 가져올 수 있습니다. 다음은 예제입니다.

```
$ sam sync --code --watch
```

특정 Lambda 함수 또는 계층의 코드 변경 사항만 동기화하려면 `--resource-id` 옵션을 사용합니다. 다음은 예제입니다.

```
$ sam sync --code --resource-id HelloWorldFunction --resource-id HelloWorldLayer
```

## 테스트 및 검증을 위해 클라우드에서 애플리케이션 준비하기
<a name="using-sam-cli-sync-test"></a>

이 `sam sync` 명령은 AWS 클라우드에서 애플리케이션을 업데이트할 수 있는 가장 빠른 방법을 자동으로 찾습니다. 이를 통해 개발 및 클라우드 테스트 워크플로의 속도를 높일 수 있습니다. AWS 서비스 APIs 활용하면 지원되는 리소스를 빠르게 개발, 동기화 및 테스트할 수 있습니다. 실습 예제는 전체 워크숍의 [모듈 6 - AWS SAM 가속화](https://s12d.com/sam-ws-en-accelerate)를 참조하세요. * AWS SAM * 

## sam sync 명령의 옵션
<a name="using-sam-cli-sync-options"></a>

다음은 `sam sync` 명령을 수정하는 데 사용할 수 있는 몇 가지 주요 옵션입니다. 콘텐츠 옵션 목록은 [sam sync](sam-cli-command-reference-sam-sync.md) 섹션을 참조하세요.

### 일회성 CloudFormation 배포 수행
<a name="using-sam-cli-sync-options-single-deploy"></a>

`--no-watch` 옵션을 사용하여 자동 동기화를 끕니다. 다음은 예제입니다.

```
$ sam sync --no-watch
```

는 AWS SAM CLI 일회성 CloudFormation 배포를 수행합니다. 이 명령은 `sam build` 및 `sam deploy` 명령으로 수행된 작업을 그룹화합니다.

### 초기 CloudFormation 배포 건너뛰기
<a name="using-sam-cli-sync-options-skip-deploy-sync"></a>

를 실행할 때마다 CloudFormation 배포가 필요한지 여부를 사용자 지정할 수 `sam sync` 있습니다.
+ 가 실행될 때마다 CloudFormation 배포를 요구`--no-skip-deploy-sync`하도록 `sam sync`를 제공합니다. 이렇게 하면 로컬 인프라가에 동기화되어 드리프트가 CloudFormation방지됩니다. 이 옵션을 사용하면 개발 및 테스트 워크플로에 더 많은 시간을 할애할 수 있습니다.
+ `--skip-deploy-sync`를 제공하여 CloudFormation 배포를 선택 사항으로 설정합니다. 는 AWS SAM CLI 로컬 AWS SAM 템플릿을 배포된 CloudFormation 템플릿과 비교하고 변경 사항이 감지되지 않으면 초기 CloudFormation 배포를 건너뜁니다. CloudFormation 배포를 건너뛰면 로컬 변경 사항을에 동기화할 때 시간을 절약할 수 있습니다 AWS 클라우드.

  변경 사항이 감지 AWS SAM CLI되지 않으면는 다음 시나리오 CloudFormation 에서 배포를 계속 수행합니다.
  + 마지막 CloudFormation 배포 이후 7일 이상 경과한 경우.
  + 많은 수의 Lambda 함수 코드 변경이 감지되면 CloudFormation 배포가 애플리케이션을 업데이트하는 가장 빠른 방법입니다.

다음은 예제입니다.

```
$ sam sync --skip-deploy-sync
```

### 중첩된 스택에서 리소스 동기화
<a name="using-sam-cli-sync-options-nested-stack"></a>

**중첩된 스택에서 리소스를 동기화하려면**

1. `--stack-name`를 사용하여 루트 스택을 제공합니다.

1. `nestedStackId/resourceId` 형식을 사용하여 중첩된 스택의 리소스를 식별합니다.

1. `--resource-id`를 사용하여 중첩된 스택의 리소스를 제공합니다.

   다음은 예제입니다.

   ```
   $ sam sync --code --stack-name sam-app --resource-id myNestedStack/HelloWorldFunction
   ```

중첩된 애플리케이션 생성에 대한 자세한 내용은 [에서 중첩된 애플리케이션을 사용하여 코드 및 리소스 재사용 AWS SAM](serverless-sam-template-nested-applications.md) 섹션을 참조하세요.

### 업데이트할 특정 CloudFormation 스택 지정
<a name="using-sam-cli-sync-options-stack-name"></a>

업데이트할 특정 CloudFormation 스택을 지정하려면 `--stack-name` 옵션을 제공합니다. 다음은 예제입니다.

```
$ sam sync --stack-name dev-sam-app
```

### 소스 폴더에서 프로젝트를 빌드하여 빌드 시간 단축
<a name="using-sam-cli-sync-options-source"></a>

지원되는 런타임과 빌드 메서드의 경우 `--build-in-source` 옵션을 사용하여 소스 폴더에서 직접 프로젝트를 빌드할 수 있습니다. 기본적으로는 임시 디렉터리에 AWS SAM CLI 빌드되며, 여기에는 소스 코드 및 프로젝트 파일을 통한 복사가 포함됩니다. 를 사용하면 `--build-in-source`가 AWS SAM 소스 폴더에 직접 CLI 빌드되므로 파일을 임시 디렉터리에 복사할 필요가 없으므로 빌드 프로세스의 속도가 빨라집니다.

지원되는 런타임 및 빌드 메서드 목록은 ` --build-in-source`를 참조하세요.

### 동기화를 시작하지 않는 파일 및 폴더 지정
<a name="using-sam-cli-sync-options-exclude"></a>

`--watch-exclude` 옵션을 사용하여 업데이트 시 동기화를 시작하지 않을 파일이나 폴더를 지정할 수 있습니다. 이 옵션에 대한 자세한 내용은 `--watch-exclude` 섹션을 참조하세요.

다음은 `HelloWorldFunction` 함수와 관련된 `package-lock.json` 파일을 제외한 예시입니다.

```
$ sam sync --watch --watch-exclude HelloWorldFunction=package-lock.json
```

이 명령이 실행되면 AWS SAM CLI가 동기화 프로세스를 시작합니다. 다음 내용이 포함됩니다:
+ `sam build`를 실행하여 함수를 빌드하고 애플리케이션 배포를 준비합니다.
+ `sam deploy`를 실행하여 애플리케이션을 배포합니다.
+ 애플리케이션 변경을 확인하세요.

`package-lock.json` 파일을 수정하면 AWS SAM CLI가 동기화를 시작하지 않습니다. 다른 파일이 업데이트되면 AWS SAM CLI는 `package-lock.json` 파일을 포함하는 동기화를 시작합니다.

다음은 하위 스택의 Lambda 함수를 지정하는 예제입니다.

```
$ sam sync --watch --watch-exclude ChildStackA/MyFunction=database.sqlite3
```

## 문제 해결
<a name="using-sam-cli-sync-troubleshooting"></a>

문제를 해결하려면 단원을 AWS SAM CLI참조하십시오[AWS SAMCLI 문제 해결](sam-cli-troubleshooting.md).

## 예제
<a name="using-sam-cli-sync-examples"></a>

### sam sync를 사용하여 Hello World 애플리케이션 업데이트
<a name="using-sam-cli-sync-examples-example1"></a>

이 예제에서는 먼저 샘플 Hello World 애플리케이션을 초기화합니다. 애플리케이션 공유에 대한 자세한 내용은 [자습서:를 사용하여 Hello World 애플리케이션 배포 AWS SAM](serverless-getting-started-hello-world.md) 섹션을 참조하세요.

`sam sync`를 실행하면 빌드 및 배포 프로세스가 시작됩니다.

```
$ sam sync
				
The SAM CLI will use the AWS Lambda, Amazon API Gateway, and AWS StepFunctions APIs to upload your code without
performing a CloudFormation deployment. This will cause drift in your CloudFormation stack.
**The sync command should only be used against a development stack**.

Confirm that you are synchronizing a development stack.

Enter Y to proceed with the command, or enter N to cancel:
 [Y/n]:
Queued infra sync. Waiting for in progress code syncs to complete...
Starting infra sync.
Manifest file is changed (new hash: 3298f13049d19cffaa37ca931dd4d421) or dependency folder (.aws-sam/deps/0663e6fe-a888-4efb-b908-e2344261e9c7) is missing for (HelloWorldFunction), downloading dependencies and copying/building source
Building codeuri: /Users/.../Demo/sync/sam-app/hello_world runtime: python3.9 metadata: {} architecture: x86_64 functions: HelloWorldFunction
Running PythonPipBuilder:CleanUp
Running PythonPipBuilder:ResolveDependencies
Running PythonPipBuilder:CopySource

Build Succeeded

Successfully packaged artifacts and wrote output template to file /var/folders/45/5ct135bx3fn2551_ptl5g6_80000gr/T/tmpx_5t4u3f.
Execute the following command to deploy the packaged template
sam deploy --template-file /var/folders/45/5ct135bx3fn2551_ptl5g6_80000gr/T/tmpx_5t4u3f --stack-name <YOUR STACK NAME>


    Deploying with following values
    ===============================
    Stack name                   : sam-app
    Region                       : us-west-2
    Disable rollback             : False
    Deployment s3 bucket         : aws-sam-cli-managed-default-samclisam-s3-demo-bucket-1a4x26zbcdkqr
    Capabilities                 : ["CAPABILITY_NAMED_IAM", "CAPABILITY_AUTO_EXPAND"]
    Parameter overrides          : {}
    Signing Profiles             : null

Initiating deployment
=====================


2023-03-17 11:17:19 - Waiting for stack create/update to complete

CloudFormation events from stack operations (refresh every 0.5 seconds)
---------------------------------------------------------------------------------------------------------------------------------------------
ResourceStatus                      ResourceType                        LogicalResourceId                   ResourceStatusReason
---------------------------------------------------------------------------------------------------------------------------------------------
CREATE_IN_PROGRESS                  AWS::CloudFormation::Stack          sam-app                             Transformation succeeded
CREATE_IN_PROGRESS                  AWS::CloudFormation::Stack          AwsSamAutoDependencyLayerNestedSt   -
                                                                        ack
CREATE_IN_PROGRESS                  AWS::IAM::Role                      HelloWorldFunctionRole              -
CREATE_IN_PROGRESS                  AWS::IAM::Role                      HelloWorldFunctionRole              Resource creation Initiated
CREATE_IN_PROGRESS                  AWS::CloudFormation::Stack          AwsSamAutoDependencyLayerNestedSt   Resource creation Initiated
                                                                        ack
CREATE_COMPLETE                     AWS::IAM::Role                      HelloWorldFunctionRole              -
CREATE_COMPLETE                     AWS::CloudFormation::Stack          AwsSamAutoDependencyLayerNestedSt   -
                                                                        ack
CREATE_IN_PROGRESS                  AWS::Lambda::Function               HelloWorldFunction                  -
CREATE_IN_PROGRESS                  AWS::Lambda::Function               HelloWorldFunction                  Resource creation Initiated
CREATE_COMPLETE                     AWS::Lambda::Function               HelloWorldFunction                  -
CREATE_IN_PROGRESS                  AWS::ApiGateway::RestApi            ServerlessRestApi                   -
CREATE_IN_PROGRESS                  AWS::ApiGateway::RestApi            ServerlessRestApi                   Resource creation Initiated
CREATE_COMPLETE                     AWS::ApiGateway::RestApi            ServerlessRestApi                   -
CREATE_IN_PROGRESS                  AWS::ApiGateway::Deployment         ServerlessRestApiDeployment47fc2d   -
                                                                        5f9d
CREATE_IN_PROGRESS                  AWS::Lambda::Permission             HelloWorldFunctionHelloWorldPermi   -
                                                                        ssionProd
CREATE_IN_PROGRESS                  AWS::Lambda::Permission             HelloWorldFunctionHelloWorldPermi   Resource creation Initiated
                                                                        ssionProd
CREATE_IN_PROGRESS                  AWS::ApiGateway::Deployment         ServerlessRestApiDeployment47fc2d   Resource creation Initiated
                                                                        5f9d
CREATE_COMPLETE                     AWS::ApiGateway::Deployment         ServerlessRestApiDeployment47fc2d   -
                                                                        5f9d
CREATE_IN_PROGRESS                  AWS::ApiGateway::Stage              ServerlessRestApiProdStage          -
CREATE_IN_PROGRESS                  AWS::ApiGateway::Stage              ServerlessRestApiProdStage          Resource creation Initiated
CREATE_COMPLETE                     AWS::ApiGateway::Stage              ServerlessRestApiProdStage          -
CREATE_COMPLETE                     AWS::Lambda::Permission             HelloWorldFunctionHelloWorldPermi   -
                                                                        ssionProd
CREATE_COMPLETE                     AWS::CloudFormation::Stack          sam-app                             -
---------------------------------------------------------------------------------------------------------------------------------------------

CloudFormation outputs from deployed stack
----------------------------------------------------------------------------------------------------------------------------------------------
Outputs
----------------------------------------------------------------------------------------------------------------------------------------------
Key                 HelloWorldFunctionIamRole
Description         Implicit IAM Role created for Hello World function
Value               arn:aws:iam::012345678910:role/sam-app-HelloWorldFunctionRole-BUFVMO2PJIYF

Key                 HelloWorldApi
Description         API Gateway endpoint URL for Prod stage for Hello World function
Value               https://pcrx5gdaof.execute-api.us-west-2.amazonaws.com/Prod/hello/

Key                 HelloWorldFunction
Description         Hello World Lambda Function ARN
Value               arn:aws:lambda:us-west-2:012345678910:function:sam-app-HelloWorldFunction-2PlN6TPTQoco
----------------------------------------------------------------------------------------------------------------------------------------------
Stack creation succeeded. Sync infra completed.

Infra sync completed.
CodeTrigger not created as CodeUri or DefinitionUri is missing for ServerlessRestApi.
```

배포가 완료되면 `HelloWorldFunction` 코드를 수정합니다. 는 AWS SAM CLI이 변경 사항을 감지하고 애플리케이션을에 동기화합니다 AWS 클라우드. 는 AWS 서비스 API를 AWS Lambda 지원하므로 빠른 동기화가 수행됩니다. APIs

```
Syncing Lambda Function HelloWorldFunction...
Manifest is not changed for (HelloWorldFunction), running incremental build
Building codeuri: /Users/.../Demo/sync/sam-app/hello_world runtime: python3.9 metadata: {} architecture: x86_64 functions: HelloWorldFunction
Running PythonPipBuilder:CopySource
Finished syncing Lambda Function HelloWorldFunction.
```

다음으로 애플리케이션 AWS SAM 템플릿에서 API 엔드포인트를 수정합니다. `/hello`를 `/helloworld`로 변경합니다.

```
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
...
Resources:
  HelloWorldFunction:
    ...
    Properties:
      ...
      Events:
        HelloWorld:
          Type: Api
          Properties:
            Path: /helloworld
            Method: get
```

Amazon API Gateway 리소스는 AWS 서비스 API를 지원하지 않으므로는 AWS SAM CLI 자동으로 CloudFormation 배포를 수행합니다. 다음은 출력의 예제입니다.

```
Queued infra sync. Waiting for in progress code syncs to complete...
Starting infra sync.
Manifest is not changed for (HelloWorldFunction), running incremental build
Building codeuri: /Users/.../Demo/sync/sam-app/hello_world runtime: python3.9 metadata: {} architecture: x86_64 functions: HelloWorldFunction
Running PythonPipBuilder:CopySource

Build Succeeded

Successfully packaged artifacts and wrote output template to file /var/folders/45/5ct135bx3fn2551_ptl5g6_80000gr/T/tmpuabo0jb9.
Execute the following command to deploy the packaged template
sam deploy --template-file /var/folders/45/5ct135bx3fn2551_ptl5g6_80000gr/T/tmpuabo0jb9 --stack-name <YOUR STACK NAME>


    Deploying with following values
    ===============================
    Stack name                   : sam-app
    Region                       : us-west-2
    Disable rollback             : False
    Deployment s3 bucket         : aws-sam-cli-managed-default-samclisam-s3-demo-bucket-1a4x26zbcdkqr
    Capabilities                 : ["CAPABILITY_NAMED_IAM", "CAPABILITY_AUTO_EXPAND"]
    Parameter overrides          : {}
    Signing Profiles             : null

Initiating deployment
=====================


2023-03-17 14:41:18 - Waiting for stack create/update to complete

CloudFormation events from stack operations (refresh every 0.5 seconds)
---------------------------------------------------------------------------------------------------------------------------------------------
ResourceStatus                      ResourceType                        LogicalResourceId                   ResourceStatusReason
---------------------------------------------------------------------------------------------------------------------------------------------
UPDATE_IN_PROGRESS                  AWS::CloudFormation::Stack          sam-app                             Transformation succeeded
UPDATE_IN_PROGRESS                  AWS::CloudFormation::Stack          AwsSamAutoDependencyLayerNestedSt   -
                                                                        ack
UPDATE_COMPLETE                     AWS::CloudFormation::Stack          AwsSamAutoDependencyLayerNestedSt   -
                                                                        ack
UPDATE_IN_PROGRESS                  AWS::ApiGateway::RestApi            ServerlessRestApi                   -
UPDATE_COMPLETE                     AWS::ApiGateway::RestApi            ServerlessRestApi                   -
CREATE_IN_PROGRESS                  AWS::ApiGateway::Deployment         ServerlessRestApiDeployment8cf30e   -
                                                                        d3cd
UPDATE_IN_PROGRESS                  AWS::Lambda::Permission             HelloWorldFunctionHelloWorldPermi   Requested update requires the
                                                                        ssionProd                           creation of a new physical
                                                                                                            resource; hence creating one.
UPDATE_IN_PROGRESS                  AWS::Lambda::Permission             HelloWorldFunctionHelloWorldPermi   Resource creation Initiated
                                                                        ssionProd
CREATE_IN_PROGRESS                  AWS::ApiGateway::Deployment         ServerlessRestApiDeployment8cf30e   Resource creation Initiated
                                                                        d3cd
CREATE_COMPLETE                     AWS::ApiGateway::Deployment         ServerlessRestApiDeployment8cf30e   -
                                                                        d3cd
UPDATE_IN_PROGRESS                  AWS::ApiGateway::Stage              ServerlessRestApiProdStage          -
UPDATE_COMPLETE                     AWS::ApiGateway::Stage              ServerlessRestApiProdStage          -
UPDATE_COMPLETE                     AWS::Lambda::Permission             HelloWorldFunctionHelloWorldPermi   -
                                                                        ssionProd
UPDATE_COMPLETE_CLEANUP_IN_PROGRE   AWS::CloudFormation::Stack          sam-app                             -
SS
DELETE_IN_PROGRESS                  AWS::Lambda::Permission             HelloWorldFunctionHelloWorldPermi   -
                                                                        ssionProd
DELETE_IN_PROGRESS                  AWS::ApiGateway::Deployment         ServerlessRestApiDeployment47fc2d   -
                                                                        5f9d
DELETE_COMPLETE                     AWS::ApiGateway::Deployment         ServerlessRestApiDeployment47fc2d   -
                                                                        5f9d
UPDATE_COMPLETE                     AWS::CloudFormation::Stack          AwsSamAutoDependencyLayerNestedSt   -
                                                                        ack
DELETE_COMPLETE                     AWS::Lambda::Permission             HelloWorldFunctionHelloWorldPermi   -
                                                                        ssionProd
UPDATE_COMPLETE                     AWS::CloudFormation::Stack          sam-app                             -
---------------------------------------------------------------------------------------------------------------------------------------------

CloudFormation outputs from deployed stack
----------------------------------------------------------------------------------------------------------------------------------------------
Outputs
----------------------------------------------------------------------------------------------------------------------------------------------
Key                 HelloWorldFunctionIamRole
Description         Implicit IAM Role created for Hello World function
Value               arn:aws:iam::012345678910:role/sam-app-HelloWorldFunctionRole-BUFVMO2PJIYF

Key                 HelloWorldApi
Description         API Gateway endpoint URL for Prod stage for Hello World function
Value               https://pcrx5gdaof.execute-api.us-west-2.amazonaws.com/Prod/hello/

Key                 HelloWorldFunction
Description         Hello World Lambda Function ARN
Value               arn:aws:lambda:us-west-2:012345678910:function:sam-app-HelloWorldFunction-2PlN6TPTQoco
----------------------------------------------------------------------------------------------------------------------------------------------


Stack update succeeded. Sync infra completed.

Infra sync completed.
```

## 자세히 알아보기
<a name="using-sam-cli-sync-learn"></a>

모든 `sam sync` 옵션에 대한 설명은 [sam sync](sam-cli-command-reference-sam-sync.md) 섹션을 참조하세요.