AWS SAM がgithub actionsを使えるようになったので試してみた
AWS SAMがgithub actionsを利用できるようになったようなので使ってみました。
使ってみるとめちゃくちゃ良かったので、記事にしてみました。
事前準備
まず何でも良いのでsamを作成します
sam init -r python3.8 -n github-actions-with-aws-sam --app-template "hello-world"
続いて.github/workflows/sam-pipeline.ymlを追加します
※regionとs3バケットを書き換えてください
on: push: branches: - main jobs: build-deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-python@v2 - uses: aws-actions/setup-sam@v1 - uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: ##region## # sam build - run: sam build --use-container # Run Unit tests- Specify unit tests here # sam deploy - run: sam deploy --no-confirm-changeset --no-fail-on-empty-changeset --stack-name sam-hello-world --s3-bucket ##s3-bucket## --capabilities CAPABILITY_IAM --region ##region##
credentialの登録
githubのsettings > secretsで下記を登録します。
pushしてみる
上記で準備ができましたのでmainにpushしてみます
git add . git commit -m "add github actions" git push origin main
無事にactionsが完了しました。
APIGatewayが作成されていますので
実行してみるとレスポンスが返ってくることを確認できました。
curl -X GET https://xxxxxxx.execute-api.ap-northeast-1.amazonaws.com/Prod/hello {"message": "hello world"}
変更してみる
さらに、lambdaを変更し、再度pushすると、
変更が反映されていることが確認できました。
cat hello_world/app.py import json # import requests def lambda_handler(event, context): return { "statusCode": 200, "body": json.dumps({ "message": "hello world update", # "location": ip.text.replace("\n", "") }), }
curl -X GET https://xxxxxxx.execute-api.ap-northeast-1.amazonaws.com/Prod/hello {"message": "hello world update"}
テスト(pytest)を実行してみる
pytest利用する場合も試してみました。
簡単にテストを書いてみます
cat tests/unit/test_handler.py import json import pytest from hello_world import app def test_lambda_handler(): ret = app.lambda_handler("", "") assert ret["statusCode"] == 200 def test_err_lambda_handler(): ret = app.lambda_handler("", "") assert ret["statusCode"] == 400
github actionsでpytest可能なよう設定します
cat requirements.txt pytest
.github/workflows/sam-pipeline.ymlにテスト部分を追記します
# sam build - run: sam build --use-container # Run Unit tests- Specify unit tests here - run : pip install -r requirements.txt # 追記 - run: pytest -s -k test_lambda_handler # 追記 # - run: pytest -s -k test_err_lambda_handler # 追記
pytestが実行されることが確認できました
上記のコメントアウトしていた失敗する方のテストケースも流してみます。 .github/workflows/sam-pipeline.ymlを修正します
# sam build - run: sam build --use-container # Run Unit tests- Specify unit tests here - run : pip install -r requirements.txt # 追記 - run: pytest -s -k test_lambda_handler # 追記 - run: pytest -s -k test_err_lambda_handler # 追記
きちんと失敗してくれていることが確認できました
失敗した場合は、後続の処理が行われず
デプロイがされずに止まってくれます。
最後に
個人的には今後samを利用するときは、
この使い方がベースになりそうなほど良かったです。
今回試してみたのの元ネタはこちらです。
細かい箇所はこちらも併せてご参考ください。
aws.amazon.com