사쿠라 클라우드 서버를 AWS Lambda + CloudWatch Events에서 정기적으로 시작/중지

개요



사쿠라의 클라우드에 검증 등의 용도로 서버를 만들 수 있지만 매일 기동 · 정지를 수동으로 실행하는 것은 귀찮습니다.
매일 아침 시업시에 자동으로 기동해, 종업 후에 정지해 주면 좋네요.
뭔가 그런 서비스(니후쿠라라고 하면 타이머)는 있을까・・・라고 찾았습니다만, 찾을 수 없었습니다.
사쿠라의 서비스는 싸기 때문에, 정기 처리 실행용으로 VPS를 1개 가지고 두는 것이라고 해도 충분하다고 생각합니다만, 거기는 역시 서버리스로 하고 싶은 곳.
그렇다면 AWS를 사용하여 Lambda + CloudWatch Events로 구현해 봅시다! 라고 생각했습니다.
(GCP에서 Cloud Functions + Cloud Scheduler 또는 Azure에서 Azure Functions + TimerTrigger를 사용할 수 있다고 생각하지만 시도하지 않았습니다.)

스크립트



스크립트는 Python으로 만들고 싶습니다.
조사해 보면, 여기 에 saklient 라고 하는 라이브러리가 소개되고 있었습니다.
확인해 보았는데 동작했으므로, 이쪽을 이용하겠습니다.
Beta 라는 기재가 있고, 또한 몇 년 전부터 갱신이 없을 것 같기 때문에, 거기는 괴로운 곳입니까.
실행 결과는 Slack에게 Incoming Webhook에서 알리기를 원합니다.

전체 코드



Terraform에서 함께 배포할 수 있습니다.
아래에서 공개하고 있습니다.

htps : // 기주 b. 이 m / shzt / mb 다 - 사쿠라 c

사용법은 README에 기재되어 있습니다.
이번 Lambda의 환경 변수에 액세스 키등의 정보가 들어가기 때문에, 여기는 뭐라고 해도 암호화하고 싶은 곳입니다.
단지 aws_lambda_functionkms_key_arn 를 건네주더라도, environment 내의 variables 의 값은 암호화되지 않습니다.
일반적으로 배포 후 여기 에 있는 "클라이언트 측에서 환경 변수를 암호화하려면"과 같이 AWS 콘솔에 액세스하여 수동으로 "전송 중 암호화를 위해 도우미 사용"를 선택하여 "암호화"해야 합니다.
이것은 잊어 버리면 매우 위험하며 수동으로 암호화 할 때까지 누군가에게 나타날 수 있습니다.
어쨌든 배포가 완료된 시점에서 환경 변수에는 암호화된 값에 들어가고 싶다.
어려운 방법이지만, 이번에는 kms.sh※나중에 눈치채면, Secret Manager 를 사용하거나 Systems Manager 파라미터 스토어를 사용하는 방법이 있었습니다. . . Systems Manager 파라미터 스토어라면 비용 없이 할 수 있을 것 같네요.
data "external" "slack_webhook_url" {
  program = ["bash", "kms.sh"]

  query = {
    key_id    = module.kms_key.key_arn
    plaintext = var.slack_webhook_url
  }
}
#!/bin/bash

set -e

eval "$(jq -r '@sh "KEY_ID=\(.key_id) PLAINTEXT=\(.plaintext)"')"

result=$(aws kms encrypt --key-id $KEY_ID --plaintext $PLAINTEXT --query CiphertextBlob --output text)

jq -n --arg result "$result" '{"result":$result}'

이미지



매일 Slack에 다음과 같이 게시됩니다.



미래



공휴일은 제외하는 것 같은 처리를 추가할까···어떻게 할까라고 생각하고 있습니다.

마지막으로



사쿠라의 클라우드 조작을 AWS에서 할 것인가, 라고 하는 츳코미도 있을까 생각합니다만, 거기는 멀티 클라우드인 시대라고 하는 것으로 용서해 주세요.
VPS 1개분보다는, 달의 코스트는 싸게 된다고는 생각합니다(정확한 곳은 불명합니다만).
아무쪼록 좋은 사쿠라의 클라우드 라이프를!

좋은 웹페이지 즐겨찾기