Chapter 04

Chalice(CDK)を使い始める前に事前に行う設定

inunekousapion
inunekousapion
2022.07.19に更新

ChaliceとCDKを組み合わせた場合、chaliceの設定がややこしいです。

公式ではstageの下にlambda_functionsを定義していますが、Chalice CDKではstagesと同階層にlambda_functionsを定義します。
stagesの下に定義しても有効になりませんでした。

.chalice/config.jsonの編集

  • runtime/.chalice/config.json
{
  "version": "2.0",
  "app_name": "myapp",
  "lambda_functions": {
    "target_lambda_function": {
      "lambda_timeout": 300
    }
  },
  "stages": {
    "dev": {
      "api_gateway_stage": "api",
      "environment_variables": {
        "FOO": "BAR"
      }
    }
  }
}

chaliceの設定をCDKで読み込むようにする

chaliceapp.pyでは、stage_configとしてruntime/.chalice/config.jsonと別の定義を要求されます。設定が分散して不具合やオペレーションミスに繋がるため、runtime/.chalice/config.jsonに一本化するのをおすすめします。

  • infrastructure/stacks/chaliceapp.py
import os
import json

import aws_cdk as cdk

from chalice.cdk import Chalice


RUNTIME_SOURCE_DIR = os.path.abspath(os.path.join(
    os.path.dirname(os.path.dirname(__file__)), os.pardir, "runtime"
))
config_file = os.path.join(RUNTIME_SOURCE_DIR, '.chalice', 'config.json')
with open(config_file, 'r') as fi:
    stage_config = json.loads(fi.read())

class ChaliceApp(cdk.Stack):
    def __init__(self, scope, id, **kwargs):
        super().__init__(scope, id, **kwargs)
	self.chalice = Chalice(
	    self,
	    "ChaliceApp",
	    source_dir=RUNTIME_SOURCE_DIR,
	    stage_config=stage_config["stages"][os.environment["STAGE"]],
	)