자습서: 서버리스 애플리케이션 배포 - Amazon CodeCatalyst

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

자습서: 서버리스 애플리케이션 배포

이 자습서에서는 워크플로를 사용하여 서버리스 애플리케이션을 CloudFormation 스택으로 구축, 테스트 및 배포하는 방법을 알아봅니다.

이 자습서의 애플리케이션은 'Hello World' 메시지를 출력하는 간단한 웹 애플리케이션입니다. AWS Lambda 함수와 Amazon API Gateway로 구성되어 있으며, 확장인 AWS Serverless Application Model (AWS SAM) 를 사용하여 AWS CloudFormation빌드합니다.

사전 조건

시작하기 전:

  • AWS 계정이 연결된 CodeCatalyst 공간이 필요합니다. 자세한 내용은 공백 생성 단원을 참조하십시오.

  • 스페이스에 다음과 같은 빈 프로젝트가 필요합니다.

    codecatalyst-cfn-project

    처음부터 시작 옵션을 사용하여 이 프로젝트를 만들 수 있습니다.

    자세한 내용은 Amazon에서 빈 프로젝트 생성 CodeCatalyst 단원을 참조하십시오.

  • 프로젝트에는 다음과 같은 CodeCatalyst 환경이 필요합니다.

    codecatalyst-cfn-environment

    이 환경을 다음과 같이 구성하십시오.

    • 원하는 유형 (예: 비프로덕션) 을 선택합니다.

    • AWS 계정을 여기에 연결하십시오.

    • 기본 IAM 역할의 경우 원하는 역할을 선택합니다. 나중에 다른 역할을 지정하게 됩니다.

    자세한 내용은 AWS 계정 및 에 배포 VPCs 단원을 참조하십시오.

1단계: 소스 리포지토리 만들기

이 단계에서는 에서 소스 리포지토리를 생성합니다 CodeCatalyst. 이 리포지토리는 Lambda 함수 파일과 같은 자습서의 소스 파일을 저장하는 데 사용됩니다.

소스 리포지토리에 대한 자세한 내용은 을 참조하십시오. 소스 리포지토리 생성

소스 리포지토리를 생성하려면
  1. 의 탐색 창에서 코드를 선택한 다음 소스 리포지토리를 선택합니다. CodeCatalyst

  2. 리포지토리 추가를 선택하고 리포지토리 생성을 선택합니다.

  3. 리포지토리 이름에 다음을 입력합니다.

    codecatalyst-cfn-source-repository
  4. 생성(Create)을 선택합니다.

라는 리포지토리가 생성되었습니다codecatalyst-cfn-source-repository.

2단계: AWS 역할 생성

이 단계에서는 다음과 같은 AWS IAM 역할을 생성합니다.

  • 배포 역할 - 서버리스 CodeCatalyst 애플리케이션을 배포할 AWS 계정 및 CloudFormation 서비스에 액세스할 수 있는 배포 AWS CloudFormation 스택 작업 권한을 부여합니다. AWS CloudFormation 스택 배포 작업은 워크플로의 일부입니다.

  • 빌드 역할 — CodeCatalyst 빌드 작업에 AWS 계정에 액세스하고 서버리스 애플리케이션 패키지가 저장되는 Amazon S3에 쓸 수 있는 권한을 부여합니다. 빌드 작업은 워크플로의 일부입니다.

  • 스택 역할 - 나중에 제공할 AWS SAM 템플릿에 지정된 리소스를 읽고 수정할 수 있는 CloudFormation 권한을 부여합니다. 또한 에 권한을 CloudWatch 부여합니다.

IAM역할에 대한 자세한 내용은 AWS Identity and Access Management 사용 설명서의 IAM 역할을 참조하십시오.

참고

시간을 절약하기 위해 앞서 나열한 세 가지 CodeCatalystWorkflowDevelopmentRole-spaceName 역할 대신 역할이라는 단일 역할을 만들 수 있습니다. 자세한 내용은 계정 및 스페이스에 대한 CodeCatalystWorkflowDevelopmentRole-spaceName역할 만들기 단원을 참조하십시오. CodeCatalystWorkflowDevelopmentRole-spaceName역할에는 보안 위험을 초래할 수 있는 매우 광범위한 권한이 있다는 점을 이해하세요. 보안이 덜 우려되는 자습서 및 시나리오에서만 이 역할을 사용하는 것이 좋습니다. 이 자습서에서는 앞서 나열한 세 가지 역할을 생성한다고 가정합니다.

참고

Lambda 실행 역할도 필요하지만 5단계에서 워크플로를 실행할 때 파일이 자동으로 생성되므로 sam-template.yml 지금 생성할 필요가 없습니다.

배포 역할을 생성하려면
  1. 다음과 같이 역할에 대한 정책을 생성합니다.

    1. 로그인하세요 AWS.

    2. 에서 IAM 콘솔을 엽니다 https://console.aws.amazon.com/iam/.

    3. 탐색 창에서 정책을 선택합니다.

    4. 정책 생성을 선택합니다.

    5. JSON탭을 선택합니다.

    6. 기존 코드를 삭제합니다.

    7. 다음 코드를 붙여넣습니다.

      { "Version": "2012-10-17", "Statement": [{ "Action": [ "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:Describe*", "cloudformation:UpdateStack", "cloudformation:CreateChangeSet", "cloudformation:DeleteChangeSet", "cloudformation:ExecuteChangeSet", "cloudformation:SetStackPolicy", "cloudformation:ValidateTemplate", "cloudformation:List*", "iam:PassRole" ], "Resource": "*", "Effect": "Allow" }] }
      참고

      이 역할을 사용하여 워크플로 작업을 처음 실행할 때는 리소스 정책 설명에 와일드카드를 사용하고 사용 가능한 상태가 되면 리소스 이름으로 정책의 범위를 좁히십시오.

      "Resource": "*"
    8. 다음: 태그를 선택합니다.

    9. 다음: 검토를 선택합니다.

    10. 이름에 다음을 입력합니다.

      codecatalyst-deploy-policy
    11. 정책 생성을 선택합니다.

      이제 권한 정책을 생성했습니다.

  2. 다음과 같이 배포 역할을 생성합니다.

    1. 탐색 창에서 역할을 선택한 후 역할 생성을 선택합니다.

    2. 사용자 지정 신뢰 정책을 선택합니다.

    3. 기존 사용자 지정 신뢰 정책을 삭제합니다.

    4. 다음 사용자 지정 신뢰 정책을 추가합니다.

      { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codecatalyst-runner.amazonaws.com", "codecatalyst.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
    5. Next(다음)를 선택합니다.

    6. 권한 정책에서 해당 확인란을 codecatalyst-deploy-policy 검색하여 선택합니다.

    7. Next(다음)를 선택합니다.

    8. 역할 이름에 다음을 입력합니다.

      codecatalyst-deploy-role
    9. 역할 설명에 다음을 입력합니다.

      CodeCatalyst deploy role
    10. 역할 생성을 선택합니다.

    이제 신뢰 정책 및 권한 정책을 사용하여 배포 역할을 생성했습니다.

  3. 다음과 같이 배포 역할을 ARN 확보하십시오.

    1. 탐색 창에서 역할을 선택합니다.

    2. 검색 상자에 방금 생성한 역할의 이름을 입력합니다 (codecatalyst-deploy-role).

    3. 목록에서 역할을 선택합니다.

      역할의 요약 페이지가 나타납니다.

    4. 상단에서 ARN값을 복사합니다.

    이제 적절한 권한이 있는 배포 역할을 생성하고 해당 역할을 획득했습니다ARN.

빌드 역할을 만들려면
  1. 다음과 같이 역할에 대한 정책을 생성합니다.

    1. 로그인하세요 AWS.

    2. 에서 IAM 콘솔을 엽니다 https://console.aws.amazon.com/iam/.

    3. 탐색 창에서 정책을 선택합니다.

    4. 정책 생성을 선택합니다.

    5. JSON탭을 선택합니다.

    6. 기존 코드를 삭제합니다.

    7. 다음 코드를 붙여넣습니다.

      { "Version": "2012-10-17", "Statement": [{ "Action": [ "s3:PutObject", "iam:PassRole" ], "Resource": "*", "Effect": "Allow" }] }
      참고

      이 역할을 사용하여 워크플로 작업을 처음 실행할 때는 리소스 정책 설명에 와일드카드를 사용하고 사용 가능한 상태가 되면 리소스 이름으로 정책의 범위를 좁히십시오.

      "Resource": "*"
    8. 다음: 태그를 선택합니다.

    9. 다음: 검토를 선택합니다.

    10. 이름에 다음을 입력합니다.

      codecatalyst-build-policy
    11. 정책 생성을 선택합니다.

      이제 권한 정책을 생성했습니다.

  2. 다음과 같이 빌드 역할을 생성합니다.

    1. 탐색 창에서 역할을 선택한 후 역할 생성을 선택합니다.

    2. 사용자 지정 신뢰 정책을 선택합니다.

    3. 기존 사용자 지정 신뢰 정책을 삭제합니다.

    4. 다음 사용자 지정 신뢰 정책을 추가합니다.

      { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codecatalyst-runner.amazonaws.com", "codecatalyst.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
    5. Next(다음)를 선택합니다.

    6. 권한 정책에서 해당 확인란을 codecatalyst-build-policy 검색하여 선택합니다.

    7. Next(다음)를 선택합니다.

    8. 역할 이름에 다음을 입력합니다.

      codecatalyst-build-role
    9. 역할 설명에 다음을 입력합니다.

      CodeCatalyst build role
    10. 역할 생성을 선택합니다.

    이제 신뢰 정책 및 권한 정책을 사용하여 빌드 역할을 생성했습니다.

  3. 다음과 같이 빌드 역할을 ARN 확보하세요.

    1. 탐색 창에서 역할을 선택합니다.

    2. 검색 상자에 방금 생성한 역할의 이름을 입력합니다 (codecatalyst-build-role).

    3. 목록에서 역할을 선택합니다.

      역할의 요약 페이지가 나타납니다.

    4. 상단에서 ARN값을 복사합니다.

    이제 적절한 권한이 있는 빌드 역할을 생성하고 해당 역할을 획득했습니다ARN.

스택 역할을 만들려면
  1. 스택을 배포하려는 계정을 AWS 사용하여 로그인합니다.

  2. 에서 IAM 콘솔을 엽니다 https://console.aws.amazon.com/iam/.

  3. 다음과 같이 스택 역할을 생성합니다.

    1. 탐색 창에서 역할을 선택합니다.

    2. Create role(역할 생성)을 선택합니다.

    3. AWS 서비스를 선택합니다.

    4. 사용 사례 섹션의 드롭다운 목록에서 선택합니다. CloudFormation

    5. CloudFormation라디오 버튼을 선택합니다.

    6. 하단에서 다음을 선택합니다.

    7. 검색 상자를 사용하여 다음 권한 정책을 찾은 다음 해당 확인란을 선택합니다.

      참고

      정책을 검색했는데 표시되지 않는 경우 필터 지우기를 선택하고 다시 시도하세요.

      • CloudWatchFullAccess

      • AWS CloudFormationFullAccess

      • IAMFullAccess

      • AWS Lambda_ FullAccess

      • 관리자 mazonAPIGateway

      • 아마존 S3 FullAccess

      • 아마존 EC2ContainerRegistryFullAccess

      첫 번째 정책은 경보 발생 시 CloudWatch 액세스를 허용하여 스택 롤백을 활성화합니다.

      나머지 정책으로는 AWS SAM 이 자습서에서 배포할 스택의 서비스와 리소스에 액세스할 수 있습니다. 자세한 내용은 AWS Serverless Application Model 개발자 안내서의 권한을 참조하십시오.

    8. Next(다음)를 선택합니다.

    9. 역할 이름에 다음을 입력합니다.

      codecatalyst-stack-role
    10. 역할 생성을 선택합니다.

  4. 다음과 ARN 같이 스택 역할을 가져옵니다.

    1. 탐색 창에서 역할을 선택합니다.

    2. 검색 상자에 방금 생성한 역할의 이름을 입력합니다 (codecatalyst-stack-role).

    3. 목록에서 역할을 선택합니다.

    4. 요약 섹션에서 ARN값을 복사합니다. 나중에 필요합니다.

    이제 적절한 권한이 있는 스택 역할을 생성하고 해당 스택 역할을 획득했습니다ARN.

3단계: AWS 역할 추가 CodeCatalyst

이 단계에서는 스페이스의 CodeCatalyst 계정 연결에 빌드 역할 (codecatalyst-build-rolecodecatalyst-deploy-role) 과 배포 역할 () 을 추가합니다.

참고

연결에 스택 역할 (codecatalyst-stack-role) 을 추가할 필요가 없습니다. 이는 배포 역할 간에 CodeCatalyst 이미 연결이 설정된 배포 역할을 사용하지 않는 CodeCatalyst 사람이 스택 역할을 AWS 사용하기 때문입니다. CloudFormation 는 액세스 권한을 얻는 CodeCatalyst 데 스택 역할을 사용하지 않으므로 계정 연결에 연결할 필요가 없습니다. AWS

계정 연결에 빌드 및 배포 역할을 추가하려면
  1. CodeCatalyst에서 스페이스로 이동합니다.

  2. AWS 계정을 선택하세요. 계정 연결 목록이 나타납니다.

  3. 빌드 및 배포 역할을 생성한 AWS 계정을 나타내는 계정 연결을 선택합니다.

  4. 관리 콘솔에서 역할 AWS 관리를 선택합니다.

    Amazon CodeCatalyst 스페이스에 IAM 역할 추가 페이지가 나타납니다. 페이지에 액세스하려면 로그인해야 할 수 있습니다.

  5. 에서 생성한 기존 역할 추가를 선택합니다IAM.

    드롭다운 목록이 나타납니다. 목록에는 codecatalyst-runner.amazonaws.com.rproxy.goskope.comcodecatalyst.amazonaws.com 서비스 주체를 포함하는 신뢰 정책이 적용된 모든 IAM 역할이 표시됩니다.

  6. 드롭다운 목록에서 선택하고 역할 codecatalyst-build-role 추가를 선택합니다.

  7. IAM역할 추가를 선택하고 에서 IAM 만든 기존 역할 추가를 선택한 다음 드롭다운 목록에서 선택합니다codecatalyst-deploy-role. [Add role]을 선택합니다.

    이제 스페이스에 빌드 및 배포 역할을 추가했습니다.

  8. Amazon CodeCatalyst 디스플레이 이름의 값을 복사합니다. 이 값은 나중에 워크플로를 만들 때 필요합니다.

4단계: Amazon S3 버킷 생성

이 단계에서는 서버리스 애플리케이션의 배포 패키지 .zip 파일을 저장하는 Amazon S3 버킷을 생성합니다.

Amazon S3 버킷을 생성하려면
  1. 에서 Amazon S3 콘솔을 엽니다 https://console.aws.amazon.com/s3/.

  2. 기본 창에서 버킷 생성을 선택합니다.

  3. 버킷 이름에 다음을 입력합니다.

    codecatalyst-cfn-s3-bucket
  4. AWS 지역에서 지역을 선택합니다. 이 자습서에서는 사용자가 미국 서부 (오레곤) us-west-2를 선택했다고 가정합니다. Amazon S3에서 지원하는 지역에 대한 자세한 내용은 의 Amazon 심플 스토리지 서비스 엔드포인트 및 할당량을 참조하십시오. AWS 일반 참조

  5. 페이지 하단에서 버킷 생성을 선택합니다.

이제 미국 서부 (오레곤) codecatalyst-cfn-s3-bucket us-west-2 지역에 버킷을 생성했습니다.

5단계: 소스 파일 추가

이 단계에서는 소스 리포지토리에 여러 애플리케이션 CodeCatalyst 소스 파일을 추가합니다. hello-world폴더에는 배포할 애플리케이션 파일이 들어 있습니다. tests폴더에는 단위 테스트가 들어 있습니다. 폴더 구조는 다음과 같습니다.

. |— hello-world | |— tests | |— unit | |— test-handler.js | |— app.js |— .npmignore |— package.json |— sam-template.yml |— setup-sam.sh

.npmignore 파일

.npmignore파일은 npm이 애플리케이션 패키지에서 제외해야 하는 파일 및 폴더를 나타냅니다. 이 자습서에서 npm은 응용 프로그램의 일부가 아니므로 tests 폴더를 제외합니다.

.npmignore 파일을 추가하려면
  1. https://codecatalyst.aws/ 에서 콘솔을 엽니다. CodeCatalyst

  2. 프로젝트를 선택하고, codecatalyst-cfn-project

  3. 탐색 창에서 코드를 선택한 다음 소스 리포지토리를 선택합니다.

  4. 소스 리포지토리 목록에서 리포지토리를 선택합니다. codecatalyst-cfn-source-repository

  5. 파일에서 파일 생성을 선택합니다.

  6. 파일 이름에 다음을 입력합니다.

    .npmignore
  7. 텍스트 상자에 다음 코드를 입력합니다.

    tests/*
  8. [커밋] 을 선택한 다음 [커밋] 을 다시 선택합니다.

    이제 리포지토리의 .npmignore 루트에 라는 파일이 생성되었습니다.

패키지.json 파일

package.json 파일에는 프로젝트 이름, 버전 번호, 설명, 종속성 및 애플리케이션과 상호 작용하고 실행하는 방법을 설명하는 기타 세부 정보와 같은 Node 프로젝트에 대한 중요한 메타데이터가 포함되어 있습니다.

이 자습서에는 종속성 목록과 스크립트가 포함되어 있습니다test. package.json 테스트 스크립트는 다음을 수행합니다.

  • 테스트 스크립트는 mocha를 사용하여 지정된 단위 테스트를 실행하고 xunit 리포터를 사용하여 결과를 junit.xml 파일에 기록합니다. hello-world/tests/unit/

  • 테스트 스크립트는 이스탄불 (nyc) 을 사용하여 클로버 리포터를 사용하여 코드 커버리지 보고서 (clover.xml) 를 생성합니다. 자세한 내용은 이스탄불 설명서의 대체 리포터 사용을 참조하십시오.

package.json 파일을 추가하려면
  1. 리포지토리의 파일에서 파일 생성을 선택합니다.

  2. 파일 이름에 다음을 입력합니다.

    package.json
  3. 텍스트 상자에 다음 코드를 입력합니다.

    { "name": "hello_world", "version": "1.0.0", "description": "hello world sample for NodeJS", "main": "app.js", "repository": "https://github.com/awslabs/aws-sam-cli/tree/develop/samcli/local/init/templates/cookiecutter-aws-sam-hello-nodejs", "author": "SAM CLI", "license": "MIT", "dependencies": { "axios": "^0.21.1", "nyc": "^15.1.0" }, "scripts": { "test": "nyc --reporter=clover mocha hello-world/tests/unit/ --reporter xunit --reporter-option output=junit.xml" }, "devDependencies": { "aws-sdk": "^2.815.0", "chai": "^4.2.0", "mocha": "^8.2.1" } }
  4. [커밋] 을 선택한 다음 [커밋] 을 다시 선택합니다.

    이제 저장소의 package.json 루트에 라는 파일을 추가했습니다.

sam-template.yml 파일

sam-template.yml 파일에는 Lambda 함수와 API Gateway를 배포하고 함께 구성하기 위한 지침이 들어 있습니다. 이는 템플릿 사양을 따르며, 이는 AWS Serverless Application Model 템플릿 사양을 확장합니다. AWS CloudFormation

이 자습서에서는 일반 AWS SAM AWS CloudFormation 템플릿 대신 템플릿을 사용합니다. 유용한 AWS: :Serverless: :Function 리소스 유형을 AWS SAM 제공하기 때문입니다. 이 유형은 일반적으로 기본 구문을 사용하기 위해 작성해야 하는 많은 behind-the-scenes 구성을 수행합니다. CloudFormation 예를 들어, 는 Lambda 함수, Lambda 실행 역할 및 함수를 시작하는 이벤트 소스 매핑을 AWS::Serverless::Function 생성합니다. basic을 사용하여 작성하려면 이 모든 것을 코딩해야 합니다. CloudFormation

이 자습서에서는 미리 작성된 템플릿을 사용하지만 빌드 작업을 사용하여 워크플로의 일부로 템플릿을 생성할 수 있습니다. 자세한 내용은 AWS CloudFormation 스택 배포 단원을 참조하십시오.

sam-template.yml 파일을 추가하려면
  1. 리포지토리의 파일에서 파일 생성을 선택합니다.

  2. 파일 이름에 다음을 입력합니다.

    sam-template.yml
  3. 텍스트 상자에 다음 코드를 입력합니다.

    AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: > serverless-api Sample SAM Template for serverless-api # More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst Globals: Function: Timeout: 3 Resources: HelloWorldFunction: Type: AWS::Serverless::Function # For details on this resource type, see https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction Properties: CodeUri: hello-world/ Handler: app.lambdaHandler Runtime: nodejs12.x Events: HelloWorld: Type: Api # For details on this event source type, see https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api Properties: Path: /hello Method: get Outputs: # ServerlessRestApi is an implicit API created out of the events key under Serverless::Function # Find out about other implicit resources you can reference within AWS SAM at # https://github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api HelloWorldApi: Description: "API Gateway endpoint URL for the Hello World function" Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/hello/" HelloWorldFunction: Description: "Hello World Lambda function ARN" Value: !GetAtt HelloWorldFunction.Arn HelloWorldFunctionIamRole: Description: "Implicit Lambda execution role created for the Hello World function" Value: !GetAtt HelloWorldFunctionRole.Arn
  4. [커밋] 을 선택한 다음 [커밋] 을 다시 선택합니다.

    이제 저장소의 루트 폴더 sam-template.yml 아래에 라는 파일을 추가했습니다.

setup-sam.sh 파일

setup-sam.sh 파일에는 AWS SAM CLI 유틸리티 다운로드 및 설치 지침이 들어 있습니다. 워크플로는 이 유틸리티를 사용하여 hello-world 소스를 패키징합니다.

setup-sam.sh 파일을 추가하려면
  1. 리포지토리의 파일에서 파일 생성을 선택합니다.

  2. 파일 이름에 다음을 입력합니다.

    setup-sam.sh
  3. 텍스트 상자에 다음 코드를 입력합니다.

    #!/usr/bin/env bash echo "Setting up sam" yum install unzip -y curl -LO https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-linux-x86_64.zip unzip -qq aws-sam-cli-linux-x86_64.zip -d sam-installation-directory ./sam-installation-directory/install; export AWS_DEFAULT_REGION=us-west-2

    위 코드에서 다음을 대체하십시오.us-west-2 해당 AWS 지역으로.

  4. 커밋을 선택한 다음 커밋을 다시 선택합니다.

    이제 저장소의 setup-sam.sh 루트에 라는 파일을 추가했습니다.

app.js 파일

app.js에는 Lambda 함수 코드가 들어 있습니다. 이 자습서에서는 코드가 텍스트를 반환합니다. hello world

app.js 파일을 추가하려면
  1. 리포지토리의 파일에서 파일 생성을 선택합니다.

  2. 파일 이름에 다음을 입력합니다.

    hello-world/app.js
  3. 텍스트 상자에 다음 코드를 입력합니다.

    // const axios = require('axios') // const url = 'http://checkip.amazonaws.com/'; let response; /** * * Event doc: https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-simple-proxy-for-lambda-input-format * @param {Object} event - API Gateway Lambda Proxy Input Format * * Context doc: https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-context.html * @param {Object} context * * Return doc: https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html * @returns {Object} object - API Gateway Lambda Proxy Output Format * */ exports.lambdaHandler = async (event, context) => { try { // const ret = await axios(url); response = { 'statusCode': 200, 'body': JSON.stringify({ message: 'hello world', // location: ret.data.trim() }) } } catch (err) { console.log(err); return err; } return response };
  4. [커밋] 을 선택한 다음 [커밋] 을 다시 선택합니다.

    라는 hello-world 폴더와 라는 파일이 생성되었습니다app.js.

test-handler.js 파일

test-handler.js 파일에는 Lambda 함수에 대한 단위 테스트가 포함되어 있습니다.

test-handler.js 파일을 추가하려면
  1. 리포지토리의 파일에서 파일 생성을 선택합니다.

  2. 파일 이름에 다음을 입력합니다.

    hello-world/tests/unit/test-handler.js
  3. 텍스트 상자에 다음 코드를 입력합니다.

    'use strict'; const app = require('../../app.js'); const chai = require('chai'); const expect = chai.expect; var event, context; describe('Tests index', function () { it('verifies successful response', async () => { const result = await app.lambdaHandler(event, context) expect(result).to.be.an('object'); expect(result.statusCode).to.equal(200); expect(result.body).to.be.an('string'); let response = JSON.parse(result.body); expect(response).to.be.an('object'); expect(response.message).to.be.equal("hello world"); // expect(response.location).to.be.an("string"); }); });
  4. [커밋] 을 선택한 다음 [커밋] 을 다시 선택합니다.

    이제 hello-world/tests/unit 폴더 test-handler.js 아래에 라는 파일을 추가했습니다.

이제 모든 소스 파일을 추가했습니다.

잠시 시간을 내어 작업을 다시 한 번 확인하고 모든 파일을 올바른 폴더에 배치했는지 확인하세요. 폴더 구조는 다음과 같습니다.

. |— hello-world | |— tests | |— unit | |— test-handler.js | |— app.js |— .npmignore |— README.md |— package.json |— sam-template.yml |— setup-sam.sh

6단계: 워크플로우 생성 및 실행

이 단계에서는 Lambda 소스 코드를 패키징하고 배포하는 워크플로를 생성합니다. 워크플로는 순차적으로 실행되는 다음과 같은 구성 요소로 구성됩니다.

  • 트리거 - 이 트리거는 소스 리포지토리에 변경 내용을 푸시할 때 워크플로가 자동으로 실행됩니다. 트리거에 대한 자세한 내용은 트리거를 사용하여 자동으로 워크플로 실행 시작 주제를 참조하십시오.

  • 테스트 작업 (Test) — 트리거 시 이 작업은 노드 패키지 관리자 (npm) 를 설치한 다음 명령을 실행합니다. npm run test 이 명령은 npm에게 파일에 정의된 test 스크립트를 실행하도록 지시합니다. package.json test스크립트는 차례로 단위 테스트를 실행하고 테스트 보고서 () 와 코드 커버리지 보고서 (junit.xml) 라는 두 개의 보고서를 생성합니다. clover.xml 자세한 내용은 패키지.json 파일 단원을 참조하십시오.

    그런 다음 테스트 동작은 XML 보고서를 CodeCatalyst 보고서로 변환하여 CodeCatalyst 콘솔의 테스트 동작의 보고서 탭 아래에 표시합니다.

    테스트 작업에 대한 자세한 내용은 을 참조하십시오워크플로를 사용한 테스트.

  • 빌드 작업 (BuildBackend) — 테스트 작업이 완료되면 빌드 작업은 패키지를 다운로드하여 설치하고, hello-world 소스를 패키징하고 AWS SAM CLI, Lambda 서비스가 예상하는 Amazon S3 버킷에 패키지를 복사합니다. 또한 이 작업은 라는 새 AWS SAM 템플릿 파일을 sam-template-packaged.yml 출력하여 라는 출력 아티팩트에 배치합니다. buildArtifact

    빌드 작업에 대한 자세한 내용은 을 참조하십시오워크플로를 사용한 빌드.

  • 배포 작업 (DeployCloudFormationStack) — 빌드 작업이 완료되면 배포 작업은 빌드 작업 (buildArtifact) 에서 생성된 출력 아티팩트를 찾아 그 안에서 AWS SAM 템플릿을 찾은 다음 템플릿을 실행합니다. AWS SAM 템플릿은 서버리스 애플리케이션을 배포하는 스택을 생성합니다.

워크플로 생성 방법
  1. 탐색 창에서 CI/CD를 선택한 다음 워크플로를 선택합니다.

  2. 워크플로 만들기를 선택합니다.

  3. 소스 리포지토리의 경우 선택합니다codecatalyst-cfn-source-repository.

  4. Branch의 경우 선택하십시오main.

  5. 생성(Create)을 선택합니다.

  6. YAML샘플 코드를 삭제합니다.

  7. 다음 YAML 코드를 추가합니다.

    참고

    다음 YAML 코드에서는 원하는 경우 Connections: 섹션을 생략할 수 있습니다. 이러한 섹션을 생략하는 경우 환경의 기본 역할 필드에 지정된 역할에 에서 설명한 두 IAM 역할의 권한 및 신뢰 정책이 포함되는지 확인해야 합니다. 2단계: AWS 역할 생성 기본 IAM 역할을 사용하여 환경을 설정하는 방법에 대한 자세한 내용은 을 참조하십시오환경 생성.

    Name: codecatalyst-cfn-workflow SchemaVersion: 1.0 Triggers: - Type: PUSH Branches: - main Actions: Test: Identifier: aws/managed-test@v1 Inputs: Sources: - WorkflowSource Outputs: Reports: CoverageReport: Format: CLOVERXML IncludePaths: - "coverage/*" TestReport: Format: JUNITXML IncludePaths: - junit.xml Configuration: Steps: - Run: npm install - Run: npm run test BuildBackend: Identifier: aws/build@v1 DependsOn: - Test Environment: Name: codecatalyst-cfn-environment Connections: - Name: codecatalyst-account-connection Role: codecatalyst-build-role Inputs: Sources: - WorkflowSource Configuration: Steps: - Run: . ./setup-sam.sh - Run: sam package --template-file sam-template.yml --s3-bucket codecatalyst-cfn-s3-bucket --output-template-file sam-template-packaged.yml --region us-west-2 Outputs: Artifacts: - Name: buildArtifact Files: - "**/*" DeployCloudFormationStack: Identifier: aws/cfn-deploy@v1 DependsOn: - BuildBackend Environment: Name: codecatalyst-cfn-environment Connections: - Name: codecatalyst-account-connection Role: codecatalyst-deploy-role Inputs: Artifacts: - buildArtifact Sources: [] Configuration: name: codecatalyst-cfn-stack region: us-west-2 role-arn: arn:aws:iam::111122223333:role/StackRole template: ./sam-template-packaged.yml capabilities: CAPABILITY_IAM,CAPABILITY_AUTO_EXPAND

    위 코드에서 다음을 바꾸십시오.

    • 두 인스턴스 모두 codecatalyst-cfn-environment 사용자 환경의 이름과 함께.

    • 두 인스턴스 모두 codecatalyst-account-connection 계정 연결의 디스플레이 이름과 함께. 표시 이름은 숫자일 수 있습니다. 자세한 내용은 3단계: AWS 역할 추가 CodeCatalyst 단원을 참조하십시오.

    • codecatalyst-build-role 에서 만든 빌드 역할의 이름을 사용합니다2단계: AWS 역할 생성.

    • codecatalyst-cfn-s3-bucket 에서 생성한 Amazon S3 버킷의 이름을 사용합니다4단계: Amazon S3 버킷 생성.

    • 의 두 인스턴스 모두 us-west-2 Amazon S3 버킷이 있는 지역 (첫 번째 인스턴스) 과 스택이 배포될 지역 (두 번째 인스턴스) 을 사용합니다. 이들 지역은 다를 수 있습니다. 이 자습서에서는 두 지역이 모두 로 us-west-2 설정되어 있다고 가정합니다. Amazon S3에서 지원하는 지역에 대한 자세한 내용과 자세한 내용은 의 서비스 엔드포인트 및 할당량을 참조하십시오. AWS CloudFormationAWS 일반 참조

    • codecatalyst-deploy-role 에서 생성한 배포 역할의 이름과 함께. 2단계: AWS 역할 생성

    • codecatalyst-cfn-environment 에서 만든 환경의 이름과 함께사전 조건.

    • arn:aws:iam::111122223333:role/StackRole 에서 생성한 스택 역할의 Amazon 리소스 이름 (ARN) 을 사용합니다2단계: AWS 역할 생성.

      참고

      빌드, 배포 및 스택 역할을 생성하지 않기로 결정했다면 다음을 대체하십시오.codecatalyst-build-role, codecatalyst-deploy-role, 및 arn:aws:iam::111122223333:role/StackRole 이름 또는 ARN CodeCatalystWorkflowDevelopmentRole-spaceName 역할의 이름을 입력하세요. 이에 대한 자세한 내용은 2단계: AWS 역할 생성 섹션을 참조하세요.

    이전에 표시된 코드의 속성에 대한 자세한 내용은 를 참조하십시오AWS CloudFormation '스택 배포' 작업 YAML.

  8. (선택 사항) [Validate] 를 선택하여 커밋하기 전에 YAML 코드가 유효한지 확인합니다.

  9. 커밋을 선택합니다.

  10. 워크플로 커밋 대화 상자에서 다음을 입력합니다.

    1. 워크플로 파일 이름의 경우 기본값인 을 유지합니다codecatalyst-cfn-workflow.

    2. 커밋 메시지에는 다음을 입력합니다.

      add initial workflow file
    3. 리포지토리의 경우 선택합니다 codecatalyst-cfn-source-repository.

    4. 브랜치 이름으로 main을 선택합니다.

    5. 커밋을 선택합니다.

    이제 워크플로가 생성되었습니다. 워크플로 맨 위에 정의된 트리거로 인해 워크플로 실행이 자동으로 시작됩니다. 특히, codecatalyst-cfn-workflow.yaml 파일을 소스 리포지토리에 커밋 (및 푸시) 하면 트리거가 워크플로 실행을 시작했습니다.

실행 중인 워크플로를 보려면
  1. 탐색 창에서 CI/CD를 선택한 다음 워크플로를 선택합니다.

  2. 방금 만든 워크플로를 선택합니다. codecatalyst-cfn-workflow

  3. 실행 탭을 선택합니다.

  4. 실행 ID 열에서 실행 ID를 선택합니다.

  5. 테스트를 선택하여 테스트 진행 상황을 확인합니다.

  6. 빌드 진행 상황을 BuildBackend확인하도록 선택합니다.

  7. DeployCloudFormationStack선택하여 배포 진행 상황을 확인하세요.

    실행 세부 정보 보기에 대한 자세한 내용은 을 참조하십시오워크플로 실행 상태 및 세부 정보 보기.

  8. DeployCloudFormationStack작업이 완료되면 다음을 수행하십시오.

    • 워크플로가 성공적으로 실행되면 다음 절차로 이동합니다.

    • 테스트 또는 BuildBackend작업에서 워크플로 실행이 실패한 경우 로그를 선택하여 문제를 해결하십시오.

    • 작업에서 워크플로 실행이 DeployCloudFormationStack실패한 경우 배포 작업을 선택한 다음 요약 탭을 선택합니다. CloudFormation 이벤트 섹션으로 스크롤하여 자세한 오류 메시지를 확인합니다. 롤백이 발생한 경우 워크플로를 다시 AWS 실행하기 전에 AWS CloudFormation 콘솔을 통해 codecatalyst-cfn-stack 스택을 삭제하십시오.

배포를 확인하려면
  1. 배포에 성공하면 상단 근처의 가로 메뉴 표시줄에서 Variables (7) 를 선택합니다. (오른쪽 창에서 변수를 선택하지 마십시오.)

  2. HelloWorldApi다음으로 를 https:// URL 브라우저에 붙여넣습니다.

    Lambda 함수의 hello world JSON 메시지가 표시되어 워크플로가 Lambda 함수 및 Gateway를 성공적으로 배포 및 구성했음을 나타냅니다. API

    작은 정보

    몇 가지 작은 구성으로 워크플로 URL 다이어그램에 이를 CodeCatalyst 표시할 수 있습니다. 자세한 내용은 URL 워크플로 다이어그램에 앱 표시 단원을 참조하십시오.

단위 테스트 결과 및 코드 커버리지를 확인하려면
  1. 워크플로 다이어그램에서 [Test] 를 선택한 다음 [Reports] 를 선택합니다.

  2. 단위 테스트 결과를 보거나 테스트 중인 파일의 코드 적용 범위 세부 정보 (이 경우에는 app.js 및) 를 볼 수 test-handler.js 있습니다. TestReportCoverageReport

배포된 리소스를 확인하려면
  1. 에 AWS Management Console 로그인하고 API 게이트웨이 콘솔을 여십시오 https://console.aws.amazon.com/apigateway/.

  2. AWS SAM 템플릿이 codecatalyst-cfn-stackAPI생성되었는지 확인해 보세요. API이름은 워크플로 정의 파일 (codecatalyst-cfn-workflow.yaml) 의 Configuration/name 값에서 따왔습니다.

  3. 에서 AWS Lambda 콘솔을 엽니다 https://console.aws.amazon.com/lambda/.

  4. 탐색 창에서 함수를 선택합니다.

  5. Lambda 함수를 선택하십시오. codecatalyst-cfn-stack-HelloWorldFunction-string

  6. API게이트웨이가 어떻게 함수의 트리거인지 확인할 수 있습니다. 이 통합은 AWS SAM AWS::Serverless::Function 리소스 유형에 따라 자동으로 구성되었습니다.

7단계: 변경

이 단계에서는 Lambda 소스 코드를 변경하고 커밋합니다. 이 커밋은 새 워크플로 실행을 시작합니다. 이 실행은 Lambda 콘솔에 지정된 기본 트래픽 이동 구성을 사용하는 청록색 체계로 새 Lambda 함수를 배포합니다.

Lambda 소스를 변경하려면
  1. 에서 CodeCatalyst 프로젝트로 이동합니다.

  2. 탐색 창에서 코드를 선택한 다음 소스 리포지토리를 선택합니다.

  3. 소스 리포지토리를 선택합니다codecatalyst-cfn-source-repository.

  4. 애플리케이션 파일 변경:

    1. hello-world 폴더를 선택합니다.

    2. app.js 파일을 선택합니다.

    3. 편집을 선택합니다.

    4. 23번째 줄에서 hello worldTutorial complete! 변경하십시오.

    5. [커밋] 을 선택한 다음 [커밋] 을 다시 선택합니다.

      커밋하면 워크플로우 실행이 시작됩니다. 이름 변경을 반영하도록 단위 테스트를 업데이트하지 않았으므로 이 실행은 실패합니다.

  5. 단위 테스트 업데이트:

    1. hello-world\tests\unit\test-handler.js를 선택합니다.

    2. 편집을 선택합니다.

    3. 19번째 줄에서 hello world 으로 Tutorial complete! 변경하십시오.

    4. [커밋] 을 선택한 다음 [커밋] 을 다시 선택합니다.

      커밋하면 다른 워크플로가 실행됩니다. 이 실행은 성공할 것입니다.

  6. 탐색 창에서 CI/CD를 선택한 다음 워크플로를 선택합니다.

  7. 선택한 codecatalyst-cfn-workflow 다음 실행을 선택합니다.

  8. 최근 실행의 실행 ID를 선택합니다. 아직 진행 중이어야 합니다.

  9. Test BuildBackend, DeployCloudFormationStack를 선택하여 워크플로우 실행 진행 상황을 확인합니다.

  10. 워크플로가 끝나면 상단 근처에 있는 변수 (7) 를 선택합니다.

  11. 그런 다음 https:// URL 브라우저에 붙여넣습니다. HelloWorldApi

    새 애플리케이션이 성공적으로 배포되었음을 알리는 Tutorial complete! 메시지가 브라우저에 나타납니다.

정리

요금이 부과되지 않도록 이 자습서에서 사용된 파일 및 서비스를 정리하세요.

CodeCatalyst 콘솔에서 정리하려면
  1. https://codecatalyst.aws/ 에서 CodeCatalyst 콘솔을 엽니다.

  2. 삭제codecatalyst-cfn-workflow.

  3. 삭제codecatalyst-cfn-environment.

  4. 삭제codecatalyst-cfn-source-repository.

  5. 삭제codecatalyst-cfn-project.

에서 정리하려면 AWS Management Console
  1. 다음과 CloudFormation 같이 청소하십시오.

    1. https://console.aws.amazon.com/cloudformation 에서 AWS CloudFormation 콘솔을 엽니다.

    2. codecatalyst-cfn-stack를 삭제합니다.

      스택을 삭제하면 API Gateway 및 Lambda 서비스에서 모든 튜토리얼 리소스가 제거됩니다.

  2. 다음과 같이 Amazon S3에서 정리합니다.

    1. 에서 Amazon S3 콘솔을 엽니다 https://console.aws.amazon.com/s3/.

    2. codecatalyst-cfn-s3-bucket을 선택합니다.

    3. 버킷 콘텐츠를 삭제합니다.

    4. 버킷을 삭제합니다.

  3. 다음과 IAM 같이 정리하십시오.

    1. 에서 IAM 콘솔을 https://console.aws.amazon.com/iam/여십시오.

    2. codecatalyst-deploy-policy를 삭제합니다.

    3. codecatalyst-build-policy를 삭제합니다.

    4. codecatalyst-stack-policy를 삭제합니다.

    5. codecatalyst-deploy-role를 삭제합니다.

    6. codecatalyst-build-role를 삭제합니다.

    7. codecatalyst-stack-role를 삭제합니다.

이 자습서에서는 CodeCatalyst 워크플로와 스택 배포 작업을 사용하여 서버리스 애플리케이션을 CloudFormation 스택으로 AWS CloudFormation 배포하는 방법을 배웠습니다.