furikake を AWS Lambda で実行出来るようにしました.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
docker
src
.gitignore
Makefile
README.md
docker-compose.yml
event.sample.json
write-template-yaml.rb

README.md

furikake-serverless

これなに

  • furikake を AWS Lambda で動かす為の諸々です

必要なもの (準備しておくもの)

direnv も利用出来るようにしておくとより良いと思います.

セットアップ

sam で利用する S3 バケットを作成する

aws s3 mb s3://your-sam-s3-bucket

git clone

git clone https://github.com/inokappa/furikake-serverless.git

event.json の修正

event.sample.json を修正して event.json を作成します.

{
  "resources": {
    "aws": [
      "alb",
      "clb",
      "directory_service",
      "ec2",
      "elasticsearch_service",
      "kinesis",
      "lambda",
      "rds",
      "security_group",
      "vpc",
      "vpc_endpoint"
    ]
  },
  "backlog": {
    "projects": [
      {
        "space_id": "example",
        "top_level_domain": "jp",
        "wiki_id": "1234567",
        "wiki_name": "Lambda 送信テスト",
        "header": "# Test Header\n[toc]\n## Sub Header\n",
        "footer": "## Test Footer\n### Sub Footer"
      }
    ]
  }
}

resources.aws 以下のリソース名を必要に応じて, space_id 等を環境に応じて修正します. これは furikake の .furikake.yml と同じ内容になっていて, 単に YAML か JSON の違いです.

sam の template.yml の生成

KMS を利用して Backlog の API キーを暗号化しますので, make template を実行して template.yaml を生成します.

$ make template

以下のように出力されるので, KMS の Key ID を API キー, 実行間隔 (任意なので, 何も指定しない場合には Enter を押下), タイムゾーン (任意なので, 何も指定しない場合には Enter を押下) を入力します.

$ make template
KMS の Key ID を入力してください:
xxxxxxxx-xxx-xxxx-xxxx-xxxxxxxx
API キーを入力してください:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
実行間隔を分で入力してください (デフォルト 60 分):

タイムゾーンを入力してください (デフォルト Asia/Tokyo):

template.yaml created.

上記のように出力されると, 正常に template.yaml が生成されていると思います. 念の為, template.yaml の中身を確認してみます.

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: 'furikake-serverless'

Resources:
  FurikakeServerless:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: ./src
      Handler: lambda.run
      Runtime: ruby2.5
      Timeout: 900
      Policies:
        - ReadOnlyAccess
        - KMSDecryptPolicy:
            KeyId: xxxxxxxx-xxx-xxxx-xxxx-xxxxxxxx
      Environment:
        Variables:
          ENCRYPTED_BACKLOG_API_KEY: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      Events:
        FurikakeSchedule:
          Type: Schedule
          Properties:
            Schedule: rate(60 minutes)
            Input: '{
  "resources": {
    "aws": [
      "alb",
...

Outputs:
  FurikakeServerless:
    Description: Serverless Furikake Lambda Function ARN.
    Value:
      Fn::GetAtt:
      - FurikakeServerless
      - Arn

CloudWatch Events で 60 分毎に Lambda 関数が起動するように設定されています.

...
      Events:
        FurikakeSchedule:
          Type: Schedule
          Properties:
            Schedule: rate(60 minutes)
...

Schedule: の値を修正することで任意の時間で Lambda 関数が起動するようにカスタマイズが可能です.

デプロイ

make packagemake deploy を実行して, Lambda 関数をデプロイします.

# packaged-template.yaml を生成して, 各種ファイルを S3 にアップロードする
make package _BUCKET_NAME=your-sam-s3-bucket

make package を実行した後, packaged-template.yaml が生成されていることを確認します.

# Lambda 関数をデプロイ
make deploy

以下のように出力されることを確認します.

$ make deploy

Waiting for changeset to be created..
Waiting for stack create/update to complete
Successfully created/updated stack - FurikakeServerless

デプロイが完了したらしばらく待ちましょう...デフォルトで 1 時間後.

しばらく放置しておくと

下図のように, 定期的に wiki が更新されていることを確認することが出来ると思います.

いい感じです.

todo

  • 色々