AWS SAM을 사용해야 합니다.

10115 단어 AWSLinuxLambdatech

개시하다


제목 장난이야.미안합니다.
기술 블로그에 소개되지만, AWS SAM을 비망록으로 남길 기회가 있기 때문에
이번에는 람바다를 소재로 한 곡입니다.

AWS SAM


https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html
이것은 정부에서 제공하는 서버 없는 응용 프로그램을 구축하는 데 사용할 수 있는 오픈 소스 프레임워크이다
사용의 장점에 대한 상세한 설명은 위의 공식 문서를 참조하십시오. (왜냐하면 내가 전부 사용할 수 있는 것은 아니기 때문입니다.)
저는 개인적으로 Lambda에서 사용하는 프로그램의 테스트, 디버깅, 구축은 현지 환경에서 할 수 있는 것이 매우 편리하다고 생각합니다.

컨디션


Windows 10 Pro
Windows for Docker (20.10.6, build 370c289)
WSL2
왜 Docker야?아마 그렇게 생각할 거예요. 왜냐하면 시험 볼 때 Docker 컨테이너를 사용하거든요.
(Docker의 설치 방법은 내가 사랑을 끊는 것을 허락해 주십시오)

작업


SAM 설치


환경에 따라 설치하십시오.
https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html
WSL2 환경에 게재하려는 방법은 있지만 설치할 때와 현재 문서의 내용이 다르니 문서를 참조하십시오

아무튼 Hello World.


어떤 느낌을 잡을지 튜토리얼이 제일 좋아요.
https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-getting-started-hello-world.html
하는 일은 아래와 같다
#Step 1 - Download a sample application
sam init

#Step 2 - Build your application
cd sam-app
sam build

#Step 3 - Deploy your application
sam deploy --guided

Step 1 - Download a sample application


다음은 sam init에 대한 문서입니다.
https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-init.html
강좌에서 실행 시간이 지정되지 않았기 때문에 상기 문서가 지원하는 실행 시간을 검사하고 지정합니다
sam init --runtime go1.x
끝나고 보니 운행시간을 지정하지 않아도 어떤 운행시간을 사용하느냐는 질문이 들어오기 때문에 굳이 지정할 필요가 없다...
다음은 명령을 집행한 후의 대화 형식을 살펴보겠습니다.
Which template source would you like to use?
        1 - AWS Quick Start Templates
        2 - Custom Template Location
Choice: 1
이번엔 Hello World 때문에 손에 템플릿이 없어서 선택했어요1사용할 템플릿이 있으면 2
What package type would you like to use?
        1 - Zip (artifact is a zip uploaded to S3)
        2 - Image (artifact is an image uploaded to an ECR image repository)
Package type: 1
Lambda를 사용하기 때문에 선택했습니다1컨테이너 이미지를 사용하려면 2
Project name [sam-app]: hello-world
이해하기 쉽게 결정hello-world프로젝트에 사용할 이름 지정
Cloning app templates from https://github.com/aws/aws-sam-cli-app-templates

AWS quick start application templates:
        1 - Hello World Example
        2 - Step Functions Sample App (Stock Trader)
Template selection: 1
Hello World를 위해 12 샘플을 준비한 앱인 것 같아요.
(첫 번째 질문에서 사용한 템플릿이 Quick Start가 되었기 때문이죠)
-----------------------
Generating application:
-----------------------
Name: hello-world
Runtime: go1.x
Dependency Manager: mod
Application Template: hello-world
Output Directory: .

Next steps can be found in the README file at ./hello-world/README.md
입력 결과에 대한 정보 출력Output Directory:.로 출력되어 명령을 실행하는 디렉터리에 Project name [sam-app]:가 지정한 Hello-world 디렉터리를 만들었습니다.
(입력하지 않은 경우 기본sam-app)
이제 뭘 할 거냐면 마지막 줄에서 README를 읽고 출력해서 확인해보세요.
내용은 생략됐지만 Zip 파일의 내용과 필수 포장 등이 기재되어 있다

Step2 - Build your application


응용 프로그램을 만들어야 하는데 README에 sam build 무엇을 하는지 기록되어 있습니다
간단하게 말하면 의존 관계를 모두 다운로드하여 포장할 수 있다
cd hello-world
sam build
Building codeuri: hello-world/ runtime: go1.x metadata: {} functions: ['HelloWorldFunction']
Running GoModulesBuilder:Build

Build Succeeded

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

Commands you can use next
=========================
[*] Invoke Function: sam local invoke
[*] Deploy: sam deploy --guided
생성된 파일도 있지만 먼저 로컬에서 동작을 확인합니다
실행Invoke Function:에 적힌 sam local invoke이 동작을 실행하면 로컬에서 동작 확인(테스트 또는 디버깅)을 할 수 있습니다.
Invoking hello-world (go1.x)
Image was not found.
Building image..............

~省略~

REPORT RequestId: 32835243-d58c-4c80-be3f-785411e4350d  Init Duration: 0.21 ms  Duration: 852.08 ms     Billed Duration: 900 ms Memory Size: 128 MB     Max Memory Used: 128 MB
{"statusCode":200,"headers":null,"multiValueHeaders":null,"body":"Hello, マイIP\n"}
Docker가 여기 등장합니다.
Docker 이미지가 없어서(Image was not found.)이미지를 만들고 실행
샘플 Hello World 내용을 못 봤는데 제 IP 주소가 돌아올 것 같아요.
다시 한 번 해보면 이미 Docker의 인상이 있기 때문에 곧 결과가 나올 거라고 생각합니다.
그나저나 로컬 API 게이트웨이?시작 및 확인 가능
sam local start-api
이후 액세스 가능http://127.0.0.1:3000/함수를 실행하려면 http://127.0.0.1:3000/hello그러면 브라우저에서 내 IP 주소를 출력할 것 같다

build 시 생성된 파일 정보


오프라인이지만 생성된 파일을 더 잘 이해하기 위해 적어야 한다
build 성공 시 출력하는 것은 다음과 같습니다
Built Artifacts  : .aws-sam/build
Built Template   : .aws-sam/build/template.yaml
확인 내용
.aws-sam
├── build
│   ├── HelloWorldFunction
│   │   └── hello-world
│   └── template.yaml
└── build.toml

build/HelloWorldFunction/hello-world


Go는 build을 통해 생성된 바이너리 파일입니다
다른 건 어떨까 싶어 파이톤으로 확인해봤는데 프로그램과 필요한 포장이 있어
.aws-Som/build/Hello WorldFunction 설계 시 사용

build/template.yaml


AWS::Serverless: Function(SAM용 Type)을 만드는 CloudFormation 템플릿
디버그 후 AWS에 스택이 작성됨
AWS 리소스에서 함께 뭔가를 하려면 이 템플릿에 적는 게 좋을 거야

build.toml


구성에 사용되는 프로파일
이 파일에는 함수와runtime 등의 정보가 기록되어 있습니다
Lambda 레이어에 해당하므로 항목도 layer_build_definitions 있음
서류의 관계를 대충 알 것 같아요.

Step 3 - Deploy your application


마지막 프로그램
처음 실행할 때 --guided를 선택하여 실행하십시오
sam deploy --guided
출력은 많지만 필요한 부분만 나열
Configuring SAM deploy
======================
Looking for config file [samconfig.toml] :  Not found
디버깅에 사용되는 구성 파일입니다.
처음이 없기 때문에 Not found라고 불리지만 두 번째부터 파일이 생성되기 때문에 그 내용에 따라 디버깅을 진행합니다
Setting default arguments for 'sam deploy'
=========================================
Stack Name [sam-app]: hello-world    
AWS Region [us-east-1]: ap-northeast-1
#Shows you resources changes to be deployed and require a 'Y' to initiate deploy
Confirm changes before deploy [y/N]: y
#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]: Y
HelloWorldFunction may not have authorization defined, Is this okay? [y/N]: y
Save arguments to configuration file [Y/n]: Y
SAM configuration file [samconfig.toml]: 
SAM configuration environment [default]: 
설정 파일의 내용은 대화 형식입니다
그 중에서 특히 중요한 것은 SAM configuration environment [default]:환경 측면에서 보면 직관적으로 이해할 수 있으나 환경에 따라 구분하여 사용할 수 있다
예를 들어 stg 환경은default이고prod 환경을prod로 할 수 있다
출력을 생략했지만 아까 대화한 뒤에 다양한 출력을 출력했어요Deployment s3 bucket항목이 있어요.
CloudFormation에 사용된 템플릿의 업로드 위치
이것은 디버깅 후에 만든 파일을 수정해서 수정할 수 있다
다음 글에서 생성된 파일을 언급합니다

결과를 보러 가다


ap-northeast-1의 클라우드 포메이션을 보러 가고 싶다면 hello-world라는 이름으로 창고를 완성했습니다.
출력 태그에 생성된 리소스를 확인할 수 있으므로 Lambda임을 한눈에 알 수 있습니다.
이렇게 되면 강좌는 여기까지입니다.

삭제


왜냐하면sam cli에서 스택을 삭제하는 명령이 없는 것 같아요.
일반 aws cli로 삭제하거나 콘솔 화면에서 삭제하십시오

드시지요


처음에도 썼지만 개인적으로는 편리한 도구라고 생각해요.
람바다의 경우 사용한 프로그램 등을 Zip화한 뒤 업로드해 동작 확인을 하는 작업이 발생한다
로컬에서 실행되는 프로그램은 Lambda에서 실행할 수 없습니다...!!!이런 일이 생기면 다시 하자
이것은 엔지니어에게 있어서 일종의 압력이다
SAM은 이 문제를 해결할 수 있다
업로드도 SAM 쪽에서 진행하고 자원도 클라우드 포메이션의 창고에서 관리하기 때문에 관리도 잘 됩니다.

최후


Hello World 편은 여기까지.
튜토리얼 자체는 명령을 수행하는 것일 뿐이니 어렵지 않다
람바다를 사용하는 사람이라면 좋은 도구를 사용하는 게 좋을 것 같아!
다음에 실용적인 말을 할 수 있었으면 좋겠어요.

좋은 웹페이지 즐겨찾기