툴킷을 사용한 AWS 서버리스 애플리케이션 작업 AWS - AWS Cloud9

AWS Cloud9 신규 고객은 더 이상 사용할 수 없습니다. AWS Cloud9 의 기존 고객은 정상적으로 서비스를 계속 이용할 수 있습니다. 자세히 알아보기

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

툴킷을 사용한 AWS 서버리스 애플리케이션 작업 AWS

AWS 툴킷은 서버리스 애플리케이션을 지원합니다. AWS 툴킷을 사용하면 AWS Lambda함수가 포함된 서버리스 응용 프로그램을 만든 다음 해당 응용 프로그램을 스택에 배포할 수 있습니다. AWS CloudFormation

서버리스 애플리케이션 만들기

이 예제에서는 AWS 툴킷을 사용하여 서버리스 애플리케이션을 만드는 방법을 보여줍니다. 서버리스 애플리케이션을 실행하고 디버깅하는 방법에 대한 자세한 내용은 서버리스 애플리케이션 실행 및 디버깅 섹션을 참조하세요.

서버리스 응용 프로그램을 만들기 위한 필수 사전 요구 사항에는 및 가 포함됩니다. AWS SAM CLIAWS CLI 이러한 내용은 에 포함되어 있습니다. AWS Cloud9 AWS SAM CLI설치되지 않았거나 오래된 버전인 경우 설치 또는 업그레이드를 실행해야 할 수 있습니다. 설치 AWS SAM CLI 방법에 대한 지침은 설치를 AWS SAM CLI 참조하고 업그레이드 방법에 대한 지침은 업그레이드를 AWS SAM CLI 참조하십시오. AWS SAM CLI

AWS 를 사용하여 서버리스 애플리케이션 만들기

이 예제에서는 () 를 사용하여 AWS 툴킷으로 서버리스 애플리케이션을 만드는 방법을 보여줍니다.AWS Serverless Application ModelAWS SAM

  1. AWS 탐색기에서 Lambda 노드의 컨텍스트 메뉴 (마우스 오른쪽 버튼 클릭) 를 연 다음 Lambda 애플리케이션 생성을 선택합니다. SAM

    참고

    또는 AWS: Explorer 머리글 옆의 메뉴 아이콘을 선택하고 SAMLambda 애플리케이션 생성을 선택할 수 있습니다.

  2. 애플리케이션의 SAM 런타임을 선택합니다. 이 예에서는 nodejs12.x를 선택합니다.

    참고

    “(Image)”라는 표시가 있는 런타임 중 하나를 선택하면 애플리케이션의 패키지 유형이 Image가 됩니다. “(Image)”라는 표시가 없는 런타임 중 하나를 선택하면 애플리케이션의 유형이 Zip이 됩니다. Image 패키지 유형과 Zip 패키지 유형의 차이점에 대한 자세한 내용은AWS Lambda 개발자 가이드에서 Lambda 배포 패키지를 참조하세요.

  3. 서버리스 앱에 대해 다음 템플릿 중 하나를 선택합니다.

    • AWS SAM Hello World: 클래식 “Hello World” 메시지를 반환하는 Lambda 함수가 포함된 기본 템플릿입니다.

    • AWS Step Functions 샘플 앱: 주식 거래 워크플로를 실행하는 샘플 애플리케이션입니다. Step Functions는 관련된 Lambda 함수의 상호 작용을 오케스트레이션합니다.

  4. 새 프로젝트의 위치를 선택합니다. 사용 가능한 기존 workspace 폴더가 있다면 폴더를 선택합니다. 그렇지 않다면 다른 폴더를 찾아봅니다. Select a different folder(다른 폴더 선택)를 선택하면 폴더 위치를 선택할 수 있는 대화 상자가 표시됩니다.

  5. 새 애플리케이션의 이름을 입력합니다. my-sam-app-nodejs를 입력하세요. Enter를 누른 후 AWS 툴킷에서 프로젝트를 생성하는 데 몇 분 정도 걸립니다.

프로젝트가 생성되면 [환경(Environment)] 창에서 애플리케이션의 파일을 볼 수 있습니다. Explorer(탐색기) 창에서 파일을 찾습니다.

응용 프로그램에 SAM 사용할 수 있는 런타임을 보여주는 스크린샷

서버리스 애플리케이션 실행 및 디버깅

AWS 툴킷을 사용하여 서버리스 애플리케이션을 디버깅하고 개발 환경에서 로컬로 실행하는 방법을 구성할 수 있습니다. () 템플릿으로 정의된 서버리스 애플리케이션을 디버깅할 수 있습니다. AWS Serverless Application Model AWS SAM이 템플릿은 간단한 YAML 구문을 사용하여 서버리스 애플리케이션을 구성하는 함수APIs, 데이터베이스 및 이벤트 소스 매핑과 같은 리소스를 설명합니다.

템플릿을 자세히 살펴보려면 개발자 안내서의 AWS SAM AWS SAM 템플릿 해부학을 참조하십시오.AWS Serverless Application Model

또는 템플릿에 커밋되지 않은 서버리스 애플리케이션을 빠르게 디버깅할 수 있습니다. SAM

인라인 액션을 사용하여 적합한 함수를 식별하여 디버그 동작을 구성하기 시작합니다. AWS Lambda SAM템플릿에서 정의한 인프라를 사용하려면 관련 YAML 형식의 파일에서 인라인 작업을 사용하십시오. 템플릿 없이 함수를 직접 테스트하려면 애플리케이션 파일의 Lambda 핸들러에 대한 컨텍스트 인식 링크를 사용합니다.

참고

이 예제에서는 를 사용하는 애플리케이션을 디버깅하고 있습니다. JavaScript 하지만 AWS 툴킷에서 제공되는 디버깅 기능을 다음 언어 및 런타임과 함께 사용할 수 있습니다.

  • JavaScript — Node.js 10. x, 12. x, 14. x

  • Python — 3.7, 3.8, 3.9, 3.10 (Python 2.7 및 3.6 서버리스 애플리케이션은 툴킷으로 실행할 수 있지만 디버깅할 수는 없습니다.) AWS

선택하는 언어는 컨텍스트 인식 링크에서 적합한 Lambda 핸들러를 나타내는 방법에도 영향을 미칩니다. 자세한 내용은 코드에서 직접 서버리스 함수 실행 및 디버깅 단원을 참조하십시오.

템플릿을 SAM 사용하여 서버리스 애플리케이션을 실행하고 디버깅합니다.

SAM템플릿을 사용하여 실행 및 디버깅되는 애플리케이션의 경우 YAML -formatted 파일은 애플리케이션의 동작과 해당 애플리케이션이 사용하는 리소스를 설명합니다. AWS 툴킷을 사용하여 서버리스 애플리케이션을 만들면 프로젝트에 이름이 지정된 template.yaml 파일이 자동으로 생성됩니다.

이 절차에서는 서버리스 애플리케이션 만들기에서 생성된 예제 애플리케이션을 사용합니다.

SAM템플릿을 사용하여 서버리스 애플리케이션을 실행하고 디버그하려면

  1. 서버리스 애플리케이션을 구성하는 애플리케이션 파일을 보려면 [환경(Environment)] 창으로 이동합니다.

  2. 응용 프로그램 폴더 (예: my-sample-app) 에서 파일을 엽니다. template.yaml

  3. template.yaml의 경우 Edit Launch Configuration(실행 구성 편집)을 선택합니다.

    새 편집기에 기본 속성의 디버깅 구성을 제공하는 launch.json 파일이 표시됩니다.

  4. 다음 구성 속성의 값을 편집하거나 확인합니다.

    • "name"Run(실행) 보기의 Configuration(구성) 드롭다운 필드에 표시할 알아보기 쉬운 이름을 입력합니다.

    • "target" – 값이 "template"인지 확인합니다. 이렇게 하면 SAM 템플릿이 디버그 세션의 진입점이 됩니다.

    • "templatePath" - template.yaml 파일의 상대 경로 또는 절대 경로를 입력합니다.

    • "logicalId"— 이름이 SAM 템플릿의 리소스 섹션에 지정된 이름과 일치하는지 확인하십시오. 이 예에서는 AWS::Serverless::Function 유형의 HelloWorldFunction입니다.

    launch.json 파일의 이들 항목과 기타 항목에 대한 자세한 내용은 서버리스 애플리케이션 디버깅을 위한 구성 옵션 섹션을 참조하세요.

  5. 디버그 구성이 만족스럽다면 launch.json을 저장합니다. 그런 다음 옆에 있는 녹색 “재생” 버튼을 선택하여 RUN디버깅을 시작합니다.

    참고

    SAM애플리케이션이 실행되지 않는 경우 출력 창에서 오류가 Docker 이미지가 빌드되지 않아서 발생한 것인지 확인하세요. 환경에서 디스크 공간을 확보해야 할 수 있습니다.

    자세한 내용은 AWS Cloud9 환경에 디스크 공간이 충분하지 않아 AWS 툴킷에서 SAM 응용 프로그램을 로컬로 실행하는 중 오류가 발생했습니다. 단원을 참조하십시오.

    디버깅 세션이 시작되면 DEBUGCONSOLE패널에 디버깅 출력이 표시되고 Lambda 함수에서 반환되는 모든 값이 표시됩니다. SAM애플리케이션을 디버깅할 때 AWS 툴킷은 출력 패널에서 출력 채널로 선택됩니다.

    참고

    Windows 사용자의 경우 이 프로세스 중에 Docker 탑재 오류가 발생하면 Docker Settings(Docker 설정)에서 공유 드라이브의 자격 증명을 새로 고쳐야 할 수 있습니다. Docker 탑재 오류는 다음과 유사합니다.

    Fetching lambci/lambda:nodejs10.x Docker container image...... 2019-07-12 13:36:58 Mounting C:\Users\<username>\AppData\Local\Temp\ ... as /var/task:ro,delegated inside runtime container Traceback (most recent call last): ...requests.exceptions.HTTPError: 500 Server Error: Internal Server Error ...

코드에서 직접 서버리스 함수 실행 및 디버깅

AWS SAM 애플리케이션을 테스트할 때 Lambda 함수만 실행 및 디버깅하도록 선택할 수 있습니다. 템플릿에 정의된 다른 리소스는 제외하십시오. SAM 이 방법에서는 인라인 작업을 사용하여 직접 호출할 수 있는 소스 코드에서 Lambda 함수 핸들러를 식별해야 합니다.

컨텍스트 인식 링크로 감지되는 Lambda 핸들러는 애플리케이션에 사용 중인 언어와 런타임에 따라 다릅니다.

언어/런타임 컨텍스트 인식 링크로 식별되는 Lambda 함수에 대한 조건

JavaScript (Node.js 10.x, 12.x, 14.x)

이 함수에는 다음 기능도 포함됩니다.
  • 최대 세 개의 파라미터가 있는 내보낸 함수입니다.

  • WorkSpace 폴더 내의 상위 폴더에 package.json 파일이 있습니다.

Python (3.7, 3.8, 3.9, 3.10)

이 함수에는 다음 기능도 포함합니다.
  • 최상위 함수입니다.

  • WorkSpace 폴더 내의 상위 폴더에 requirements.txt 파일이 있습니다.

애플리케이션 코드에서 직접 서버리스 애플리케이션을 실행하고 디버그하려면

  1. 서버리스 애플리케이션 파일을 보려면 편집기 옆의 폴더 아이콘을 선택하여 애플리케이션 폴더로 이동합니다.

  2. 응용 프로그램 폴더 (예: my-sample-app) 에서 함수 폴더 (이 예에서는 hello-world) 를 확장하고 파일을 엽니다. app.js

  3. 적합한 Lambda 핸들러 함수를 식별하는 인라인 작업에서 Add Debug Configuration을 선택합니다. 디버그 구성 추가 옵션이 나타나지 않으면 코드 렌즈를 활성화해야 합니다. 코드 렌즈를 활성화하려면 AWS 툴킷 코드 렌즈 활성화 섹션을 참조하세요.

    Lambda 함수 핸들러에 대한 인라인 작업에서 디버그 구성 추가 옵션에 액세스합니다.
  4. 애플리케이션이 실행되는 런타임을 선택합니다. SAM

  5. launch.json 파일의 편집기에서 다음 구성 속성의 값을 편집하거나 확인합니다.

    • "name" - 알아보기 쉬운 이름을 입력합니다.

    • "target" - Lambda 함수 핸들러가 직접 호출되도록 값이 "code"인지 확인합니다.

    • "lambdaHandler" – Lambda가 함수를 호출하는 코드 내에 메서드 이름을 입력합니다. 예를 들어, 에 있는 애플리케이션의 JavaScript 경우 기본값은 입니다app.lambdaHandler.

    • "projectRoot" - Lambda 함수가 포함된 애플리케이션 파일의 경로를 입력합니다.

    • "runtime" - Lambda 실행 환경에 유효한 런타임을 입력하거나 확인합니다(예: "nodejs.12x").

    • "payload" - 다음 옵션 중 하나를 선택하여 Lambda 함수에 입력으로 제공할 이벤트 페이로드를 정의합니다.

      • "json": JSON 이벤트 페이로드를 정의하는 -형식의 키-값 쌍.

      • "path": 이벤트 페이로드로 사용되는 파일의 경로입니다.

  6. 디버그 구성이 만족스러우면 옆에 있는 녹색 재생 화살표를 선택하여 디버깅을 시작하세요. RUN

    디버깅 세션이 시작되면 DEBUGCONSOLE패널에 디버깅 출력이 표시되고 Lambda 함수에서 반환되는 모든 값이 표시됩니다. SAM애플리케이션을 디버깅할 때 AWS 툴킷은 출력 패널의 출력 채널로 선택됩니다.

    참고

    오류 메시지에 Docker가 언급된 경우 이 참고를 참조하세요.

로컬 Amazon API 게이트웨이 리소스 실행 및 디버깅

에서 지정한 AWS SAM API Gateway 로컬 리소스를 실행하거나 디버깅할 수 있습니다. template.yamltype=aws-sam 사용하여 AWS Cloud9 시작 구성을 실행하면 됩니다. invokeTarget.target=api

참고

API게이트웨이는 두 가지 유형을 지원합니다APIs. 이들은 REST 및 HTTP APIs 입니다. 하지만 AWS 툴킷의 API 게이트웨이 기능만 지원합니다 RESTAPIs. “API게이트웨이 V2"라고도 APIs 합니다. HTTP APIs

로컬 API 게이트웨이 리소스를 실행하고 디버깅하려면
  1. 다음 접근 방식 중 하나를 선택하여 AWS SAM API 게이트웨이 리소스의 시작 구성을 생성합니다.

    • 옵션 1: AWS SAM 프로젝트에 있는 핸들러 소스 코드(특히 .js, .cs 또는 .py 파일)로 이동하여 Lambda 핸들러를 마우스 포인터로 가리킨 다음 Add Debug Configuration(디버그 구성 추가)를 선택합니다. 디버그 구성 추가 옵션이 나타나지 않는다면 코드 렌즈를 활성화합니다. 코드 렌즈를 활성화하려면 AWS 툴킷 코드 렌즈 활성화 섹션을 참조하세요. 그런 다음 메뉴에서 API Event라고 표시된 항목을 선택합니다.

    • 옵션 2: launch.json을 편집하고 다음 구문을 사용하여 새 시작 구성을 생성합니다.

      { "type": "aws-sam", "request": "direct-invoke", "name": "myConfig", "invokeTarget": { "target": "api", "templatePath": "n12/template.yaml", "logicalId": "HelloWorldFunction" }, "api": { "path": "/hello", "httpMethod": "post", "payload": { "json": {} } }, "sam": {}, "aws": {} }
  2. Run(실행) 버튼 옆에 있는 드롭다운 메뉴에서 시작 구성(위의 예에서는 myConfig)을 선택합니다.

  3. (선택 사항) Lambda 프로젝트 코드에 중단점을 추가합니다.

  4. [실행(Run)] 버튼 옆에 있는 녹색 ‘재생’ 버튼을 선택합니다.

  5. 출력 창에 결과가 나타납니다.

구성

invokeTarget.target 속성 값 api를 사용하면 도구 키트로 api 필드를 지원하는 시작 구성 검증 및 동작을 변경할 수 있습니다.

{ "type": "aws-sam", "request": "direct-invoke", "name": "myConfig", "invokeTarget": { "target": "api", "templatePath": "n12/template.yaml", "logicalId": "HelloWorldFunction" }, "api": { "path": "/hello", "httpMethod": "post", "payload": { "json": {} }, "querystring": "abc=def&qrs=tuv", "headers": { "cookie": "name=value; name2=value2; name3=value3" } }, "sam": {}, "aws": {} }

예시의 값을 다음과 같이 변경하세요.

invokeTarget.logicalId

API리소스.

경로

시작 구성에서 요청하는 API 경로 (예:"path": "/hello").

지정된 API 경로에서 확인된 유효한 경로여야 합니다. template.yaml invokeTarget.templatePath

httpMethod

"delete," "get," "head," "options," "patch," "post 및 "put" 동사 중 하나를 사용합니다.

payload

JSONlambda.payload 필드와 동일한 구조 및 규칙을 사용하여 요청에 전송할 페이로드 (HTTP본문) 입니다.

payload.path페이로드가 포함된 파일을 가리킵니다. JSON

payload.jsonJSON페이로드를 인라인으로 지정합니다.

헤더

이름-값 페어의 선택적 맵입니다. 이를 사용하여 요청에 포함할 HTTP 헤더를 지정할 수 있습니다.

"headers": { "accept-encoding": "deflate, gzip;q=1.0, *;q=0.5", "accept-language": "fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5", "cookie": "name=value; name2=value2; name3=value3", "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36", }
querystring

(선택 사항) 이 문자열을 사용하여 요청의 querystring을 설정합니다(예: "querystring": "abc=def&ghi=jkl").

aws

AWS 연결 정보 제공 방법. 자세한 내용은 서버리스 애플리케이션 디버깅을 위한 구성 옵션에서 AWS 연결(aws) 속성 표를 참조하세요.

sam

애플리케이션 AWS SAM CLI 빌드 방법. 자세한 내용은 의 AWS SAM CLI(” sam “) 속성을 참조하십시오서버리스 애플리케이션 디버깅을 위한 구성 옵션.

서버리스 애플리케이션 동기화

이 예에서는 이전 주제(서버리스 애플리케이션 만들기)에서 생성한 서버리스 애플리케이션을 AWS Toolkit for Visual Studio Code를 사용하여 AWS 에 동기화하는 방법을 보여 줍니다.

사전 조건

  • 전역적으로 고유한 Amazon S3 버킷 이름을 선택했는지 확인합니다.

  • 에서 구성한 자격 증명에 Amazon S3, AWS CloudFormation AWS Lambda, 및 Amazon Gateway 서비스에 대한 적절한 읽기/쓰기 액세스 권한이 포함되어 있는지 확인하십시오. API

  • 배포 유형이 있는 애플리케이션의 경우Image, 전역적으로 고유한 Amazon S3 버킷 이름과 URI 배포에 사용할 Amazon ECR 리포지토리가 모두 있어야 합니다.

서버리스 애플리케이션 동기화

  1. AWS Explorer 창에서 Lambda 노드의 컨텍스트 메뉴 (마우스 오른쪽 버튼 클릭) 를 열고 애플리케이션 동기화를 선택합니다. SAM

  2. AWS 리전 배포할 대상을 선택합니다.

  3. 배포에 사용할 template.yaml 파일을 선택합니다.

  4. 이 배포에서 사용할 수 있는 Amazon S3 버킷의 이름을 입력합니다. 버킷은 배포하려는 리전에 있어야 합니다.

    주의

    Amazon S3 버킷 이름은 Amazon S3의 모든 기존 버킷 이름에서 전역적으로 고유해야 합니다. 다음 예에 제공된 이름에 고유 식별자를 추가하거나 다른 이름을 선택해야 합니다.

  5. 서버리스 애플리케이션에 패키지 유형의 Image 함수가 포함된 경우 이 배포에서 사용할 수 있는 Amazon ECR 리포지토리의 이름을 입력하십시오. 이 리포지토리는 배포하려는 리전에 있어야 합니다.

  6. 배포된 스택의 이름(새 스택 이름 또는 기존 스택 이름)을 입력합니다.

  7. 콘솔AWS 도구 키트(Toolkit) 탭에서 배포의 성공을 확인합니다.

    오류가 발생하면 메시지가 오른쪽 하단에 팝업됩니다.

    이러한 경우 자세한 내용은 AWS 도구 키트(AWS Toolkit) 탭의 텍스트를 확인하세요. 다음은 오류 세부 정보의 예입니다.

    Error with child process: Unable to upload artifact HelloWorldFunction referenced by CodeUri parameter of HelloWorldFunction resource. S3 Bucket does not exist. Execute the command to create a new bucket aws s3 mb s3://pbart-my-sam-app-bucket An error occurred while deploying a SAM Application. Check the logs for more information by running the "View AWS Toolkit Logs" command from the Command Palette.

    이 예에서는 Amazon S3 버킷이 없기 때문에 오류가 발생했습니다.

배포가 완료되면 AWS 탐색기에 해당 애플리케이션이 나열됩니다. 애플리케이션의 일부로 생성된 Lambda 함수를 호출하는 방법을 알아보려면 원격 Lambda 함수 호출 섹션을 참조하세요.

AWS 툴킷 코드 렌즈 활성화

  1. 메뉴 모음에서 AWS Cloud9, 기본 설정(Preferences)을 선택합니다.

  2. 기본 설정(Preferences) 탭에서 사이드바에 있는 AWS Toolkit을 선택합니다.

  3. 코드 렌즈를 활성화하려면 코드 렌즈 활성화(Enable Code Lenses)를 선택합니다.

AWS 클라우드에서 서버리스 애플리케이션 삭제

서버리스 애플리케이션을 삭제하려면 이전에 클라우드에 배포한 AWS CloudFormation 스택을 삭제해야 합니다. AWS 이 절차는 로컬 호스트에서 애플리케이션 디렉터리를 삭제하지 않습니다.

  1. AWS 탐색기를 엽니다.

  2. AWS 탐색기 창에서 삭제하려는 배포된 애플리케이션이 포함된 리전을 확장한 다음 AWS CloudFormation을 확장합니다.

  3. 삭제하려는 서버리스 애플리케이션에 해당하는 AWS CloudFormation 스택 이름의 컨텍스트 (마우스 오른쪽 버튼 클릭) 메뉴를 엽니다. 그런 다음 [ CloudFormation 스택 삭제] 를 선택합니다.

  4. 선택한 스택을 삭제하겠다는 의사를 확인하고 [삭제(Delete)]를 선택합니다.

스택 삭제가 성공하면 AWS 툴킷이 탐색기의 AWS CloudFormation 목록에서 스택 이름을 제거합니다.AWS