SAM テンプレートでいろんなツールを構成しているなかで、なんかプルリク投げることが多くなってきたので、serverless-application-model と aws-sam-cli のソースコードの構成や設計、依存関係について気になったところを自分向けにメモ
ただ OSS のコードリーディングメモなので、いかなるときも GitHub リポジトリの現在の状況が正しいので、正確性は実際にリポジトリを参考に確認してください
あと自分は Python を今年の 3 月 9 日から書き始め、まだ数ヶ月しかたってないので実際 Python についてはよく知らないけどだいたい Pycharm がおしえてくれるのでそれを信じてる
requirements/base.txt
で定義されており、バージョンアップ時に bump する形samdev
はここに書いてある手順で導入可能なので、新機能をいち早く使いたければこれを用いるSAM is made up of two components: SAM translator and SAM CLI.
SAM translator is a CloudFormation transform managed by AWS. For fixes to the SAM translator (maintained in this GitHub repository), you do not need to install/upgrade any software to pick up the latest deployed changes.
SAM CLI is a client-side tool that you install on your local client. It is maintained in a separate GitHub repository, and you do have to update it to pick up new features/fixes. You can find more information on how to install SAM CLI here: (SAM Creates stage named "Stage" by default? · Issue #191 · awslabs/serverless-application-model)
logical_id_generator
が行なっている_
を含んでいるとエラーになる問題 があり、その修正 pull request が丁寧でとても参考になる_
を含んでいないステージ名のリソースに関してはこれまでと論理 ID の生成ロジックを変更しないように工夫をしている_
を含んではいけないので、それが含まれるものには samtranslator.translator.logical_id_generator
を用いてランダムな ID を生成するという形をとっている
samtranslator/model/eventsources/{pull,push}.py
に記述されている
Lambda::Permission
リソースを作成する基底クラスを継承しているLambda::EventSourceMapping
リソースを作成し、関数のロールに各イベントソースからデータを取得するためのポリシーを追加してあげるような基底クラスを継承している--parameter-overrides
でパラメタ指定sam deploy --template-file packaged.yaml --stack-name $StackName --capabilities CAPABILITY_NAMED_IAM --profile $AWSProfile \ --parameter-overrides \ "Param1=Value1"
sam logs - AWS Serverless Application Model 参照
sam logs [-n FUNCTION_NAME] [--stack-name STACK_NAME]
ローカルの sam transformer を使ってテンプレートを変換するときの手順(開発ガイドに載ってる)
aws cloudformation package --template-file MY_TEMPLATE_PATH --output-template-file output-template.yaml --s3-bucket MY_S3_BUCKET bin/sam-translate.py --template-file=output-template.yaml aws cloudformation deploy --template-file cfn-template.json --capabilities CAPABILITY_NAMED_IAM --stack-name MY_STACK_NAME
issue: Can not use Fn::if within CustomStatements: · Issue #1218 · awslabs/serverless-application-model
組み込み関数の一覧はドキュメントに書いてある: 組み込み関数リファレンス
内容的には If だけ対応すればよさそう?(確認する)
pull request: feat: Add an existing SQS queue option to SNS event by 53ningen · Pull Request #1231 · awslabs/serverless-application-model
pull request: fix: failed tests by 53ningen · Pull Request #1234 · awslabs/serverless-application-model
pull request: chore(docs): fix a cognito event source example by 53ningen · Pull Request #1233 · awslabs/serverless-application-model
根本的に ARN とリソースの指定間違ってたっぽいので直した 変更内容はいつもの... って感じだ
pull request: chore: typo in swagger.py by 53ningen · Pull Request #1220 · awslabs/serverless-application-model
pull request: feat: Add SQS option to SNS event by 53ningen · Pull Request #1065 · awslabs/serverless-application-model
push.py
内で pull.py
を import する必要があったdocs/internal
を更新する必要がある旨を指摘してもらったところで issue には SqsSubscription に object を突っ込めるようになっており、既存のキューなどを指定できるようになっている。この場合 SQS のポリシーで QueueUrl と QueueARN が必要なのだが、このあたりをどうすべきか悩んでしまったので一旦 boolean で受け付ける機能を pull request して、その後 issue で議論しようという方針に決めた(そのほうが差分が小さくなるし、大多数のひとは中間のキューを管理したくはないハズ)。
pull request: fix: make sure ApplicationId is not null by 53ningen · Pull Request #1062 · awslabs/serverless-application-model
serverless_app_plugin.py
は raise した例外の扱いが一般的なリソースと違うっぽい?
pull request: fix: Use explicit memory settings for Java cookie cutters by 53ningen · Pull Request #1340 · awslabs/aws-sam-cli
samcli/local/init/templates/
に各種テンプレがありますsamtranslator/model/eventsources/
にあるpush.py
に定義されているsamtranslator/policy_templates_data/policy_templates.json
が変換の定義を行う JSON ファイルpull reuqest: nits: docstring of PushEventReource classes may be incorrect · Issue #1017 · awslabs/serverless-application-model
ウェブ界隈でエンジニアとして労働活動に励んでいる @gomi_ningen 個人のブログです