Ruby와 serverless로 Slack에 주기적으로 게시하는 Lambda 함수 작성
5370 단어 슬랙루비serverless
serverless framework
를 사용하여 하루에 한 번 실행하는 Slack에 대한 게시물을 Lambda 위에 최근 공식 지원된 루비로 씁니다.아래 준비
Slack app을 만들어 적절한 채널에 integrate하여 webhook url을 얻으십시오. 그리고 serverless와 ruby의 설치도 잊지 마세요.
만들기
serverless create --template aws-ruby --path lottery
그러면 다음과 같은 구조의 디렉토리가 생깁니다.lottery > tree
.
├── handler.rb
└── serverless.yml
0 directories, 2 files
생성된
handler.rb
의 hello
메서드를 변경합니다.require 'json'
require 'slack-notifier'
def hello(event:, context:)
notifier = Slack::Notifier.new 'https://hooks.slack.com/services/xxxxxxxxxxxx' do
defaults channel: '#general',
link_names: 1
end
notifier.post text: '一日一善'
end
그런 다음 serverless.yaml에 정기적으로 실행할 작업을 추가합니다.
functions:
hello:
handler: handler.hello
events:
- schedule: cron(00 00 * * *)
위의 설정은 매일 0시 0분에 정기 실행되도록 되어 있습니다. 시간 설정은 crontab과 같은 기법을 사용할 수 있습니다. (참고: tutorial-scheduled-events-schedule-expressions )
이것이 끝나면
serverless deploy
그렇게하면 나머지는 매일 Slack에 게시됩니다.주의사항
serverless 관리하에 gem 설치
bundle install --path vendor/bundle
에서 serverless 관리하에 gem을 설치하거나 Lambda Layer를 사용하십시오.Init error when loading handler handler.lottery
{
"errorMessage": "cannot load such file -- slack/post",
"errorType": "Init<LoadError>",
"stackTrace": [
"/var/lang/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'",
"/var/lang/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'",
"/var/task/handler.rb:2:in `<top (required)>'",
"/var/lang/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'",
"/var/lang/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'"
]
}
루비 버전 맞추기
Lambda에서 지원하는 Ruby 런타임은 버전 2.5.0이므로 로컬에서도 2.5 계를 넣자.
// 上と同じエラーです
Init error when loading handler handler.lottery
{
"errorMessage": "cannot load such file -- slack/post",
"errorType": "Init<LoadError>",
"stackTrace": [
"/var/lang/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'",
"/var/lang/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'",
"/var/task/handler.rb:2:in `<top (required)>'",
"/var/lang/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'",
"/var/lang/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'"
]
}
schedule의 rate는 시간의 단수/복수에 주의
serverless.yml의 schedule에는
rate
를 사용할 수도 있습니다. events:
- schedule: rate(1 minute)
여기서 주의해야 할 것은 시간이 단수인가 복수인가 어떤가라고 하는 곳으로, 예를 들면
1 minutes
라고 하면(자) 에러가 나옵니다. 마찬가지로 10 minute
하지만 오류가 발생합니다. 1 minutes는 조금 용서해 주었으면 하는 마음이 있습니다만. Serverless Error ---------------------------------------
An error occurred: HelloEventsRuleSchedule1 - Parameter ScheduleExpression is not valid. (Service: AmazonCloudWatchEvents; Status Code: 400; Error Code: ValidationException; Request ID: 329bfa3f-f7c9-11e8-9332-xxxxxxxx).
Reference
이 문제에 관하여(Ruby와 serverless로 Slack에 주기적으로 게시하는 Lambda 함수 작성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/asmsuechan/items/38a7bbbb041d2931c722텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)