AWSLambda에서 Ruby Gem을 사용하는 방법
Lambda에서 Ruby를 사용할 수있게되었습니다! ! !
Announcing Ruby Support for AWS Lambda | AWS Compute Blog
Gem을 사용하지 않는 경우 AWS Management Console에서 포치포치하여 온라인 편집기에서 람다를 생성할 수 있습니다.
그러나 Gem을 사용하는 경우 로컬에서 패키지를 만든 다음 배포해야합니다.
이쪽의 순서의 일본어로의 설명이 좀처럼 발견되지 않았기 때문에, 만들기로 했습니다.
이 기사에서 다루는 절차는 싹둑 이런 느낌입니다!
전제 조건
IAM
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "cloudformation:*",
"Resource": "*"
}
]
}
이번에는 slack-notifier이라는 Gem을 사용하여 Slack에 알림을 보내는 Lambda를 만듭니다!
mkdir example_project
cd example_project
bundle init
이 명령을 실행 한 후 Gemfile이 생성되므로 여기에 slack-notifier를 추가합시다.
Gemfile
# frozen_string_literal: true
source "https://rubygems.org"
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
gem 'slack-notifier' # この一行を追加!
Gemfile에 gem을 추가한 후
bundle install
하면 준비 완료!
$ bundle install
Fetching gem metadata from https://rubygems.org/..............
Resolving dependencies...
Using bundler 1.17.1
Using slack-notifier 2.3.2
Bundle complete! 1 Gemfile dependency, 2 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
$ bundle install --deployment
Fetching gem metadata from https://rubygems.org/..............
Using bundler 1.17.1
Fetching slack-notifier 2.3.2
Installing slack-notifier 2.3.2
Bundle complete! 1 Gemfile dependency, 2 gems now installed.
Bundled gems are installed into `./vendor/bundle`
프로젝트의 루트에 Slack에 메시지를 보내는 루비 파일을 만듭니다.
example.rb
require 'slack-notifier'
# ↓自分んおwebhook urlで置き換え
webhook_url = "https://hooks.slack.com/services/your/webhook/url"
def test(event:,context:)
notifier = Slack::Notifier.new webhook_url
notifier.ping "Hello World"
end
이번에 쓰는 코드는 이것뿐!
이 시점에서의 디렉토리 구조는 이런 느낌입니다.
$ tree -L 2 -a
.
├── .bundle
│ └── config
├── .ruby-version
├── Gemfile
├── Gemfile.lock
├── example.rb
└── vendor
└── bundle
2. sam-cli를 사용하여 배포
프로젝트의 루트에 다음 파일을 추가합시다.
template.ymlAWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: 'sample ruby application'
Resources:
ExampleFunction:
Type: AWS::Serverless::Function
Properties:
Handler: example.test
Runtime: ruby2.5
Policies:
Environment:
Outputs:
ExampleFunction:
Description: Example Lambda Function ARN
Value:
Fn::GetAtt:
- ExampleFunction
- Arn
이 템플릿 파일을 기반으로 sam-cli로 배포할 수 있습니다.
그런 다음 애플리케이션을 패키징하고 S3 Bucket에 저장합니다.
$ sam package --template-file template.yml \
--s3-bucket <S3Bucket名> \
--output-template-file packaged-template.yml
Uploading to 1a2b3c4d5e6f7gb7df26ff74638ec 32396 / 32396.0 (100.00%)
Successfully packaged artifacts and wrote output template to file packaged-template.yml.
Execute the following command to deploy the packaged template
aws cloudformation deploy --template-file /path/to/example_project/packaged-template.yml --stack-name <YOUR STACK NAME>
마지막으로 출력되는 명령은 무시하고 아래 명령으로 배포합시다!
stack-name 옵션의 내용은 적절한 이름으로 괜찮습니다.
$ sam deploy --template-file packaged-template.yml \
--stack-name example-stack-name \
--capabilities CAPABILITY_IAM
Waiting for changeset to be created..
Waiting for stack create/update to complete
Successfully created/updated stack - example-stack-name
이제 람다 함수를 만들 수있었습니다!
3. AWS Management Console에서 동작 확인
Management Console의 Lambda 페이지에 하나의 함수가 추가되어 있어야합니다.
Lambda 함수가 추가되었음을 확인할 수 있으면 함수 페이지에서 동작을 확인합시다!
테스트 버튼을 클릭하여 테스트를 만듭니다.
이벤트 이름을 입력합시다. "key1": "value1" ...
어떤 파괄호의 내용은 이번 불필요하므로 삭제해 괜찮습니다.
테스트를 실행하고 아래와 같은 화면이 되면 성공입니다!
Slack에게 메시지가 도착해야합니다.
주의점
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: 'sample ruby application'
Resources:
ExampleFunction:
Type: AWS::Serverless::Function
Properties:
Handler: example.test
Runtime: ruby2.5
Policies:
Environment:
Outputs:
ExampleFunction:
Description: Example Lambda Function ARN
Value:
Fn::GetAtt:
- ExampleFunction
- Arn
$ sam package --template-file template.yml \
--s3-bucket <S3Bucket名> \
--output-template-file packaged-template.yml
Uploading to 1a2b3c4d5e6f7gb7df26ff74638ec 32396 / 32396.0 (100.00%)
Successfully packaged artifacts and wrote output template to file packaged-template.yml.
Execute the following command to deploy the packaged template
aws cloudformation deploy --template-file /path/to/example_project/packaged-template.yml --stack-name <YOUR STACK NAME>
$ sam deploy --template-file packaged-template.yml \
--stack-name example-stack-name \
--capabilities CAPABILITY_IAM
Waiting for changeset to be created..
Waiting for stack create/update to complete
Successfully created/updated stack - example-stack-name
Management Console의 Lambda 페이지에 하나의 함수가 추가되어 있어야합니다.
Lambda 함수가 추가되었음을 확인할 수 있으면 함수 페이지에서 동작을 확인합시다!
테스트 버튼을 클릭하여 테스트를 만듭니다.
이벤트 이름을 입력합시다.
"key1": "value1" ...
어떤 파괄호의 내용은 이번 불필요하므로 삭제해 괜찮습니다.테스트를 실행하고 아래와 같은 화면이 되면 성공입니다!
Slack에게 메시지가 도착해야합니다.
주의점
Reference
이 문제에 관하여(AWSLambda에서 Ruby Gem을 사용하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/moritanzania/items/205d36c42e7f3c06a027텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)