{"id":2234,"date":"2025-03-24T08:47:56","date_gmt":"2025-03-23T23:47:56","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=2234"},"modified":"2025-03-24T08:48:20","modified_gmt":"2025-03-23T23:48:20","slug":"%e3%80%90aws-sam%e5%85%a5%e9%96%80%e3%80%9115%e5%88%86%e3%81%a7%e5%88%86%e3%81%8b%e3%82%8b%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc%e3%83%ac%e3%82%b9%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=2234","title":{"rendered":"\u3010AWS SAM\u5165\u9580\u301115\u5206\u3067\u5206\u304b\u308b\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306e\u59cb\u3081\u65b9\u30fb\u57fa\u790e\u30fb\u5b9f\u8df5\u624b\u98062024"},"content":{"rendered":"\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>116<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>121<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>128<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\" data-dialog-title=\"\u76ee\u6b21\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">  <li class=\"first\">    <a href=\"#i-0\">AWS SAM\u3068\u306f\uff1f\u521d\u5fc3\u8005\u3067\u3082\u308f\u304b\u308b\u57fa\u790e\u77e5\u8b58<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">AWS SAM\u304c\u89e3\u6c7a\u3059\u308b3\u3064\u306e\u958b\u767a\u8ab2\u984c<\/a>      <\/li>      <li>        <a href=\"#i-2\">\u5f93\u6765\u306e\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u958b\u767a\u3068\u306e\u9055\u3044<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-3\">AWS SAM\u306e\u30e1\u30ea\u30c3\u30c8\u30fb\u30c7\u30e1\u30ea\u30c3\u30c8<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-4\">AWS SAM\u74b0\u5883\u69cb\u7bc9\u306e\u624b\u9806\u3068\u6ce8\u610f\u70b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-5\">\u5fc5\u8981\u306a\u30c4\u30fc\u30eb\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-6\">AWS\u8a8d\u8a3c\u60c5\u5831\u306e\u8a2d\u5b9a\u30dd\u30a4\u30f3\u30c8<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-7\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-8\">AWS SAM\u306b\u3088\u308b\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u306e\u5b9f\u8df5\u624b\u9806<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-9\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4f5c\u6210\u3068\u57fa\u672c\u69cb\u6210<\/a>      <\/li>      <li>        <a href=\"#i-10\">template.yaml\u306e\u66f8\u304d\u65b9\u3068\u91cd\u8981\u306a\u8a2d\u5b9a\u9805\u76ee<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-11\">Lambda\u95a2\u6570\u306e\u30ed\u30fc\u30ab\u30eb\u30c6\u30b9\u30c8\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-12\">\u672c\u756a\u74b0\u5883\u3078\u306e\u30c7\u30d7\u30ed\u30a4\u624b\u9806\u3068\u904b\u7528\u7ba1\u7406<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-13\">\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u69cb\u7bc9\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-14\">\u30b9\u30c6\u30fc\u30b8\u30f3\u30b0\u74b0\u5883\u306e\u4f5c\u6210\u3068\u30c6\u30b9\u30c8<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-15\">\u672c\u756a\u74b0\u5883\u3067\u306e\u76e3\u8996\u8a2d\u5b9a\u3068\u30a2\u30e9\u30fc\u30c8<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-16\">AWS SAM\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3068\u5b9f\u8df5\u7684\u306aTips<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-17\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5f37\u5316\u306e\u305f\u3081\u306e\u8a2d\u5b9a\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-18\">\u30b3\u30b9\u30c8\u6700\u9069\u5316\u306e\u305f\u3081\u306e\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u8a2d\u8a08<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-19\">\u5927\u898f\u6a21\u958b\u767a\u3067\u306e\u6ce8\u610f\u70b9\u3068\u5bfe\u7b56<\/a>      <\/li>    <\/ul>  <\/li><\/ul>\n      <a href=\"#\" class=\"sgb-toc-button js-toc-button\" rel=\"nofollow\" data-open-dialog=\"true\"><i class=\"fa fa-list\"><\/i><span class=\"sgb-toc-button__text\">\u76ee\u6b21\u3078<\/span><\/a>\n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">AWS SAM\u3068\u306f\uff1f\u521d\u5fc3\u8005\u3067\u3082\u308f\u304b\u308b\u57fa\u790e\u77e5\u8b58<\/h2>\n\n\n\n<p>AWS SAM\uff08Serverless Application Model\uff09\u306f\u3001\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u305f\u3081\u306e\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3002AWS Lambda\u3001Amazon API Gateway\u3001DynamoDB\u306a\u3069\u306e\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30ea\u30bd\u30fc\u30b9\u3092\u7c21\u5358\u306b\u5b9a\u7fa9\u3057\u3001\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">AWS SAM\u304c\u89e3\u6c7a\u3059\u308b3\u3064\u306e\u958b\u767a\u8ab2\u984c<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8907\u96d1\u306a\u8a2d\u5b9a\u306e\u7c21\u7d20\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CloudFormation\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u8a18\u8ff0\u91cf\u3092\u5927\u5e45\u306b\u524a\u6e1b<\/li>\n\n\n\n<li>\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30ea\u30bd\u30fc\u30b9\u306b\u7279\u5316\u3057\u305f\u30b7\u30f3\u30d7\u30eb\u306a\u69cb\u6587<\/li>\n\n\n\n<li>\u8a2d\u5b9a\u30df\u30b9\u306e\u30ea\u30b9\u30af\u3092\u4f4e\u6e1b<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u74b0\u5883\u306e\u7d71\u4e00<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>sam local<\/code>\u30b3\u30de\u30f3\u30c9\u306b\u3088\u308b\u30ed\u30fc\u30ab\u30eb\u30c6\u30b9\u30c8\u74b0\u5883\u306e\u63d0\u4f9b<\/li>\n\n\n\n<li>Lambda\u95a2\u6570\u306e\u30ed\u30fc\u30ab\u30eb\u5b9f\u884c\u304c\u53ef\u80fd<\/li>\n\n\n\n<li>API\u306e\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u3092\u30ed\u30fc\u30ab\u30eb\u3067\u78ba\u8a8d\u53ef\u80fd<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u306e\u52b9\u7387\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b7\u30f3\u30d7\u30eb\u306a\u30b3\u30de\u30f3\u30c9\u3067\u306e\u30c7\u30d7\u30ed\u30a4<\/li>\n\n\n\n<li>\u6bb5\u968e\u7684\u306a\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u6226\u7565\u306e\u5b9f\u73fe<\/li>\n\n\n\n<li>\u30ed\u30fc\u30eb\u30d0\u30c3\u30af\u306e\u5bb9\u6613\u3055<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">\u5f93\u6765\u306e\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u958b\u767a\u3068\u306e\u9055\u3044<\/h3>\n\n\n<div id=\"id-f1c96e11-de67-455c-a570-aeba92416b38\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u89b3\u70b9<\/th><th>\u5f93\u6765\u306e\u65b9\u6cd5<\/th><th>AWS SAM<\/th><\/tr><\/thead><tbody><tr><td>\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u8a18\u8ff0\u91cf<\/td><td>\u591a\u3044\uff08\u8a73\u7d30\u306a\u8a2d\u5b9a\u304c\u5fc5\u8981\uff09<\/td><td>\u5c11\u306a\u3044\uff08\u7c21\u7565\u5316\u3055\u308c\u305f\u69cb\u6587\uff09<\/td><\/tr><tr><td>\u30ed\u30fc\u30ab\u30eb\u30c6\u30b9\u30c8<\/td><td>\u56f0\u96e3\uff08\u5b9f\u74b0\u5883\u304c\u5fc5\u8981\uff09<\/td><td>\u5bb9\u6613\uff08\u30ed\u30fc\u30ab\u30eb\u74b0\u5883\u3067\u53ef\u80fd\uff09<\/td><\/tr><tr><td>\u30c7\u30d7\u30ed\u30a4\u624b\u9806<\/td><td>\u8907\u96d1\uff08\u8907\u6570\u306e\u30b9\u30c6\u30c3\u30d7\uff09<\/td><td>\u30b7\u30f3\u30d7\u30eb\uff08\u5358\u4e00\u30b3\u30de\u30f3\u30c9\uff09<\/td><\/tr><tr><td>\u5b66\u7fd2\u30b3\u30b9\u30c8<\/td><td>\u9ad8\u3044\uff08\u591a\u304f\u306e\u77e5\u8b58\u304c\u5fc5\u8981\uff09<\/td><td>\u4f4e\u3044\uff08\u76f4\u611f\u7684\u306a API\uff09<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"i-3\">AWS SAM\u306e\u30e1\u30ea\u30c3\u30c8\u30fb\u30c7\u30e1\u30ea\u30c3\u30c8<\/h3>\n\n\n\n<p><strong>\u30e1\u30ea\u30c3\u30c8\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u958b\u767a\u52b9\u7387\u306e\u5411\u4e0a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b7\u30f3\u30d7\u30eb\u306a\u69cb\u6587\u306b\u3088\u308b\u7d20\u65e9\u3044\u958b\u767a<\/li>\n\n\n\n<li>\u8c4a\u5bcc\u306a\u30b5\u30f3\u30d7\u30eb\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u5229\u7528<\/li>\n\n\n\n<li>\u7d71\u5408\u3055\u308c\u305f\u30c4\u30fc\u30eb\u30c1\u30a7\u30fc\u30f3\u306e\u63d0\u4f9b<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b3\u30b9\u30c8\u524a\u6e1b<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30ed\u30fc\u30ab\u30eb\u30c6\u30b9\u30c8\u306b\u3088\u308b AWS \u5229\u7528\u6599\u306e\u524a\u6e1b<\/li>\n\n\n\n<li>\u52b9\u7387\u7684\u306a\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406<\/li>\n\n\n\n<li>\u904b\u7528\u30b3\u30b9\u30c8\u306e\u6700\u9069\u5316<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u54c1\u8cea\u5411\u4e0a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6a19\u6e96\u5316\u3055\u308c\u305f\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/li>\n\n\n\n<li>\u4e00\u8cab\u6027\u306e\u3042\u308b\u958b\u767a\u74b0\u5883<\/li>\n\n\n\n<li>\u81ea\u52d5\u5316\u3055\u308c\u305f\u30c6\u30b9\u30c8\u74b0\u5883<\/li>\n<\/ul>\n\n\n\n<p><strong>\u30c7\u30e1\u30ea\u30c3\u30c8\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u67d4\u8edf\u6027\u306e\u5236\u9650<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SAM\u7279\u6709\u306e\u5236\u7d04\u304c\u5b58\u5728<\/li>\n\n\n\n<li>\u4e00\u90e8\u306e\u9ad8\u5ea6\u306a\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u304c\u56f0\u96e3<\/li>\n\n\n\n<li>\u3059\u3079\u3066\u306eAWS\u30b5\u30fc\u30d3\u30b9\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u308b\u308f\u3051\u3067\u306f\u306a\u3044<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8ffd\u52a0\u306e\u5b66\u7fd2\u30b3\u30b9\u30c8<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SAM\u7279\u6709\u306e\u6982\u5ff5\u306e\u7406\u89e3\u304c\u5fc5\u8981<\/li>\n\n\n\n<li>\u65b0\u3057\u3044\u30c4\u30fc\u30eb\u30c1\u30a7\u30fc\u30f3\u306e\u7fd2\u5f97<\/li>\n\n\n\n<li>\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u30b9\u30ad\u30eb<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d9\u30f3\u30c0\u30fc\u30ed\u30c3\u30af\u30a4\u30f3<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>AWS\u7279\u6709\u306e\u5b9f\u88c5\u3078\u306e\u4f9d\u5b58<\/li>\n\n\n\n<li>\u4ed6\u306e\u30af\u30e9\u30a6\u30c9\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u3078\u306e\u79fb\u884c\u304c\u56f0\u96e3<\/li>\n\n\n\n<li>AWS\u306e\u30b5\u30fc\u30d3\u30b9\u66f4\u65b0\u3078\u306e\u8ffd\u5f93\u304c\u5fc5\u8981<\/li>\n<\/ul>\n\n\n\n<p>AWS SAM\u306f\u3001\u7279\u306bAWS\u3067\u306e\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u3092\u59cb\u3081\u308b\u969b\u306e\u6700\u9069\u306a\u9078\u629e\u80a2\u3068\u306a\u308a\u307e\u3059\u3002\u958b\u767a\u52b9\u7387\u306e\u5411\u4e0a\u3068\u30ed\u30fc\u30ab\u30eb\u30c6\u30b9\u30c8\u74b0\u5883\u306e\u5145\u5b9f\u306b\u3088\u308a\u3001\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u30fb\u904b\u7528\u304c\u3088\u308a\u8eab\u8fd1\u306a\u3082\u306e\u3068\u306a\u308a\u307e\u3059\u3002\u305f\u3060\u3057\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8981\u4ef6\u3084\u5236\u7d04\u3092\u8003\u616e\u3057\u305f\u4e0a\u3067\u3001\u63a1\u7528\u3092\u691c\u8a0e\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-4\">AWS SAM\u74b0\u5883\u69cb\u7bc9\u306e\u624b\u9806\u3068\u6ce8\u610f\u70b9<\/h2>\n\n\n\n<p>AWS SAM\u3092\u4f7f\u7528\u3059\u308b\u305f\u3081\u306e\u74b0\u5883\u69cb\u7bc9\u306b\u3064\u3044\u3066\u3001\u5fc5\u8981\u306a\u30c4\u30fc\u30eb\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u304b\u3089\u8a8d\u8a3c\u60c5\u5831\u306e\u8a2d\u5b9a\u307e\u3067\u3001\u8a73\u3057\u304f\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">\u5fc5\u8981\u306a\u30c4\u30fc\u30eb\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u65b9\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>AWS CLI\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   # Windows\uff08PowerShell\u7ba1\u7406\u8005\u6a29\u9650\uff09\n   msiexec.exe \/i https:\/\/awscli.amazonaws.com\/AWSCLIV2.msi\n\n   # macOS\n   brew install awscli\n\n   # Linux\n   curl \"https:\/\/awscli.amazonaws.com\/awscli-exe-linux-x86_64.zip\" -o \"awscliv2.zip\"\n   unzip awscliv2.zip\n   sudo .\/aws\/install<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>AWS SAM CLI\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   # Windows\uff08PowerShell\u7ba1\u7406\u8005\u6a29\u9650\uff09\n   choco install aws-sam-cli\n\n   # macOS\n   brew tap aws\/tap\n   brew install aws-sam-cli\n\n   # Linux\n   wget https:\/\/github.com\/aws\/aws-sam-cli\/releases\/latest\/download\/aws-sam-cli-linux-x86_64.zip\n   unzip aws-sam-cli-linux-x86_64.zip -d sam-installation\n   sudo .\/sam-installation\/install<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>Docker\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.docker.com\/products\/docker-desktop\/\">Docker Desktop<\/a>\u304b\u3089\u30a4\u30f3\u30b9\u30c8\u30fc\u30e9\u30fc\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9<\/li>\n\n\n\n<li>\u30ed\u30fc\u30ab\u30eb\u3067\u306eLambda\u95a2\u6570\u5b9f\u884c\u306b\u5fc5\u8981<\/li>\n<\/ul>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u958b\u767a\u74b0\u5883\u306e\u6e96\u5099<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>VS Code\u7b49\u306e\u30c6\u30ad\u30b9\u30c8\u30a8\u30c7\u30a3\u30bf<\/li>\n\n\n\n<li>Python, Node.js\u7b49\u306e\u5b9f\u884c\u74b0\u5883\uff08\u4f7f\u7528\u3059\u308b\u8a00\u8a9e\u306b\u5fdc\u3058\u3066\uff09<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-6\">AWS\u8a8d\u8a3c\u60c5\u5831\u306e\u8a2d\u5b9a\u30dd\u30a4\u30f3\u30c8<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>IAM\u30e6\u30fc\u30b6\u30fc\u306e\u4f5c\u6210<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>AWS Management Console\u306b\u30ed\u30b0\u30a4\u30f3<\/li>\n\n\n\n<li>IAM\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u304b\u3089\u65b0\u898f\u30e6\u30fc\u30b6\u30fc\u4f5c\u6210<\/li>\n\n\n\n<li>\u5fc5\u8981\u306a\u6a29\u9650\u306e\u4ed8\u4e0e\uff1a<br><code>json { \"Version\": \"2012-10-17\", \"Statement\": [ { \"Effect\": \"Allow\", \"Action\": [ \"cloudformation:*\", \"sam:*\", \"lambda:*\", \"apigateway:*\", \"iam:*\", \"s3:*\" ], \"Resource\": \"*\" } ] }<\/code><\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8a8d\u8a3c\u60c5\u5831\u306e\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   # AWS CLI\u306e\u8a2d\u5b9a\n   aws configure\n\n   # \u4ee5\u4e0b\u306e\u60c5\u5831\u3092\u5165\u529b\n   AWS Access Key ID: [\u30a2\u30af\u30bb\u30b9\u30ad\u30fcID]\n   AWS Secret Access Key: [\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30a2\u30af\u30bb\u30b9\u30ad\u30fc]\n   Default region name: [\u30ea\u30fc\u30b8\u30e7\u30f3\u540d\uff08\u4f8b\uff1aap-northeast-1\uff09]\n   Default output format: json<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u306e\u8a2d\u5b9a\uff08\u8907\u6570\u74b0\u5883\u306e\u5834\u5408\uff09<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   # \u958b\u767a\u74b0\u5883\u7528\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\n   aws configure --profile dev\n\n   # \u672c\u756a\u74b0\u5883\u7528\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\n   aws configure --profile prod<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-7\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4e00\u822c\u7684\u306a\u30a8\u30e9\u30fc\u3068\u5bfe\u51e6\u6cd5<\/strong> \u30a8\u30e9\u30fc \u539f\u56e0 \u5bfe\u51e6\u6cd5 <code>AWS SAM CLI not found<\/code> \u30d1\u30b9\u304c\u901a\u3063\u3066\u3044\u306a\u3044 \u74b0\u5883\u5909\u6570\u306e\u8a2d\u5b9a\u3092\u78ba\u8a8d <code>Docker daemon not running<\/code> Docker\u304c\u8d77\u52d5\u3057\u3066\u3044\u306a\u3044 Docker Desktop\u306e\u8d77\u52d5 <code>Unable to locate credentials<\/code> \u8a8d\u8a3c\u60c5\u5831\u672a\u8a2d\u5b9a <code>aws configure<\/code>\u306e\u5b9f\u884c <code>Permission denied<\/code> \u6a29\u9650\u4e0d\u8db3 IAM\u30dd\u30ea\u30b7\u30fc\u306e\u78ba\u8a8d\u30fb\u4fee\u6b63<\/li>\n\n\n\n<li><strong>\u74b0\u5883\u5225\u306e\u6ce8\u610f\u70b9<\/strong> <strong>Windows:<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>PowerShell\u306e\u5b9f\u884c\u30dd\u30ea\u30b7\u30fc\u8a2d\u5b9a<\/li>\n\n\n\n<li>WSL2\u3068\u306e\u9023\u643a\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30d1\u30b9\u306e\u533a\u5207\u308a\u6587\u5b57\u306e\u9055\u3044\u306b\u6ce8\u610f <strong>macOS\/Linux:<\/strong><\/li>\n\n\n\n<li>\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\u306e\u9069\u5207\u306a\u8a2d\u5b9a<\/li>\n\n\n\n<li><code>$PATH<\/code>\u3078\u306e\u8ffd\u52a0\u78ba\u8a8d<\/li>\n\n\n\n<li>\u30b7\u30f3\u30dc\u30ea\u30c3\u30af\u30ea\u30f3\u30af\u306e\u53d6\u308a\u6271\u3044<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u52d5\u4f5c\u78ba\u8a8d\u306e\u65b9\u6cd5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   # \u30d0\u30fc\u30b8\u30e7\u30f3\u78ba\u8a8d\n   sam --version\n   aws --version\n   docker --version\n\n   # SAM\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u691c\u8a3c\n   sam validate\n\n   # \u30ed\u30fc\u30ab\u30eb\u74b0\u5883\u306e\u30c6\u30b9\u30c8\n   sam local start-api<\/pre>\n\n\n\n<p>\u74b0\u5883\u69cb\u7bc9\u6642\u306f\u3001\u7279\u306b\u8a8d\u8a3c\u60c5\u5831\u306e\u8a2d\u5b9a\u3068\u5fc5\u8981\u306a\u6a29\u9650\u306e\u4ed8\u4e0e\u306b\u6ce8\u610f\u304c\u5fc5\u8981\u3067\u3059\u3002\u307e\u305f\u3001\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u74b0\u5883\u3067\u306e\u30c6\u30b9\u30c8\u306b\u306f\u3001Docker\u304c\u6b63\u5e38\u306b\u52d5\u4f5c\u3057\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u30c8\u30e9\u30d6\u30eb\u767a\u751f\u6642\u306f\u3001\u307e\u305a\u5404\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3068\u8a2d\u5b9a\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-8\">AWS SAM\u306b\u3088\u308b\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u306e\u5b9f\u8df5\u624b\u9806<\/h2>\n\n\n\n<p>AWS SAM\u3092\u4f7f\u7528\u3057\u305f\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u74b0\u5883\u306e\u69cb\u7bc9\u304b\u3089\u3001\u5b9f\u969b\u306e\u958b\u767a\u624b\u9806\u307e\u3067\u3001\u5b9f\u8df5\u7684\u306a\u5185\u5bb9\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-9\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4f5c\u6210\u3068\u57fa\u672c\u69cb\u6210<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u65b0\u898f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4f5c\u6210<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   # \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u521d\u671f\u5316\n   sam init\n\n   # \u5bfe\u8a71\u5f0f\u306e\u8a2d\u5b9a\n   Which template source would you like to use?\n   1 - AWS Quick Start Templates\n   2 - Custom Template Location\n   Choice: 1\n\n   What package type would you like to use?\n   1 - Zip (artifact is a zip uploaded to S3)\n   2 - Image (artifact is an image uploaded to ECR)\n   Package type: 1\n\n   Which runtime would you like to use?\n   1 - nodejs18.x\n   2 - python3.9\n   3 - ruby2.7\n   Runtime: 2\n\n   Project name: my-serverless-app<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u57fa\u672c\u69cb\u9020<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   my-serverless-app\/\n   \u251c\u2500\u2500 .aws-sam\/          # \u30d3\u30eb\u30c9\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\n   \u251c\u2500\u2500 events\/            # \u30c6\u30b9\u30c8\u30a4\u30d9\u30f3\u30c8\n   \u2502   \u2514\u2500\u2500 event.json\n   \u251c\u2500\u2500 src\/              # \u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\n   \u2502   \u251c\u2500\u2500 handlers\/     # Lambda\u95a2\u6570\n   \u2502   \u2514\u2500\u2500 layers\/       # Lambda\u30ec\u30a4\u30e4\u30fc\n   \u251c\u2500\u2500 tests\/            # \u30c6\u30b9\u30c8\u30b3\u30fc\u30c9\n   \u251c\u2500\u2500 samconfig.toml    # SAM\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\n   \u2514\u2500\u2500 template.yaml     # SAM\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u958b\u767a\u74b0\u5883\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   # \u4eee\u60f3\u74b0\u5883\u306e\u4f5c\u6210\uff08Python\u4f7f\u7528\u6642\uff09\n   python -m venv .venv\n   source .venv\/bin\/activate  # Unix\u7cfb\n   .venv\\Scripts\\activate     # Windows\n\n   # \u4f9d\u5b58\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\n   pip install -r requirements.txt\n\n   # \u958b\u767a\u7528\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u8ffd\u52a0\n   pip install pytest pytest-mock boto3<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-10\">template.yaml\u306e\u66f8\u304d\u65b9\u3068\u91cd\u8981\u306a\u8a2d\u5b9a\u9805\u76ee<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u57fa\u672c\u7684\u306a\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u69cb\u9020<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   AWSTemplateFormatVersion: '2010-09-09'\n   Transform: AWS::Serverless-2016-10-31\n\n   Description: SAM\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30b5\u30f3\u30d7\u30eb\n\n   Globals:\n     Function:\n       Timeout: 30\n       MemorySize: 128\n       Runtime: python3.9\n       Environment:\n         Variables:\n           STAGE: dev\n\n   Parameters:\n     Stage:\n       Type: String\n       Default: dev\n       AllowedValues:\n         - dev\n         - stg\n         - prod\n\n   Resources:\n     HelloWorldFunction:\n       Type: AWS::Serverless::Function\n       Properties:\n         CodeUri: src\/handlers\/hello_world\/\n         Handler: app.lambda_handler\n         Events:\n           HelloApi:\n             Type: Api\n             Properties:\n               Path: \/hello\n               Method: get\n\n     # DynamoDB\u30c6\u30fc\u30d6\u30eb\u306e\u5b9a\u7fa9\u4f8b\n     UsersTable:\n       Type: AWS::Serverless::SimpleTable\n       Properties:\n         PrimaryKey:\n           Name: userId\n           Type: String\n         ProvisionedThroughput:\n           ReadCapacityUnits: 5\n           WriteCapacityUnits: 5<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u91cd\u8981\u306a\u8a2d\u5b9a\u9805\u76ee\u306e\u89e3\u8aac<\/strong> \u8a2d\u5b9a\u9805\u76ee \u8aac\u660e \u4f7f\u7528\u4f8b CodeUri \u95a2\u6570\u30b3\u30fc\u30c9\u306e\u5834\u6240 <code>CodeUri: src\/handlers\/function\/<\/code> Handler \u30a8\u30f3\u30c8\u30ea\u30fc\u30dd\u30a4\u30f3\u30c8 <code>Handler: app.lambda_handler<\/code> Events \u30c8\u30ea\u30ac\u30fc\u306e\u5b9a\u7fa9 API Gateway, SNS\u7b49\u306e\u30a4\u30d9\u30f3\u30c8\u8a2d\u5b9a Environment \u74b0\u5883\u5909\u6570 \u30b9\u30c6\u30fc\u30b8\u3001API\ud0a4\u7b49\u306e\u8a2d\u5b9a Policies IAM\u30dd\u30ea\u30b7\u30fc \u30ea\u30bd\u30fc\u30b9\u30a2\u30af\u30bb\u30b9\u6a29\u9650\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li><strong>\u5171\u901a\u8a2d\u5b9a\uff08Globals\uff09\u306e\u6d3b\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   Globals:\n     Function:\n       Timeout: 30\n       MemorySize: 128\n       Runtime: python3.9\n       Tags:\n         Environment: !Ref Stage\n       Environment:\n         Variables:\n           STAGE: !Ref Stage\n           LOG_LEVEL: INFO<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-11\">Lambda\u95a2\u6570\u306e\u30ed\u30fc\u30ab\u30eb\u30c6\u30b9\u30c8\u65b9\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ed\u30fc\u30ab\u30eb\u3067\u306e\u95a2\u6570\u547c\u3073\u51fa\u3057<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   # \u95a2\u6570\u306e\u76f4\u63a5\u547c\u3073\u51fa\u3057\n   sam local invoke HelloWorldFunction --event events\/event.json\n\n   # API\u306e\u30ed\u30fc\u30ab\u30eb\u8d77\u52d5\n   sam local start-api\n\n   # API\u306e\u30c6\u30b9\u30c8\n   curl http:\/\/localhost:3000\/hello<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30c6\u30b9\u30c8\u30a4\u30d9\u30f3\u30c8\u306e\u4f5c\u6210\uff08events\/event.json\uff09<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   {\n     \"httpMethod\": \"GET\",\n     \"path\": \"\/hello\",\n     \"queryStringParameters\": {\n       \"name\": \"SAM\"\n     },\n     \"headers\": {\n       \"Accept\": \"application\/json\"\n     }\n   }<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30c7\u30d0\u30c3\u30b0\u306e\u8a2d\u5b9a\uff08VS Code\u4f7f\u7528\u6642\uff09<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   {\n     \"version\": \"0.2.0\",\n     \"configurations\": [\n       {\n         \"type\": \"aws-sam\",\n         \"request\": \"direct-invoke\",\n         \"name\": \"Debug SAM Local\",\n         \"invokeTarget\": {\n           \"target\": \"template\",\n           \"templatePath\": \"template.yaml\",\n           \"logicalId\": \"HelloWorldFunction\"\n         },\n         \"lambda\": {\n           \"payload\": {\n             \"json\": {\n               \"httpMethod\": \"GET\",\n               \"path\": \"\/hello\"\n             }\n           }\n         }\n       }\n     ]\n   }<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>\u30e6\u30cb\u30c3\u30c8\u30c6\u30b9\u30c8\u306e\u5b9f\u88c5\u4f8b\uff08tests\/unit\/test_handler.py\uff09<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   import json\n   import pytest\n   from src.handlers.hello_world import app\n\n   def test_lambda_handler():\n       event = {\n           \"httpMethod\": \"GET\",\n           \"queryStringParameters\": {\"name\": \"SAM\"}\n       }\n\n       response = app.lambda_handler(event, None)\n\n       assert response[\"statusCode\"] == 200\n       body = json.loads(response[\"body\"])\n       assert \"message\" in body\n       assert \"Hello SAM\" in body[\"message\"]<\/pre>\n\n\n\n<p>\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u74b0\u5883\u3067\u306e\u30c6\u30b9\u30c8\u3092\u52b9\u7387\u7684\u306b\u884c\u3046\u3053\u3068\u3067\u3001\u30c7\u30d7\u30ed\u30a4\u524d\u306e\u30d0\u30b0\u3092\u65e9\u671f\u306b\u767a\u898b\u3057\u3001\u958b\u767a\u30b5\u30a4\u30af\u30eb\u3092\u77ed\u7e2e\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u7279\u306b\u3001<code>sam local<\/code>\u30b3\u30de\u30f3\u30c9\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001AWS\u74b0\u5883\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u306a\u304f\u30ed\u30fc\u30ab\u30eb\u3067\u306e\u52d5\u4f5c\u78ba\u8a8d\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-12\">\u672c\u756a\u74b0\u5883\u3078\u306e\u30c7\u30d7\u30ed\u30a4\u624b\u9806\u3068\u904b\u7528\u7ba1\u7406<\/h2>\n\n\n\n<p>AWS SAM\u3092\u4f7f\u7528\u3057\u305f\u672c\u756a\u74b0\u5883\u3078\u306e\u30c7\u30d7\u30ed\u30a4\u624b\u9806\u3068\u3001\u52b9\u679c\u7684\u306a\u904b\u7528\u7ba1\u7406\u306e\u65b9\u6cd5\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-13\">\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u69cb\u7bc9\u65b9\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>AWS CodePipeline\u3092\u4f7f\u7528\u3057\u305fCI\/CD\u69cb\u7bc9<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   # template.yaml\u5185\u306b\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u5b9a\u7fa9\u3092\u8ffd\u52a0\n   Resources:\n     Pipeline:\n       Type: AWS::CodePipeline::Pipeline\n       Properties:\n         ArtifactStore:\n           Type: S3\n           Location: !Ref ArtifactBucket\n         Stages:\n           - Name: Source\n             Actions:\n               - Name: Source\n                 ActionTypeId:\n                   Category: Source\n                   Owner: AWS\n                   Provider: CodeCommit\n                   Version: '1'\n                 Configuration:\n                   RepositoryName: !Ref RepositoryName\n                   BranchName: main\n                 OutputArtifacts:\n                   - Name: SourceCode\n           - Name: Build\n             Actions:\n               - Name: Build\n                 ActionTypeId:\n                   Category: Build\n                   Owner: AWS\n                   Provider: CodeBuild\n                   Version: '1'\n                 Configuration:\n                   ProjectName: !Ref BuildProject\n                 InputArtifacts:\n                   - Name: SourceCode\n                 OutputArtifacts:\n                   - Name: BuildOutput<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\uff08samconfig.toml\uff09<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   version = 0.1<\/pre>\n\n\n[default]\n\n\n\n[default.deploy]\n\n\n[default.deploy.parameters]\n\n\n\n<p>stack_name = \u201cmy-serverless-app\u201d s3_bucket = \u201cmy-deployment-bucket\u201d s3_prefix = \u201cmy-serverless-app\u201d region = \u201cap-northeast-1\u201d confirm_changeset = true capabilities = \u201cCAPABILITY_IAM\u201d parameter_overrides = \u201cStage=prod\u201d<\/p>\n\n\n[prod]\n\n\n\n[prod.deploy.parameters] stack_name = \u201cmy-serverless-app-prod\u201d parameter_overrides = \u201cStage=prod\u201d<\/p>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30c7\u30d7\u30ed\u30a4\u30b3\u30de\u30f3\u30c9\u306e\u5b9f\u884c<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   # \u30d3\u30eb\u30c9\n   sam build\n\n   # \u30c6\u30b9\u30c8\u74b0\u5883\u3078\u306e\u30c7\u30d7\u30ed\u30a4\n   sam deploy --config-env dev\n\n   # \u672c\u756a\u74b0\u5883\u3078\u306e\u30c7\u30d7\u30ed\u30a4\n   sam deploy --config-env prod<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-14\">\u30b9\u30c6\u30fc\u30b8\u30f3\u30b0\u74b0\u5883\u306e\u4f5c\u6210\u3068\u30c6\u30b9\u30c8<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u74b0\u5883\u5225\u306e\u8a2d\u5b9a\u7ba1\u7406<\/strong> \u74b0\u5883 \u7528\u9014 \u7279\u5fb4 dev \u958b\u767a \u6a5f\u80fd\u958b\u767a\u3001\u30e6\u30cb\u30c3\u30c8\u30c6\u30b9\u30c8 stg \u691c\u8a3c \u7d71\u5408\u30c6\u30b9\u30c8\u3001\u6027\u80fd\u30c6\u30b9\u30c8 prod \u672c\u756a \u5b9f\u904b\u7528\u74b0\u5883<\/li>\n\n\n\n<li><strong>\u74b0\u5883\u5909\u6570\u306e\u7ba1\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   # \u74b0\u5883\u5225\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u30b9\u30c8\u30a2\u306e\u4f7f\u7528\n   aws ssm put-parameter \\\n       --name \"\/myapp\/prod\/database-url\" \\\n       --value \"prod-db-url\" \\\n       --type SecureString\n\n   # template.yaml\u3067\u306e\u53c2\u7167\n   Parameters:\n     DatabaseUrl:\n       Type: AWS::SSM::Parameter::Value&lt;String&gt;\n       Default: \/myapp\/${Stage}\/database-url<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u7d71\u5408\u30c6\u30b9\u30c8\u306e\u5b9f\u65bd<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   # tests\/integration\/test_api.py\n   import requests\n   import pytest\n\n   @pytest.mark.integration\n   def test_api_endpoint():\n       base_url = \"https:\/\/api.example.com\"  # \u30b9\u30c6\u30fc\u30b8\u30f3\u30b0\u74b0\u5883\u306eURL\n       response = requests.get(f\"{base_url}\/hello\")\n       assert response.status_code == 200\n       data = response.json()\n       assert \"message\" in data<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-15\">\u672c\u756a\u74b0\u5883\u3067\u306e\u76e3\u8996\u8a2d\u5b9a\u3068\u30a2\u30e9\u30fc\u30c8<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>CloudWatch\u30e1\u30c8\u30ea\u30af\u30b9\u306e\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   Resources:\n     HelloWorldFunction:\n       Type: AWS::Serverless::Function\n       Properties:\n         Events:\n           HelloApi:\n             Type: Api\n         AutoPublishAlias: live\n         DeploymentPreference:\n           Type: Linear10PercentEvery10Minutes\n         Alarms:\n           - ErrorAlarm:\n               Type: AWS::CloudWatch::Alarm\n               Properties:\n                 AlarmDescription: Lambda function error rate &gt; 0\n                 MetricName: Errors\n                 Threshold: 0\n                 Period: 300\n                 EvaluationPeriods: 1\n                 ComparisonOperator: GreaterThanThreshold\n                 Namespace: AWS\/Lambda\n                 Statistic: Sum<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u4e3b\u8981\u306a\u76e3\u8996\u9805\u76ee<\/strong> \u30e1\u30c8\u30ea\u30af\u30b9 \u8aac\u660e \u63a8\u5968\u95be\u5024 Duration \u95a2\u6570\u5b9f\u884c\u6642\u9593 p95 &lt; 1000ms Errors \u30a8\u30e9\u30fc\u6570 0 Throttles \u30b9\u30ed\u30c3\u30c8\u30eb\u6570 0 ConcurrentExecutions \u540c\u6642\u5b9f\u884c\u6570 &lt; \u8a2d\u5b9a\u5024\u306e80% IteratorAge \u30a4\u30d9\u30f3\u30c8\u51e6\u7406\u306e\u9045\u5ef6 &lt; 1\u5206<\/li>\n\n\n\n<li><strong>\u30a2\u30e9\u30fc\u30c8\u901a\u77e5\u306e\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   Resources:\n     AlertTopic:\n       Type: AWS::SNS::Topic\n       Properties:\n         TopicName: !Sub ${AWS::StackName}-alerts\n         Subscription:\n           - Protocol: email\n             Endpoint: alert@example.com\n\n     HighErrorAlarm:\n       Type: AWS::CloudWatch::Alarm\n       Properties:\n         AlarmActions:\n           - !Ref AlertTopic\n         AlarmDescription: High error rate detected\n         MetricName: Errors\n         Namespace: AWS\/Lambda\n         Statistic: Sum\n         Period: 300\n         EvaluationPeriods: 1\n         Threshold: 1\n         ComparisonOperator: GreaterThanThreshold<\/pre>\n\n\n\n<p>\u672c\u756a\u74b0\u5883\u3078\u306e\u5c55\u958b\u306f\u614e\u91cd\u306b\u884c\u3046\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u6bb5\u968e\u7684\u306a\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u6226\u7565\u3092\u63a1\u7528\u3057\u3001\u9069\u5207\u306a\u76e3\u8996\u3068\u30a2\u30e9\u30fc\u30c8\u8a2d\u5b9a\u3092\u884c\u3046\u3053\u3068\u3067\u3001\u5b89\u5b9a\u3057\u305f\u904b\u7528\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u7279\u306b\u3001CloudWatch\u3092\u6d3b\u7528\u3057\u305f\u76e3\u8996\u4f53\u5236\u306e\u69cb\u7bc9\u306f\u3001\u554f\u984c\u306e\u65e9\u671f\u767a\u898b\u3068\u8fc5\u901f\u306a\u5bfe\u5fdc\u306b\u4e0d\u53ef\u6b20\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-16\">AWS SAM\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3068\u5b9f\u8df5\u7684\u306aTips<\/h2>\n\n\n\n<p>\u5b9f\u52d9\u3067AWS SAM\u3092\u6d3b\u7528\u3059\u308b\u969b\u306e\u91cd\u8981\u306a\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3068\u3001\u672c\u756a\u74b0\u5883\u3067\u306e\u5b9f\u8df5\u7684\u306aTips\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-17\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5f37\u5316\u306e\u305f\u3081\u306e\u8a2d\u5b9a\u65b9\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6700\u5c0f\u6a29\u9650\u306e\u539f\u5247\u306e\u9069\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   Resources:\n     MyFunction:\n       Type: AWS::Serverless::Function\n       Properties:\n         Handler: app.lambda_handler\n         Runtime: python3.9\n         Policies:\n           # \u5fc5\u8981\u6700\u5c0f\u9650\u306e\u6a29\u9650\u3092\u5b9a\u7fa9\n           - Statement:\n             - Effect: Allow\n               Action:\n                 - dynamodb:GetItem\n                 - dynamodb:PutItem\n               Resource: !GetAtt MyTable.Arn\n               Condition:\n                 StringEquals:\n                   aws:RequestedRegion: !Ref AWS::Region<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u6a5f\u5bc6\u60c5\u5831\u306e\u5b89\u5168\u306a\u7ba1\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   Resources:\n     SecureFunction:\n       Type: AWS::Serverless::Function\n       Properties:\n         Environment:\n           Variables:\n             # \u76f4\u63a5\u5024\u3092\u66f8\u304b\u305a\u3001Systems Manager\u30d1\u30e9\u30e1\u30fc\u30bf\u30b9\u30c8\u30a2\u3092\u4f7f\u7528\n             API_KEY: '{{resolve:ssm-secure:\/myapp\/api-key:1}}'\n             DB_PASSWORD: '{{resolve:secretsmanager:MyDBSecret:SecretString:password}}'<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b0\u30eb\u30fc\u30d7\u3068VPC\u306e\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   Resources:\n     VPCFunction:\n       Type: AWS::Serverless::Function\n       Properties:\n         VpcConfig:\n           SecurityGroupIds:\n             - !Ref LambdaSecurityGroup\n           SubnetIds:\n             - !Ref PrivateSubnet1\n             - !Ref PrivateSubnet2\n         Policies:\n           - VPCAccessPolicy: {}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-18\">\u30b3\u30b9\u30c8\u6700\u9069\u5316\u306e\u305f\u3081\u306e\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u8a2d\u8a08<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Lambda\u95a2\u6570\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   Globals:\n     Function:\n       # \u30e1\u30e2\u30ea\u30b5\u30a4\u30ba\u306e\u6700\u9069\u5316\n       MemorySize: 256\n       # \u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u306e\u9069\u5207\u306a\u8a2d\u5b9a\n       Timeout: 6\n       # \u74b0\u5883\u5909\u6570\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\n       Environment:\n         Variables:\n           POWERTOOLS_SERVICE_NAME: myapp\n           POWERTOOLS_METRICS_NAMESPACE: myapp\n       # \u30ec\u30a4\u30e4\u30fc\u306e\u6d3b\u7528\n       Layers:\n         - !Sub arn:aws:lambda:${AWS::Region}:017000801446:layer:AWSLambdaPowertoolsPython:19<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30ea\u30bd\u30fc\u30b9\u306e\u52b9\u7387\u7684\u306a\u5229\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   Resources:\n     # DynamoDB\u306e\u30aa\u30fc\u30c8\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u8a2d\u5b9a\n     UsersTable:\n       Type: AWS::DynamoDB::Table\n       Properties:\n         BillingMode: PAY_PER_REQUEST\n         StreamSpecification:\n           StreamViewType: NEW_AND_OLD_IMAGES\n         SSESpecification:\n           SSEEnabled: true\n\n     # S3\u306e\u30e9\u30a4\u30d5\u30b5\u30a4\u30af\u30eb\u30eb\u30fc\u30eb\u8a2d\u5b9a\n     StorageBucket:\n       Type: AWS::S3::Bucket\n       Properties:\n         LifecycleConfiguration:\n           Rules:\n             - Id: TransitionToIA\n               Status: Enabled\n               Transitions:\n                 - TransitionInDays: 30\n                   StorageClass: STANDARD_IA<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30b3\u30b9\u30c8\u76e3\u8996\u306e\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   Resources:\n     CostAlarm:\n       Type: AWS::CloudWatch::Alarm\n       Properties:\n         AlarmDescription: Daily estimated charges &gt; $10\n         Namespace: AWS\/Billing\n         MetricName: EstimatedCharges\n         Statistic: Maximum\n         Period: 21600  # 6\u6642\u9593\n         EvaluationPeriods: 1\n         Threshold: 10\n         ComparisonOperator: GreaterThanThreshold<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-19\">\u5927\u898f\u6a21\u958b\u767a\u3067\u306e\u6ce8\u610f\u70b9\u3068\u5bfe\u7b56<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e2\u30b8\u30e5\u30fc\u30eb\u5316\u3068\u30b3\u30fc\u30c9\u7ba1\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   # \u5171\u901a\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u5b9a\u7fa9\uff08parameters.yaml\uff09\n   Parameters:\n     Environment:\n       Type: String\n       Default: dev\n       AllowedValues:\n         - dev\n         - stg\n         - prod\n\n   # \u5171\u901a\u306e\u30dd\u30ea\u30b7\u30fc\u3092\u5b9a\u7fa9\uff08policies.yaml\uff09\n   Policies:\n     CommonLambdaPolicy:\n       Statement:\n         - Effect: Allow\n           Action:\n             - logs:CreateLogGroup\n             - logs:CreateLogStream\n             - logs:PutLogEvents\n           Resource: '*'\n\n   # \u30e1\u30a4\u30f3\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\uff08template.yaml\uff09\n   Transform: AWS::Serverless-2016-10-31\n   Resources:\n     ApiFunction:\n       Type: AWS::Serverless::Function\n       Properties:\n         CodeUri: .\/src\/api\n         Policies:\n           - !Include policies.yaml#CommonLambdaPolicy<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u6226\u7565<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   Resources:\n     ApiFunction:\n       Type: AWS::Serverless::Function\n       Properties:\n         AutoPublishAlias: live\n         DeploymentPreference:\n           Type: Linear10PercentEvery10Minutes\n           Hooks:\n             PreTraffic: !Ref PreTrafficHook\n             PostTraffic: !Ref PostTrafficHook\n           Alarms:\n             - !Ref FunctionErrorAlarm<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30c1\u30fc\u30e0\u958b\u767a\u306e\u305f\u3081\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/strong> \u30ab\u30c6\u30b4\u30ea \u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9 \u5b9f\u88c5\u65b9\u6cd5 \u30b3\u30fc\u30c9\u7ba1\u7406 \u30e2\u30ce\u30ec\u30dd\u69cb\u6210 src\/\u914d\u4e0b\u306b\u6a5f\u80fd\u5225\u30c7\u30a3\u30ec\u30af\u30c8\u30ea \u30c6\u30b9\u30c8 \u81ea\u52d5\u30c6\u30b9\u30c8 GitHub Actions\/CodeBuild \u30ec\u30d3\u30e5\u30fc PR\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 .github\/pull_request_template.md \u30c9\u30ad\u30e5\u30e1\u30f3\u30c8 \u81ea\u52d5\u751f\u6210 AWS SAM CLI generate-docs<\/li>\n\n\n\n<li><strong>\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u305f\u3081\u306e\u30ed\u30ae\u30f3\u30b0\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   # app.py\n   import logging\n   from aws_lambda_powertools import Logger, Tracer, Metrics\n\n   logger = Logger()\n   tracer = Tracer()\n   metrics = Metrics()\n\n   @logger.inject_lambda_context\n   @tracer.capture_lambda_handler\n   def lambda_handler(event, context):\n       try:\n           # \u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\n           logger.info(\"Processing request\", extra={\n               \"event\": event\n           })\n           metrics.add_metric(name=\"SuccessfulRequests\", unit=\"Count\", value=1)\n           return {\n               \"statusCode\": 200,\n               \"body\": \"Success\"\n           }\n       except Exception as e:\n           logger.exception(\"Error processing request\")\n           metrics.add_metric(name=\"FailedRequests\", unit=\"Count\", value=1)\n           raise<\/pre>\n\n\n\n<p>AWS SAM\u3092\u4f7f\u7528\u3057\u305f\u5927\u898f\u6a21\u958b\u767a\u3067\u306f\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3001\u30b3\u30b9\u30c8\u3001\u904b\u7528\u6027\u306e\u30d0\u30e9\u30f3\u30b9\u3092\u53d6\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002\u9069\u5207\u306a\u30e2\u30b8\u30e5\u30fc\u30eb\u5316\u3068CI\/CD\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u69cb\u7bc9\u3001\u305d\u3057\u3066\u5305\u62ec\u7684\u306a\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u4f53\u5236\u306e\u78ba\u7acb\u306b\u3088\u308a\u3001\u52b9\u7387\u7684\u306a\u958b\u767a\u3068\u904b\u7528\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Warning: Undefined array key &#8220;is_admin&#8221; in \/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/ &#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":{"0":"post-2234","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-aws","7":"nothumb"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2234","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2234"}],"version-history":[{"count":1,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2234\/revisions"}],"predecessor-version":[{"id":2235,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2234\/revisions\/2235"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2234"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2234"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2234"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}