{"id":5305,"date":"2025-09-12T16:55:24","date_gmt":"2025-09-12T16:55:24","guid":{"rendered":"https:\/\/pokecon.jp\/job\/?p=5305"},"modified":"2025-09-12T16:55:24","modified_gmt":"2025-09-12T16:55:24","slug":"tfaction-%e3%82%92%e6%ae%b5%e9%9a%8e%e7%9a%84%e3%81%ab%e5%b0%8e%e5%85%a5%e3%81%97%e3%81%9f","status":"publish","type":"post","link":"https:\/\/pokecon.jp\/job\/5305\/","title":{"rendered":"tfaction \u3092\u6bb5\u968e\u7684\u306b\u5c0e\u5165\u3057\u305f"},"content":{"rendered":"\n<\/p>\n<div>\n<p data-line=\"0\" class=\"code-line\">\u3053\u3093\u306b\u3061\u306f\u3001tsub \u3067\u3059\u30022023 \u5e74 11 \u6708\u304b\u3089\u80b2\u4f11\u3092\u53d6\u5f97\u3057\u3066\u3044\u3066\u4eca\u5e74\u306e 5 \u6708\u306b\u5fa9\u8077\u3057\u307e\u3057\u305f\u3002\u4eca\u56de\u304c Social PLUS Tech Blog \u3078\u306e\u521d\u6295\u7a3f\u3068\u306a\u308a\u307e\u3059 \ud83d\ude04<\/p>\n<p data-line=\"2\" class=\"code-line\">\u3053\u306e\u6570\u30f6\u6708\u9593\u3001\u5f90\u3005\u306b <a target=\"_blank\" href=\"https:\/\/suzuki-shunsuke.github.io\/tfaction\/docs\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">tfaction<\/a> \u306e\u5c0e\u5165\u3092\u9032\u3081\u3066\u3044\u307e\u3057\u305f\u3002\u5143\u3005 Terraform \u306e CI\/CD \u306f GitHub Actions \u3067\u81ea\u524d\u306e\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u3092\u7d44\u3093\u3067\u3044\u307e\u3057\u305f\u304c\u3001\u901a\u5e38\u306e\u958b\u767a\u30bf\u30b9\u30af\u3092\u512a\u5148\u3057\u3064\u3064\u9699\u9593\u6642\u9593\u3067 CI\/CD \u306e\u6539\u5584\u3092\u884c\u3063\u3066\u3044\u305f\u305f\u3081\u3001\u6bb5\u968e\u7684\u306b\u79fb\u884c\u3059\u308b\u5f62\u3068\u306a\u308a\u307e\u3057\u305f\u3002<\/p>\n<p data-line=\"4\" class=\"code-line\">\u3053\u306e\u8a18\u4e8b\u3067\u306f tfaction \u3092\u5c0e\u5165\u3057\u305f\u80cc\u666f\u3084\u3001\u3069\u306e\u3088\u3046\u306b\u5c0e\u5165\u3092\u9032\u3081\u3066\u3044\u3063\u305f\u304b\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u305f\u3044\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n<h2 id=\"tfaction-%E3%81%A8%E3%81%AF\" data-line=\"6\" class=\"code-line\">\n tfaction \u3068\u306f<\/h2>\n<p data-line=\"8\" class=\"code-line\">tfaction \u3068\u306f\u3001\u7c21\u5358\u306b\u8aac\u660e\u3059\u308b\u3068 Terraform (\u3042\u308b\u3044\u306f Terragrunt, OpenTofu) \u5411\u3051\u306e GitHub Actions \u30d9\u30fc\u30b9\u306e CI\/CD \u30c4\u30fc\u30eb\u3067\u3059\u3002<\/p>\n<p data-line=\"10\" class=\"code-line\"><span class=\"embed-block zenn-embedded zenn-embedded-card\"><iframe id=\"zenn-embedded__41d593830612a\" src=\"https:\/\/embed.zenn.studio\/card#zenn-embedded__41d593830612a\" data-content=\"https%3A%2F%2Fsuzuki-shunsuke.github.io%2Ftfaction%2Fdocs%2F\" frameborder=\"0\" scrolling=\"no\" loading=\"lazy\"><\/iframe><\/span><a target=\"_blank\" href=\"https:\/\/suzuki-shunsuke.github.io\/tfaction\/docs\/\" style=\"display:none\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/suzuki-shunsuke.github.io\/tfaction\/docs\/<\/a><\/p>\n<p data-line=\"12\" class=\"code-line\">\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3067\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u8aac\u660e\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<blockquote data-line=\"14\" class=\"code-line\">\n<p data-line=\"14\" class=\"code-line\">tfaction is a framework for a Monorepo to build high-level Terraform workflows using GitHub Actions. You don&#8217;t have to run terraform apply in your laptop, and don&#8217;t have to reinvent the wheel for Terraform Workflows anymore.<\/p>\n<\/blockquote>\n<p data-line=\"16\" class=\"code-line\">\u4fbf\u5b9c\u7684\u306b CI\/CD \u30c4\u30fc\u30eb\u3068\u66f8\u304d\u307e\u3057\u305f\u304c\u3001\u5b9f\u969b\u306b\u306f GitHub Actions \u306e\u30ab\u30b9\u30bf\u30e0\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u96c6\u5408\u4f53\u3067\u3001terraform plan \u3084 terraform apply \u3092\u5b9f\u884c\u3059\u308b\u30ab\u30b9\u30bf\u30e0\u30a2\u30af\u30b7\u30e7\u30f3\u306f\u52ff\u8ad6\u3001terraform validate \u3084 tflint \u306a\u3069\u3092\u5b9f\u884c\u3059\u308b\u30ab\u30b9\u30bf\u30e0\u30a2\u30af\u30b7\u30e7\u30f3\u306a\u3069\u3001Terraform \u306e\u958b\u767a\u30d5\u30ed\u30fc\u3067\u4fbf\u5229\u306a CI\/CD \u306e\u305f\u3081\u306e\u6a5f\u80fd\u3092\u591a\u304f\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<h2 id=\"%E3%81%AA%E3%81%9C-tfaction-%E3%82%92%E5%B0%8E%E5%85%A5%E3%81%97%E3%81%9F%E3%81%AE%E3%81%8B\" data-line=\"18\" class=\"code-line\">\n \u306a\u305c tfaction \u3092\u5c0e\u5165\u3057\u305f\u306e\u304b<\/h2>\n<p data-line=\"20\" class=\"code-line\">\u5f0a\u793e\u3067\u306f\u7d20\u306e Terraform \u3067\u306f\u306a\u304f Terragrunt \u3092\u4ecb\u3057\u3066\u4f7f\u3063\u3066\u3044\u308b\u306e\u3067\u3059\u304c\u3001\u3053\u308c\u307e\u3067 <a target=\"_blank\" href=\"https:\/\/github.com\/gruntwork-io\/terragrunt-action\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">gruntwork-io\/terragrunt-action<\/a> \u3092\u4f7f\u3044\u3064\u3064\u3001\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306e\u5927\u534a\u3092\u81ea\u524d\u5b9f\u88c5\u3057\u3066\u3044\u307e\u3057\u305f\u3002<\/p>\n<p data-line=\"22\" class=\"code-line\">\u81ea\u524d\u5b9f\u88c5\u3067 1 \u3064\u8ab2\u984c\u3068\u306a\u3063\u3066\u3044\u305f\u306e\u304c\u3001\u30ed\u30fc\u30ab\u30eb\u30e2\u30b8\u30e5\u30fc\u30eb\u5909\u66f4\u6642\u306b\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u547c\u3073\u51fa\u3057\u5143\u306e plan \u3092\u5b9f\u884c\u3059\u308b\u3088\u3046\u306a\u4ed5\u7d44\u307f\u304c\u5b9f\u73fe\u3067\u304d\u3066\u3044\u307e\u305b\u3093\u3067\u3057\u305f\u3002<\/p>\n<p data-line=\"24\" class=\"code-line\">\u30ed\u30fc\u30ab\u30eb\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u307f\u3092\u5909\u66f4\u3059\u308b\u6a5f\u4f1a\u306f\u5272\u3068\u3042\u308b\u305f\u3081\u3001CI \u3067 plan\/apply \u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306b\u3001\u547c\u3073\u51fa\u3057\u5143\u306e\u65b9\u3067\u4e0d\u8981\u306a\u5909\u66f4\u3092\u5165\u308c\u308b\u306a\u3069\u306e\u904b\u7528\u3067\u30ab\u30d0\u30fc\u3057\u3066\u3044\u308b\u72b6\u614b\u3067\u3057\u305f\u304c\u3001\u3055\u3059\u304c\u306b\u3053\u306e\u904b\u7528\u3092\u9577\u304f\u7d9a\u3051\u308b\u306e\u306f\u5927\u5909\u3067\u3057\u305f\u3002<\/p>\n<p data-line=\"26\" class=\"code-line\">\u5f53\u6642\u3001\u30ed\u30fc\u30ab\u30eb\u30e2\u30b8\u30e5\u30fc\u30eb\u5909\u66f4\u3092\u691c\u77e5\u3057\u3066 plan\/apply \u3092\u5b9f\u884c\u3059\u308b\u65b9\u6cd5\u3092\u8abf\u3079\u3066\u3044\u305f\u3068\u3053\u308d\u3001tfaction \u304c\u63d0\u4f9b\u3057\u3066\u3044\u308b <a target=\"_blank\" href=\"https:\/\/github.com\/suzuki-shunsuke\/tfaction\/blob\/v1.16.1\/list-targets\/action.yaml\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">list-targets<\/a> Action \u3092\u4f7f\u3046\u3053\u3068\u3067\u89e3\u6c7a\u3067\u304d\u305d\u3046\u306a\u3053\u3068\u304c\u5206\u304b\u3063\u305f\u305f\u3081\u3001\u90e8\u5206\u7684\u306b list-targets Action \u3092\u5c0e\u5165\u3057\u307e\u3057\u305f\u3002<\/p>\n<p data-line=\"28\" class=\"code-line\"><span class=\"embed-block zenn-embedded zenn-embedded-card\"><iframe id=\"zenn-embedded__f7144ce4f6f1e\" src=\"https:\/\/embed.zenn.studio\/card#zenn-embedded__f7144ce4f6f1e\" data-content=\"https%3A%2F%2Fsuzuki-shunsuke.github.io%2Ftfaction%2Fdocs%2Ffeature%2Flocal-path-module\" frameborder=\"0\" scrolling=\"no\" loading=\"lazy\"><\/iframe><\/span><a target=\"_blank\" href=\"https:\/\/suzuki-shunsuke.github.io\/tfaction\/docs\/feature\/local-path-module\" style=\"display:none\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/suzuki-shunsuke.github.io\/tfaction\/docs\/feature\/local-path-module<\/a><\/p>\n<p data-line=\"30\" class=\"code-line\">\u3053\u3053\u3067 tfaction \u306e\u5229\u70b9\u306b\u6c17\u304c\u3064\u304d\u307e\u3057\u305f\u304c\u3001tfaction \u306f\u30ab\u30b9\u30bf\u30e0\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u96c6\u5408\u4f53\u3067\u3042\u308b\u305f\u3081\u3001\u5fc5\u8981\u306a\u6a5f\u80fd\u306e\u307f\u3092\u6bb5\u968e\u7684\u306b\u5c0e\u5165\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p data-line=\"32\" class=\"code-line\">\u307e\u305f\u3001tfaction \u306f PR \u3092\u30de\u30fc\u30b8\u3057\u305f\u3089 apply \u3059\u308b\u3068\u3044\u3046\u30d5\u30ed\u30fc\u3067\u8a2d\u8a08\u3055\u308c\u3066\u304a\u308a\u3001\u6211\u3005\u306e\u81ea\u524d\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3082\u540c\u69d8\u306e\u30d5\u30ed\u30fc\u3067\u8a2d\u8a08\u3057\u3066\u3044\u305f\u305f\u3081\u3001\u305d\u306e\u70b9\u3067\u3082\u89aa\u548c\u6027\u304c\u9ad8\u304f\u3001\u5168\u4f53\u7684\u306b tfaction \u3092\u5c0e\u5165\u3057\u3066\u3044\u3053\u3046\u3068\u3044\u3046\u65b9\u91dd\u3068\u306a\u308a\u307e\u3057\u305f\u3002<\/p>\n<p data-line=\"34\" class=\"code-line\">\u3053\u3053\u3067\u3001list-targets Action \u4ee5\u5916\u306e\u90e8\u5206\u306f\u81ea\u524d\u5b9f\u88c5\u306e\u307e\u307e\u3067\u3082\u554f\u984c\u306a\u304b\u3063\u305f\u306e\u3067\u3059\u304c\u3001\u30ed\u30fc\u30ab\u30eb\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u5909\u66f4\u691c\u77e5\u4ee5\u5916\u306b\u3082\u3044\u304f\u3064\u304b\u8ab2\u984c\u611f\u304c\u3042\u3063\u305f\u305f\u3081\u3001Terraform \u306e CI\/CD \u3092\u5168\u4f53\u7684\u306b\u6539\u5584\u3057\u3066\u3044\u304f\u305f\u3081\u306b tfaction \u306e\u5c0e\u5165\u3092\u9032\u3081\u3066\u3044\u304f\u3053\u3068\u3092\u6c7a\u3081\u307e\u3057\u305f\u3002<\/p>\n<h2 id=\"%E6%AE%B5%E9%9A%8E%E7%9A%84%E3%81%AA%E5%B0%8E%E5%85%A5%E3%81%AE%E9%80%B2%E3%82%81%E6%96%B9\" data-line=\"36\" class=\"code-line\">\n \u6bb5\u968e\u7684\u306a\u5c0e\u5165\u306e\u9032\u3081\u65b9<\/h2>\n<p data-line=\"38\" class=\"code-line\">\u4ee5\u4e0b\u3067\u8aac\u660e\u3059\u308b\u5404\u30b9\u30c6\u30c3\u30d7\u306f\u305d\u308c\u305e\u308c master \u306b\u30de\u30fc\u30b8\u3057\u305f\u5909\u66f4\u3067\u3001\u5358\u4f53\u3067\u52d5\u4f5c\u3059\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<p data-line=\"40\" class=\"code-line\">\u6bb5\u968e\u7684\u306a\u5c0e\u5165\u3068\u3044\u3046\u3053\u3068\u306a\u306e\u3067\u3001\u305d\u308c\u305e\u308c\u306e\u30b9\u30c6\u30c3\u30d7\u9593\u3067\u671f\u9593\u304c\u958b\u3044\u3066\u3044\u308b\u3082\u306e\u3082\u3042\u308a\u307e\u3059\u3057\u3001\u305d\u306e\u9593\u3082\u901a\u5e38\u306e\u30a4\u30f3\u30d5\u30e9\u306e\u958b\u767a\u30bf\u30b9\u30af\u306f\u7d99\u7d9a\u3057\u3066\u3044\u308b\u305f\u3081\u3001\u5358\u4f53\u3067\u5b9f\u884c\u53ef\u80fd\u306a\u72b6\u614b\u3092\u7dad\u6301\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p data-line=\"42\" class=\"code-line\">\u306a\u304a\u3001\u672c\u8a18\u4e8b\u3067\u306f\u5c0e\u5165\u5f53\u6642\u306e tfaction <a target=\"_blank\" href=\"https:\/\/github.com\/suzuki-shunsuke\/tfaction\/releases\/tag\/v1.16.1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">v1.16.1<\/a> \u3092\u524d\u63d0\u3068\u3057\u3066\u3044\u307e\u3059\u3002\u8a18\u4e8b\u57f7\u7b46\u6642\u70b9\u3067 v1.19.2 \u304c\u6700\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u3059\u3002<\/p>\n<p data-line=\"44\" class=\"code-line\">\u307e\u305f\u3001tfaction \u3068\u306f\u95a2\u4fc2\u306a\u3044\u3067\u3059\u304c\u3001\u672c\u8a18\u4e8b\u3067\u7d39\u4ecb\u3057\u3066\u3044\u308b\u30b3\u30fc\u30c9\u3067\u306f\u30ab\u30b9\u30bf\u30e0\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u547c\u3073\u51fa\u3057\u306b\u30b3\u30df\u30c3\u30c8\u30cf\u30c3\u30b7\u30e5\u3092\u4f7f\u308f\u305a\u306b\u30bf\u30b0\u3067\u6307\u5b9a\u3057\u3066\u3044\u308b\u305f\u3081\u3001\u5b89\u5168\u306b\u5229\u7528\u3059\u308b\u305f\u3081\u306b\u30b3\u30df\u30c3\u30c8\u30cf\u30c3\u30b7\u30e5\u3078\u306e\u7f6e\u304d\u63db\u3048\u3082\u884c\u3046\u3053\u3068\u3092\u63a8\u5968\u3057\u307e\u3059 \ud83d\ude4f (<a target=\"_blank\" href=\"https:\/\/zenn.dev\/shunsuke_suzuki\/articles\/pinact-pin-github-actions-version\" target=\"_blank\">\u53c2\u8003<\/a>)<\/p>\n<h3 id=\"0.-tfaction-%E5%B0%8E%E5%85%A5%E5%89%8D%E3%81%AE%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%95%E3%83%AD%E3%83%BC\" data-line=\"46\" class=\"code-line\">\n 0. tfaction \u5c0e\u5165\u524d\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc<\/h3>\n<p data-line=\"48\" class=\"code-line\">\u307e\u305a\u524d\u63d0\u3068\u3057\u3066\u5f0a\u793e\u306e\u30a4\u30f3\u30d5\u30e9\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u69cb\u6210\u306f Monorepo \u74b0\u5883\u3068\u306a\u3063\u3066\u3044\u3066 1 \u3064\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u5185\u306b\u8907\u6570\u306e\u30b5\u30fc\u30d3\u30b9\u306e\u30eb\u30fc\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<p data-line=\"50\" class=\"code-line\">tfaction \u306e\u5c0e\u5165\u3092\u59cb\u3081\u308b\u524d\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u304c\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u3057\u305f\u3002<br \/>(\u672c\u8a18\u4e8b\u3068\u76f4\u63a5\u7684\u306b\u95a2\u4fc2\u306e\u306a\u3044\u7d30\u304b\u3044\u90e8\u5206\u306f\u7701\u3044\u3066\u3044\u307e\u3059)<\/p>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">.github\/workflows\/terragrunt_plan_xxxx.yml<\/span><\/p>\n<pre class=\"language-yaml\"><code class=\"language-yaml code-line\" data-line=\"53\"><span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> Terrgrunt Plan xxxx State\n\n<span class=\"token key atrule\">on<\/span><span class=\"token punctuation\">:<\/span>\n  <span class=\"token key atrule\">pull_request<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token key atrule\">branches<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token punctuation\">-<\/span> master\n    <span class=\"token punctuation\">-<\/span> staging\n    <span class=\"token key atrule\">paths<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token punctuation\">-<\/span> <span class=\"token string\">\"terragrunt\/xxxx\/**\"<\/span>\n\n<span class=\"token key atrule\">jobs<\/span><span class=\"token punctuation\">:<\/span>\n  <span class=\"token key atrule\">terragrunt-plan<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token key atrule\">runs-on<\/span><span class=\"token punctuation\">:<\/span> ubuntu<span class=\"token punctuation\">-<\/span>latest\n    <span class=\"token key atrule\">permissions<\/span><span class=\"token punctuation\">:<\/span>\n      <span class=\"token key atrule\">id-token<\/span><span class=\"token punctuation\">:<\/span> write\n      <span class=\"token key atrule\">contents<\/span><span class=\"token punctuation\">:<\/span> read\n      <span class=\"token key atrule\">pull-requests<\/span><span class=\"token punctuation\">:<\/span> write\n    <span class=\"token key atrule\">steps<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> actions\/checkout@v4\n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> Configure AWS credentials\n      <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> aws<span class=\"token punctuation\">-<\/span>actions\/configure<span class=\"token punctuation\">-<\/span>aws<span class=\"token punctuation\">-<\/span>credentials@v4.0.2\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">role-to-assume<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> secrets.TERRAGRUNT_AWS_IAM_ROLE_ARN <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n        <span class=\"token key atrule\">aws-region<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> vars.AWS_REGION <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> terragrunt plan\n      <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> gruntwork<span class=\"token punctuation\">-<\/span>io\/terragrunt<span class=\"token punctuation\">-<\/span>action@v2\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">tf_version<\/span><span class=\"token punctuation\">:<\/span> 1.9.8 \n        <span class=\"token key atrule\">tg_version<\/span><span class=\"token punctuation\">:<\/span> 0.69.0 \n        <span class=\"token key atrule\">tg_dir<\/span><span class=\"token punctuation\">:<\/span> terragrunt\/xxxx\n        <span class=\"token key atrule\">tg_command<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">'plan -lock=false'<\/span>\n        <span class=\"token key atrule\">tg_comment<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token number\">1<\/span>\n      <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">TERRAGRUNT_FORWARD_TF_STDOUT<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"true\"<\/span>\n        <span class=\"token key atrule\">GITHUB_TOKEN<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> github.token <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n<\/code><\/pre>\n<\/div>\n<p data-line=\"91\" class=\"code-line\">\u3053\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u304c\u30eb\u30fc\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u3054\u3068\u306b\u5b9a\u7fa9\u3055\u308c\u3066\u304a\u308a\u3001\u5f0a\u793e\u306e\u30eb\u30fc\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u306f\u5168\u90e8\u3067 14 \u500b\u3042\u308b\u305f\u3081\u3001\u8a08 14 \u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n<p data-line=\"93\" class=\"code-line\">\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u304c\u5206\u304b\u308c\u3066\u3044\u305f\u7406\u7531\u306f\u3001\u5909\u66f4\u3057\u305f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3054\u3068\u306b\u5b9f\u884c\u3059\u308b CI \u3092\u6700\u5c0f\u9650\u306b\u6291\u3048\u305f\u3044\u305f\u3081\u3001<code>on.pull_request.paths<\/code> \u306e\u90e8\u5206\u3067 <code>terragrunt\/xxxx\/**<\/code> \u306e\u3088\u3046\u306b\u30eb\u30fc\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u3054\u3068\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5909\u66f4\u3092\u691c\u77e5\u3057\u3066\u3044\u307e\u3057\u305f\u3002<\/p>\n<h3 id=\"1.-list-targets-action-%E3%81%AE%E5%B0%8E%E5%85%A5\" data-line=\"95\" class=\"code-line\">\n 1. list-targets Action \u306e\u5c0e\u5165<\/h3>\n<p data-line=\"97\" class=\"code-line\">\u307e\u305a\u306f\u524d\u8ff0\u306e\u30ed\u30fc\u30ab\u30eb\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u5909\u66f4\u3092\u691c\u77e5\u3059\u308b\u305f\u3081\u306b <a target=\"_blank\" href=\"https:\/\/github.com\/suzuki-shunsuke\/tfaction\/blob\/v1.16.1\/list-targets\/action.yaml\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">list-targets<\/a> Action \u3092\u5c0e\u5165\u3057\u307e\u3057\u305f\u3002<br \/>\u307e\u305f\u300114 \u500b\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306e\u4fdd\u5b88\u6027\u3082\u8ab2\u984c\u3068\u306a\u3063\u3066\u3044\u305f\u305f\u3081\u3001list-targets Action \u306e\u5c0e\u5165\u306b\u4f34\u3044\u3001matrix \u30b8\u30e7\u30d6\u306e\u5c0e\u5165\u3082\u540c\u6642\u306b\u884c\u306a\u3046\u3053\u3068\u3067 14 \u500b\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092 1 \u3064\u306b\u7d71\u5408\u3057\u307e\u3057\u305f\u3002<\/p>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">.github\/workflows\/terragrunt_plan.yml<\/span><\/p>\n<pre class=\"language-yaml\"><code class=\"language-yaml code-line\" data-line=\"100\"><span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> Terragrunt Plan\n\n<span class=\"token key atrule\">on<\/span><span class=\"token punctuation\">:<\/span>\n  <span class=\"token key atrule\">pull_request<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token key atrule\">branches<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token punctuation\">-<\/span> master\n    <span class=\"token punctuation\">-<\/span> staging\n    <span class=\"token key atrule\">paths<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token punctuation\">-<\/span> <span class=\"token string\">\"terragrunt\/**\"<\/span>\n  \n  <span class=\"token key atrule\">push<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token key atrule\">branches<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token punctuation\">-<\/span> master\n    <span class=\"token key atrule\">paths<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token punctuation\">-<\/span> <span class=\"token string\">\"terragrunt\/**\"<\/span>\n\n<span class=\"token key atrule\">jobs<\/span><span class=\"token punctuation\">:<\/span>\n  <span class=\"token key atrule\">setup<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token key atrule\">runs-on<\/span><span class=\"token punctuation\">:<\/span> ubuntu<span class=\"token punctuation\">-<\/span>latest\n    <span class=\"token key atrule\">outputs<\/span><span class=\"token punctuation\">:<\/span>\n      <span class=\"token key atrule\">targets<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> steps.list<span class=\"token punctuation\">-<\/span>targets.outputs.targets <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n    <span class=\"token key atrule\">permissions<\/span><span class=\"token punctuation\">:<\/span>\n      <span class=\"token key atrule\">contents<\/span><span class=\"token punctuation\">:<\/span> read\n      <span class=\"token key atrule\">pull-requests<\/span><span class=\"token punctuation\">:<\/span> write \n    <span class=\"token key atrule\">steps<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> actions\/checkout@v4\n    \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> actions\/cache@v4\n      <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">tfaction_version<\/span><span class=\"token punctuation\">:<\/span> v1.16.1 \n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">path<\/span><span class=\"token punctuation\">:<\/span> ~\/.local\/share\/aquaproj<span class=\"token punctuation\">-<\/span>aqua\n        \n        <span class=\"token key atrule\">key<\/span><span class=\"token punctuation\">:<\/span> v2<span class=\"token punctuation\">-<\/span>aqua<span class=\"token punctuation\">-<\/span>installer<span class=\"token punctuation\">-<\/span>$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span>runner.os<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">-<\/span>$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span>runner.arch<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">-<\/span>for<span class=\"token punctuation\">-<\/span>tfaction<span class=\"token punctuation\">-<\/span>$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span>env.tfaction_version<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n        <span class=\"token key atrule\">restore-keys<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">|<\/span><span class=\"token scalar string\">\n          v2-aqua-installer-${{runner.os}}-${{runner.arch}}-<\/span>\n    \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> aquaproj\/aqua<span class=\"token punctuation\">-<\/span>installer@v3.1.2\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">aqua_version<\/span><span class=\"token punctuation\">:<\/span> v2.51.1 \n    \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> Install terragrunt\n      <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> jaxxstorm\/action<span class=\"token punctuation\">-<\/span>install<span class=\"token punctuation\">-<\/span>gh<span class=\"token punctuation\">-<\/span>release@v2.1.0\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">repo<\/span><span class=\"token punctuation\">:<\/span> gruntwork<span class=\"token punctuation\">-<\/span>io\/terragrunt\n        <span class=\"token key atrule\">tag<\/span><span class=\"token punctuation\">:<\/span> v0.69.0 \n        <span class=\"token key atrule\">cache<\/span><span class=\"token punctuation\">:<\/span> enable\n        <span class=\"token key atrule\">rename-to<\/span><span class=\"token punctuation\">:<\/span> terragrunt\n        <span class=\"token key atrule\">chmod<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token number\">0755<\/span>\n        <span class=\"token key atrule\">extension-matching<\/span><span class=\"token punctuation\">:<\/span> disable\n    \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> hashicorp\/setup<span class=\"token punctuation\">-<\/span>terraform@v3.1.2\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">terraform_version<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"1.9.8\"<\/span> \n        <span class=\"token key atrule\">terraform_wrapper<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token boolean important\">false<\/span> \n    \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> suzuki<span class=\"token punctuation\">-<\/span>shunsuke\/tfaction\/list<span class=\"token punctuation\">-<\/span>targets@v1.16.1\n      <span class=\"token key atrule\">id<\/span><span class=\"token punctuation\">:<\/span> list<span class=\"token punctuation\">-<\/span>targets\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">github_token<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> github.token <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n\n  <span class=\"token key atrule\">terragrunt-plan<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"terragrunt-plan for ${{ matrix.target.target }}\"<\/span>\n    <span class=\"token key atrule\">runs-on<\/span><span class=\"token punctuation\">:<\/span> ubuntu<span class=\"token punctuation\">-<\/span>latest\n    <span class=\"token key atrule\">needs<\/span><span class=\"token punctuation\">:<\/span> setup\n    \n    <span class=\"token key atrule\">if<\/span><span class=\"token punctuation\">:<\/span> join(fromJSON(needs.setup.outputs.targets)<span class=\"token punctuation\">,<\/span> '') <span class=\"token tag\">!=<\/span> ''\n    <span class=\"token key atrule\">strategy<\/span><span class=\"token punctuation\">:<\/span>\n      <span class=\"token key atrule\">fail-fast<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token boolean important\">false<\/span>\n      <span class=\"token key atrule\">matrix<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">target<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> fromJSON(needs.setup.outputs.targets) <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n    <span class=\"token key atrule\">permissions<\/span><span class=\"token punctuation\">:<\/span>\n      <span class=\"token key atrule\">id-token<\/span><span class=\"token punctuation\">:<\/span> write\n      <span class=\"token key atrule\">contents<\/span><span class=\"token punctuation\">:<\/span> read\n      <span class=\"token key atrule\">pull-requests<\/span><span class=\"token punctuation\">:<\/span> write\n    <span class=\"token key atrule\">steps<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> actions\/checkout@v4\n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> Configure AWS credentials\n      <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> aws<span class=\"token punctuation\">-<\/span>actions\/configure<span class=\"token punctuation\">-<\/span>aws<span class=\"token punctuation\">-<\/span>credentials@v4.0.2\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">role-to-assume<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> secrets.TERRAGRUNT_AWS_IAM_ROLE_ARN <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n        <span class=\"token key atrule\">aws-region<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> vars.AWS_REGION <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> terragrunt plan\n      <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> gruntwork<span class=\"token punctuation\">-<\/span>io\/terragrunt<span class=\"token punctuation\">-<\/span>action@v2\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">tf_version<\/span><span class=\"token punctuation\">:<\/span> 1.9.8 \n        <span class=\"token key atrule\">tg_version<\/span><span class=\"token punctuation\">:<\/span> 0.69.0 \n        <span class=\"token key atrule\">tg_dir<\/span><span class=\"token punctuation\">:<\/span> terragrunt\/$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> matrix.target.target <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n        <span class=\"token key atrule\">tg_command<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">'plan -lock=false'<\/span>\n        <span class=\"token key atrule\">tg_comment<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token number\">1<\/span>\n      <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">TERRAGRUNT_FORWARD_TF_STDOUT<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"true\"<\/span>\n        <span class=\"token key atrule\">GITHUB_TOKEN<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> github.token <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span> \n<\/code><\/pre>\n<\/div>\n<p data-line=\"196\" class=\"code-line\">\u307e\u305f\u3001tfaction \u306e\u5229\u7528\u306b\u5fc5\u8981\u306a\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u8ffd\u52a0\u3082\u5408\u308f\u305b\u3066\u5b9f\u65bd\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">tfaction-root.yaml<\/span><\/p>\n<pre class=\"language-yaml\"><code class=\"language-yaml code-line\" data-line=\"198\">\n\n<span class=\"token key atrule\">plan_workflow_name<\/span><span class=\"token punctuation\">:<\/span> Terragrunt Plan\n\n\n\n<span class=\"token key atrule\">update_local_path_module_caller<\/span><span class=\"token punctuation\">:<\/span>\n  <span class=\"token key atrule\">enabled<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token boolean important\">true<\/span>\n\n<span class=\"token key atrule\">target_groups<\/span><span class=\"token punctuation\">:<\/span>\n<span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">working_directory<\/span><span class=\"token punctuation\">:<\/span> terragrunt\/xxxx\n  <span class=\"token key atrule\">target<\/span><span class=\"token punctuation\">:<\/span> xxxx\n\n<\/code><\/pre>\n<\/div>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">terragrunt\/xxxx\/tfaction.yaml<\/span><\/p>\n<pre class=\"language-yaml\"><code class=\"language-yaml code-line\" data-line=\"214\"><span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span>\n<\/code><\/pre>\n<\/div>\n<p data-line=\"218\" class=\"code-line\">\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306e\u5b9f\u88c5\u304c\u30ac\u30e9\u30c3\u3068\u5909\u308f\u3063\u305f\u3088\u3046\u306b\u3082\u898b\u3048\u307e\u3059\u304c\u3001\u672c\u8cea\u7684\u306b\u306f terragrunt plan \u3092\u5b9f\u884c\u3059\u308b\u524d\u6e96\u5099\u3068\u3057\u3066\u3001\u5b9f\u884c\u5bfe\u8c61\u3092\u691c\u51fa\u3059\u308b\u4ed5\u7d44\u307f\u304c\u5897\u3048\u305f\u3060\u3051\u3067\u3059\u3002<br \/>list-targets Action \u306b\u3088\u3063\u3066\u5909\u66f4\u3057\u305f\u30ed\u30fc\u30ab\u30eb\u30e2\u30b8\u30e5\u30fc\u30eb\u3084\u30eb\u30fc\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u691c\u51fa\u3057\u3001PR \u4e0a\u3067\u5909\u66f4\u3057\u305f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u307f terragrunt plan \u3092\u5b9f\u884c\u3059\u308b\u3088\u3046\u306a\u4ed5\u7d44\u307f\u306b\u5909\u308f\u308a\u307e\u3057\u305f\u3002<\/p>\n<p data-line=\"221\" class=\"code-line\">terragrunt plan \u3092\u5b9f\u884c\u3059\u308b\u90e8\u5206\u306b\u306f\u5909\u308f\u3089\u305a gruntwork-io\/terragrunt-action Action \u3092\u4f7f\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<p data-line=\"223\" class=\"code-line\">\u307e\u305f\u3001\u4eca\u56de\u306f list-targets Action \u306e\u30ed\u30fc\u30ab\u30eb\u30e2\u30b8\u30e5\u30fc\u30eb\u5909\u66f4\u691c\u77e5\u304c\u5fc5\u8981\u306a\u3060\u3051\u3067\u3057\u305f\u306e\u3067\u3001<code>tfaction-root.yaml<\/code> \u306e\u8a2d\u5b9a\u3082\u5fc5\u8981\u6700\u5c0f\u9650\u306b\u6291\u3048\u3066\u3044\u307e\u3059\u3057\u3001tfaction \u304c\u524d\u63d0\u3068\u3057\u3066\u3044\u308b aqua \u30d1\u30c3\u30b1\u30fc\u30b8\u30de\u30cd\u30fc\u30b8\u30e3\u306e\u5c0e\u5165\u3082\u884c\u3044\u307e\u305b\u3093\u3067\u3057\u305f\u3002<br \/>tfaction \u5185\u90e8\u3067\u4f7f\u3063\u3066\u3044\u308b aqua \u306e\u305f\u3081\u306b CI \u4e0a\u3067\u306f aqua CLI \u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u30ed\u30fc\u30ab\u30eb\u74b0\u5883\u306a\u3069\u306b\u306f aqua \u3092\u5c0e\u5165\u3057\u3066\u3044\u307e\u305b\u3093\u3057\u3001<code>aqua.yaml<\/code> \u3082\u8ffd\u52a0\u3057\u3066\u3044\u307e\u305b\u3093\u3002<\/p>\n<h3 id=\"2.-plan-action-%E3%81%AE%E5%B0%8E%E5%85%A5\" data-line=\"226\" class=\"code-line\">\n 2. plan Action \u306e\u5c0e\u5165<\/h3>\n<p data-line=\"228\" class=\"code-line\">\u6b21\u306e\u30b9\u30c6\u30c3\u30d7\u3068\u3057\u3066\u3001tfaction \u306e <a target=\"_blank\" href=\"https:\/\/github.com\/suzuki-shunsuke\/tfaction\/blob\/v1.16.1\/plan\/action.yaml\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">plan<\/a> Action \u3092\u5c0e\u5165\u3057\u307e\u3057\u305f\u3002<\/p>\n<p data-line=\"230\" class=\"code-line\">plan Action \u306e\u5c0e\u5165\u7406\u7531\u306f gruntwork-io\/terragrunt-action Action \u306e PR \u30b3\u30e1\u30f3\u30c8\u6a5f\u80fd\u306b\u30b5\u30de\u30ea\u8868\u793a\u304c\u306a\u304f\u30011 \u3064 1 \u3064\u8a73\u7d30\u3092\u898b\u308b\u306e\u304c\u5927\u5909\u3060\u3063\u305f\u305f\u3081\u3001tfaction \u306b\u7d44\u307f\u8fbc\u307e\u308c\u3066\u3044\u308b <a target=\"_blank\" href=\"https:\/\/github.com\/suzuki-shunsuke\/tfcmt\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">tfcmt<\/a> \u306b\u3088\u308b PR \u30b3\u30e1\u30f3\u30c8\u3092\u4f7f\u3044\u305f\u304b\u3063\u305f\u304b\u3089\u3067\u3059\u3002<br \/>(\u3061\u306a\u307f\u306b\u5143\u3005 tfcmt \u306f\u4f7f\u3063\u3066\u3044\u307e\u3057\u305f\u304c Terragrunt \u5c0e\u5165\u6642\u306b\u516c\u5f0f Action \u306b\u5bc4\u305b\u308b\u305f\u3081\u306b\u4e00\u5ea6\u5ec3\u6b62\u3055\u308c\u3066\u3044\u307e\u3057\u305f)<\/p>\n<p data-line=\"233\" class=\"code-line\"><img decoding=\"async\" src=\"https:\/\/storage.googleapis.com\/zenn-user-upload\/c6d9a460eb2f-20250911.png\" class=\"md-img\" loading=\"lazy\"\/><br \/><em>No changes \u3067\u3042\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b\u306e\u306b\u3082\u90fd\u5ea6\u30c8\u30b0\u30eb\u3092\u958b\u3044\u3066\u4e2d\u8eab\u3092\u78ba\u8a8d\u3059\u308b\u5fc5\u8981\u304c\u3042\u3063\u305f<\/em><\/p>\n<p data-line=\"236\" class=\"code-line\"><span class=\"embed-block zenn-embedded zenn-embedded-card\"><iframe id=\"zenn-embedded__ebc072ba03ed\" src=\"https:\/\/embed.zenn.studio\/card#zenn-embedded__ebc072ba03ed\" data-content=\"https%3A%2F%2Fsuzuki-shunsuke.github.io%2Ftfaction%2Fdocs%2Ffeature%2Ftfcmt\" frameborder=\"0\" scrolling=\"no\" loading=\"lazy\"><\/iframe><\/span><a target=\"_blank\" href=\"https:\/\/suzuki-shunsuke.github.io\/tfaction\/docs\/feature\/tfcmt\" style=\"display:none\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/suzuki-shunsuke.github.io\/tfaction\/docs\/feature\/tfcmt<\/a><\/p>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">.github\/workflows\/terragrunt_plan.yml<\/span><\/p>\n<pre class=\"diff-highlight language-diff-yaml\"><code class=\"diff-highlight language-diff-yaml code-line\" data-line=\"238\"><span class=\"token coord\">@@ -43,7 +43,7 @@<\/span>\n<span class=\"token unchanged language-yaml\"><span class=\"token prefix unchanged\"> <\/span>      <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> jaxxstorm\/action<span class=\"token punctuation\">-<\/span>install<span class=\"token punctuation\">-<\/span>gh<span class=\"token punctuation\">-<\/span>release@v2.1.0\n<span class=\"token prefix unchanged\"> <\/span>      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n<span class=\"token prefix unchanged\"> <\/span>        <span class=\"token key atrule\">repo<\/span><span class=\"token punctuation\">:<\/span> gruntwork<span class=\"token punctuation\">-<\/span>io\/terragrunt\n<\/span><span class=\"token deleted-sign deleted language-yaml\"><span class=\"token prefix deleted\">-<\/span>        <span class=\"token key atrule\">tag<\/span><span class=\"token punctuation\">:<\/span> v0.69.0 \n<\/span><span class=\"token inserted-sign inserted language-yaml\"><span class=\"token prefix inserted\">+<\/span>        <span class=\"token key atrule\">tag<\/span><span class=\"token punctuation\">:<\/span> v0.81.0 \n<\/span><span class=\"token unchanged language-yaml\"><span class=\"token prefix unchanged\"> <\/span>        <span class=\"token key atrule\">cache<\/span><span class=\"token punctuation\">:<\/span> enable\n<span class=\"token prefix unchanged\"> <\/span>        <span class=\"token key atrule\">rename-to<\/span><span class=\"token punctuation\">:<\/span> terragrunt\n<span class=\"token prefix unchanged\"> <\/span>        <span class=\"token key atrule\">chmod<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token number\">0755<\/span>\n<\/span><span class=\"token coord\">@@ -51,7 +51,7 @@<\/span>\n<span class=\"token unchanged language-yaml\"><span class=\"token prefix unchanged\"> <\/span>    \n<span class=\"token prefix unchanged\"> <\/span>    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> hashicorp\/setup<span class=\"token punctuation\">-<\/span>terraform@v3.1.2\n<span class=\"token prefix unchanged\"> <\/span>      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n<\/span><span class=\"token deleted-sign deleted language-yaml\"><span class=\"token prefix deleted\">-<\/span>        <span class=\"token key atrule\">terraform_version<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"1.9.8\"<\/span> \n<\/span><span class=\"token inserted-sign inserted language-yaml\"><span class=\"token prefix inserted\">+<\/span>        <span class=\"token key atrule\">terraform_version<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"1.12.2\"<\/span> \n<\/span><span class=\"token unchanged language-yaml\"><span class=\"token prefix unchanged\"> <\/span>        <span class=\"token key atrule\">terraform_wrapper<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token boolean important\">false<\/span> \n<span class=\"token prefix unchanged\"> <\/span>    \n<span class=\"token prefix unchanged\"> <\/span>    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> suzuki<span class=\"token punctuation\">-<\/span>shunsuke\/tfaction\/list<span class=\"token punctuation\">-<\/span>targets@v1.16.1\n<\/span><span class=\"token coord\">@@ -64,15 +64,19 @@<\/span>\n<span class=\"token unchanged language-yaml\"><span class=\"token prefix unchanged\"> <\/span>    <span class=\"token key atrule\">runs-on<\/span><span class=\"token punctuation\">:<\/span> ubuntu<span class=\"token punctuation\">-<\/span>latest\n<span class=\"token prefix unchanged\"> <\/span>    <span class=\"token key atrule\">needs<\/span><span class=\"token punctuation\">:<\/span> setup\n<span class=\"token prefix unchanged\"> <\/span>    \n<\/span><span class=\"token deleted-sign deleted language-yaml\"><span class=\"token prefix deleted\">-<\/span>    <span class=\"token key atrule\">if<\/span><span class=\"token punctuation\">:<\/span> join(fromJSON(needs.setup.outputs.targets)<span class=\"token punctuation\">,<\/span> '') <span class=\"token tag\">!=<\/span> ''\n<\/span><span class=\"token inserted-sign inserted language-yaml\"><span class=\"token prefix inserted\">+<\/span>    <span class=\"token key atrule\">if<\/span><span class=\"token punctuation\">:<\/span> github.event_name == 'pull_request' <span class=\"token important\">&amp;&amp;<\/span> join(fromJSON(needs.setup.outputs.targets)<span class=\"token punctuation\">,<\/span> '') <span class=\"token tag\">!=<\/span> ''\n<\/span><span class=\"token unchanged language-yaml\"><span class=\"token prefix unchanged\"> <\/span>    <span class=\"token key atrule\">strategy<\/span><span class=\"token punctuation\">:<\/span>\n<span class=\"token prefix unchanged\"> <\/span>      <span class=\"token key atrule\">fail-fast<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token boolean important\">false<\/span>\n<span class=\"token prefix unchanged\"> <\/span>      <span class=\"token key atrule\">matrix<\/span><span class=\"token punctuation\">:<\/span>\n<span class=\"token prefix unchanged\"> <\/span>        <span class=\"token key atrule\">target<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> fromJSON(needs.setup.outputs.targets) <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n<span class=\"token prefix unchanged\"> <\/span>    <span class=\"token key atrule\">permissions<\/span><span class=\"token punctuation\">:<\/span>\n<span class=\"token prefix unchanged\"> <\/span>      <span class=\"token key atrule\">id-token<\/span><span class=\"token punctuation\">:<\/span> write\n<\/span><span class=\"token deleted-sign deleted language-yaml\"><span class=\"token prefix deleted\">-<\/span>      <span class=\"token key atrule\">contents<\/span><span class=\"token punctuation\">:<\/span> read\n<\/span><span class=\"token inserted-sign inserted language-yaml\"><span class=\"token prefix inserted\">+<\/span>      <span class=\"token key atrule\">contents<\/span><span class=\"token punctuation\">:<\/span> write\n<\/span><span class=\"token unchanged language-yaml\"><span class=\"token prefix unchanged\"> <\/span>      <span class=\"token key atrule\">pull-requests<\/span><span class=\"token punctuation\">:<\/span> write\n<\/span><span class=\"token inserted-sign inserted language-yaml\"><span class=\"token prefix inserted\">+<\/span>      <span class=\"token key atrule\">issues<\/span><span class=\"token punctuation\">:<\/span> write\n<span class=\"token prefix inserted\">+<\/span>    <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n<span class=\"token prefix inserted\">+<\/span>      <span class=\"token key atrule\">TFACTION_TARGET<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> matrix.target.target <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n<span class=\"token prefix inserted\">+<\/span>      <span class=\"token key atrule\">TFACTION_JOB_TYPE<\/span><span class=\"token punctuation\">:<\/span> terraform\n<\/span><span class=\"token unchanged language-yaml\"><span class=\"token prefix unchanged\"> <\/span>    <span class=\"token key atrule\">steps<\/span><span class=\"token punctuation\">:<\/span>\n<span class=\"token prefix unchanged\"> <\/span>    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> actions\/checkout@v4\n<span class=\"token prefix unchanged\"> <\/span>    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> Configure AWS credentials\n<\/span><span class=\"token coord\">@@ -80,14 +84,36 @@<\/span>\n<span class=\"token unchanged language-yaml\"><span class=\"token prefix unchanged\"> <\/span>      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n<span class=\"token prefix unchanged\"> <\/span>        <span class=\"token key atrule\">role-to-assume<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> secrets.TERRAGRUNT_AWS_IAM_ROLE_ARN <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n<span class=\"token prefix unchanged\"> <\/span>        <span class=\"token key atrule\">aws-region<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> vars.AWS_REGION <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n<\/span><span class=\"token deleted-sign deleted language-yaml\"><span class=\"token prefix deleted\">-<\/span>    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> terragrunt plan\n<span class=\"token prefix deleted\">-<\/span>      <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> gruntwork<span class=\"token punctuation\">-<\/span>io\/terragrunt<span class=\"token punctuation\">-<\/span>action@v2\n<\/span><span class=\"token inserted-sign inserted language-yaml\"><span class=\"token prefix inserted\">+<\/span>    \n<span class=\"token prefix inserted\">+<\/span>    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> actions\/cache@v4\n<span class=\"token prefix inserted\">+<\/span>      <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n<span class=\"token prefix inserted\">+<\/span>        <span class=\"token key atrule\">tfaction_version<\/span><span class=\"token punctuation\">:<\/span> v1.16.1 \n<\/span><span class=\"token unchanged language-yaml\"><span class=\"token prefix unchanged\"> <\/span>      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n<\/span><span class=\"token deleted-sign deleted language-yaml\"><span class=\"token prefix deleted\">-<\/span>        <span class=\"token key atrule\">tf_version<\/span><span class=\"token punctuation\">:<\/span> 1.9.8 \n<span class=\"token prefix deleted\">-<\/span>        <span class=\"token key atrule\">tg_version<\/span><span class=\"token punctuation\">:<\/span> 0.69.0 \n<span class=\"token prefix deleted\">-<\/span>        <span class=\"token key atrule\">tg_dir<\/span><span class=\"token punctuation\">:<\/span> terragrunt\/$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> matrix.target.target <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n<span class=\"token prefix deleted\">-<\/span>        <span class=\"token key atrule\">tg_command<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">'plan -lock=false'<\/span>\n<span class=\"token prefix deleted\">-<\/span>        <span class=\"token key atrule\">tg_comment<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token number\">1<\/span>\n<\/span><span class=\"token inserted-sign inserted language-yaml\"><span class=\"token prefix inserted\">+<\/span>        <span class=\"token key atrule\">path<\/span><span class=\"token punctuation\">:<\/span> ~\/.local\/share\/aquaproj<span class=\"token punctuation\">-<\/span>aqua\n<span class=\"token prefix inserted\">+<\/span>        \n<span class=\"token prefix inserted\">+<\/span>        <span class=\"token key atrule\">key<\/span><span class=\"token punctuation\">:<\/span> v2<span class=\"token punctuation\">-<\/span>aqua<span class=\"token punctuation\">-<\/span>installer<span class=\"token punctuation\">-<\/span>$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span>runner.os<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">-<\/span>$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span>runner.arch<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">-<\/span>for<span class=\"token punctuation\">-<\/span>tfaction<span class=\"token punctuation\">-<\/span>$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span>env.tfaction_version<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n<span class=\"token prefix inserted\">+<\/span>        <span class=\"token key atrule\">restore-keys<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">|<\/span><span class=\"token scalar string\">\n<span class=\"token prefix inserted\">+<\/span>          v2-aqua-installer-${{runner.os}}-${{runner.arch}}-<\/span>\n<span class=\"token prefix inserted\">+<\/span>    \n<span class=\"token prefix inserted\">+<\/span>    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> aquaproj\/aqua<span class=\"token punctuation\">-<\/span>installer@v3.1.2\n<span class=\"token prefix inserted\">+<\/span>      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n<span class=\"token prefix inserted\">+<\/span>        <span class=\"token key atrule\">aqua_version<\/span><span class=\"token punctuation\">:<\/span> v2.51.1 \n<span class=\"token prefix inserted\">+<\/span>    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> Install terragrunt\n<span class=\"token prefix inserted\">+<\/span>      <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> jaxxstorm\/action<span class=\"token punctuation\">-<\/span>install<span class=\"token punctuation\">-<\/span>gh<span class=\"token punctuation\">-<\/span>release@v2.1.0\n<span class=\"token prefix inserted\">+<\/span>      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n<span class=\"token prefix inserted\">+<\/span>        <span class=\"token key atrule\">repo<\/span><span class=\"token punctuation\">:<\/span> gruntwork<span class=\"token punctuation\">-<\/span>io\/terragrunt\n<span class=\"token prefix inserted\">+<\/span>        <span class=\"token key atrule\">tag<\/span><span class=\"token punctuation\">:<\/span> v0.81.0 \n<span class=\"token prefix inserted\">+<\/span>        <span class=\"token key atrule\">cache<\/span><span class=\"token punctuation\">:<\/span> enable\n<span class=\"token prefix inserted\">+<\/span>        <span class=\"token key atrule\">rename-to<\/span><span class=\"token punctuation\">:<\/span> terragrunt\n<span class=\"token prefix inserted\">+<\/span>        <span class=\"token key atrule\">chmod<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token number\">0755<\/span>\n<span class=\"token prefix inserted\">+<\/span>        <span class=\"token key atrule\">extension-matching<\/span><span class=\"token punctuation\">:<\/span> disable\n<span class=\"token prefix inserted\">+<\/span>    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> hashicorp\/setup<span class=\"token punctuation\">-<\/span>terraform@v3.1.2\n<span class=\"token prefix inserted\">+<\/span>      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n<span class=\"token prefix inserted\">+<\/span>        <span class=\"token key atrule\">terraform_version<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"1.12.2\"<\/span> \n<span class=\"token prefix inserted\">+<\/span>        <span class=\"token key atrule\">terraform_wrapper<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token boolean important\">false<\/span> \n<span class=\"token prefix inserted\">+<\/span>    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> suzuki<span class=\"token punctuation\">-<\/span>shunsuke\/tfaction\/setup@v1.16.1\n<\/span><span class=\"token unchanged language-yaml\"><span class=\"token prefix unchanged\"> <\/span>      <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n<\/span><span class=\"token deleted-sign deleted language-yaml\"><span class=\"token prefix deleted\">-<\/span>        <span class=\"token key atrule\">TERRAGRUNT_FORWARD_TF_STDOUT<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"true\"<\/span>\n<span class=\"token prefix deleted\">-<\/span>        <span class=\"token key atrule\">GITHUB_TOKEN<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> github.token <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span> \n<\/span><span class=\"token inserted-sign inserted language-yaml\"><span class=\"token prefix inserted\">+<\/span>        <span class=\"token key atrule\">TG_TF_FORWARD_STDOUT<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"true\"<\/span>\n<span class=\"token prefix inserted\">+<\/span>    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> suzuki<span class=\"token punctuation\">-<\/span>shunsuke\/tfaction\/plan@v1.16.1\n<span class=\"token prefix inserted\">+<\/span>      <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n<span class=\"token prefix inserted\">+<\/span>        <span class=\"token key atrule\">TG_TF_FORWARD_STDOUT<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"true\"<\/span>\n<\/span><\/code><\/pre>\n<\/div>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">tfaction-root.yaml<\/span><\/p>\n<pre class=\"diff-highlight language-diff-yaml\"><code class=\"diff-highlight language-diff-yaml code-line\" data-line=\"327\"><span class=\"token coord\">@@ -7,6 +7,8 @@<\/span>\n<span class=\"token unchanged language-yaml\"><span class=\"token prefix unchanged\"> <\/span><span class=\"token key atrule\">update_local_path_module_caller<\/span><span class=\"token punctuation\">:<\/span>\n<span class=\"token prefix unchanged\"> <\/span>  <span class=\"token key atrule\">enabled<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token boolean important\">true<\/span>\n<span class=\"token prefix unchanged\"> <\/span>\n<\/span><span class=\"token inserted-sign inserted language-yaml\"><span class=\"token prefix inserted\">+<\/span><span class=\"token key atrule\">terraform_command<\/span><span class=\"token punctuation\">:<\/span> terragrunt\n<span class=\"token prefix inserted\">+<\/span>\n<\/span><span class=\"token unchanged language-yaml\"><span class=\"token prefix unchanged\"> <\/span><span class=\"token key atrule\">target_groups<\/span><span class=\"token punctuation\">:<\/span>\n<span class=\"token punctuation\"><span class=\"token prefix unchanged\"> <\/span>-<\/span> <span class=\"token key atrule\">working_directory<\/span><span class=\"token punctuation\">:<\/span> terragrunt\/xxxx\n<span class=\"token prefix unchanged\"> <\/span>  <span class=\"token key atrule\">target<\/span><span class=\"token punctuation\">:<\/span> xxxx\n<\/span><\/code><\/pre>\n<\/div>\n<details>\n<summary>\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u5168\u4f53<\/summary>\n<div class=\"details-content\">\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">.github\/workflows\/terragrunt_plan.yml<\/span><\/p>\n<pre class=\"language-yaml\"><code class=\"language-yaml code-line\" data-line=\"341\"><span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> Terragrunt Plan\n\n<span class=\"token key atrule\">on<\/span><span class=\"token punctuation\">:<\/span>\n  <span class=\"token key atrule\">pull_request<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token key atrule\">branches<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token punctuation\">-<\/span> master\n    <span class=\"token punctuation\">-<\/span> staging\n    <span class=\"token key atrule\">paths<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token punctuation\">-<\/span> <span class=\"token string\">\"terragrunt\/**\"<\/span>\n  \n  <span class=\"token key atrule\">push<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token key atrule\">branches<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token punctuation\">-<\/span> master\n    <span class=\"token key atrule\">paths<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token punctuation\">-<\/span> <span class=\"token string\">\"terragrunt\/**\"<\/span>\n\n<span class=\"token key atrule\">jobs<\/span><span class=\"token punctuation\">:<\/span>\n  <span class=\"token key atrule\">setup<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token key atrule\">runs-on<\/span><span class=\"token punctuation\">:<\/span> ubuntu<span class=\"token punctuation\">-<\/span>latest\n    <span class=\"token key atrule\">outputs<\/span><span class=\"token punctuation\">:<\/span>\n      <span class=\"token key atrule\">targets<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> steps.list<span class=\"token punctuation\">-<\/span>targets.outputs.targets <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n    <span class=\"token key atrule\">permissions<\/span><span class=\"token punctuation\">:<\/span>\n      <span class=\"token key atrule\">contents<\/span><span class=\"token punctuation\">:<\/span> read\n      <span class=\"token key atrule\">pull-requests<\/span><span class=\"token punctuation\">:<\/span> write \n    <span class=\"token key atrule\">steps<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> actions\/checkout@v4\n    \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> actions\/cache@v4\n      <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">tfaction_version<\/span><span class=\"token punctuation\">:<\/span> v1.16.1 \n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">path<\/span><span class=\"token punctuation\">:<\/span> ~\/.local\/share\/aquaproj<span class=\"token punctuation\">-<\/span>aqua\n        \n        <span class=\"token key atrule\">key<\/span><span class=\"token punctuation\">:<\/span> v2<span class=\"token punctuation\">-<\/span>aqua<span class=\"token punctuation\">-<\/span>installer<span class=\"token punctuation\">-<\/span>$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span>runner.os<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">-<\/span>$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span>runner.arch<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">-<\/span>for<span class=\"token punctuation\">-<\/span>tfaction<span class=\"token punctuation\">-<\/span>$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span>env.tfaction_version<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n        <span class=\"token key atrule\">restore-keys<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">|<\/span><span class=\"token scalar string\">\n          v2-aqua-installer-${{runner.os}}-${{runner.arch}}-<\/span>\n    \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> aquaproj\/aqua<span class=\"token punctuation\">-<\/span>installer@v3.1.2\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">aqua_version<\/span><span class=\"token punctuation\">:<\/span> v2.51.1 \n    \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> Install terragrunt\n      <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> jaxxstorm\/action<span class=\"token punctuation\">-<\/span>install<span class=\"token punctuation\">-<\/span>gh<span class=\"token punctuation\">-<\/span>release@v2.1.0\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">repo<\/span><span class=\"token punctuation\">:<\/span> gruntwork<span class=\"token punctuation\">-<\/span>io\/terragrunt\n        <span class=\"token key atrule\">tag<\/span><span class=\"token punctuation\">:<\/span> v0.81.0 \n        <span class=\"token key atrule\">cache<\/span><span class=\"token punctuation\">:<\/span> enable\n        <span class=\"token key atrule\">rename-to<\/span><span class=\"token punctuation\">:<\/span> terragrunt\n        <span class=\"token key atrule\">chmod<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token number\">0755<\/span>\n        <span class=\"token key atrule\">extension-matching<\/span><span class=\"token punctuation\">:<\/span> disable\n    \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> hashicorp\/setup<span class=\"token punctuation\">-<\/span>terraform@v3.1.2\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">terraform_version<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"1.12.2\"<\/span> \n        <span class=\"token key atrule\">terraform_wrapper<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token boolean important\">false<\/span> \n    \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> suzuki<span class=\"token punctuation\">-<\/span>shunsuke\/tfaction\/list<span class=\"token punctuation\">-<\/span>targets@v1.16.1\n      <span class=\"token key atrule\">id<\/span><span class=\"token punctuation\">:<\/span> list<span class=\"token punctuation\">-<\/span>targets\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">github_token<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> github.token <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n\n  <span class=\"token key atrule\">terragrunt-plan<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"terragrunt-plan for ${{ matrix.target.target }}\"<\/span>\n    <span class=\"token key atrule\">runs-on<\/span><span class=\"token punctuation\">:<\/span> ubuntu<span class=\"token punctuation\">-<\/span>latest\n    <span class=\"token key atrule\">needs<\/span><span class=\"token punctuation\">:<\/span> setup\n    \n    <span class=\"token key atrule\">if<\/span><span class=\"token punctuation\">:<\/span> github.event_name == 'pull_request' <span class=\"token important\">&amp;&amp;<\/span> join(fromJSON(needs.setup.outputs.targets)<span class=\"token punctuation\">,<\/span> '') <span class=\"token tag\">!=<\/span> ''\n    <span class=\"token key atrule\">strategy<\/span><span class=\"token punctuation\">:<\/span>\n      <span class=\"token key atrule\">fail-fast<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token boolean important\">false<\/span>\n      <span class=\"token key atrule\">matrix<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">target<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> fromJSON(needs.setup.outputs.targets) <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n    <span class=\"token key atrule\">permissions<\/span><span class=\"token punctuation\">:<\/span>\n      <span class=\"token key atrule\">id-token<\/span><span class=\"token punctuation\">:<\/span> write\n      <span class=\"token key atrule\">contents<\/span><span class=\"token punctuation\">:<\/span> write\n      <span class=\"token key atrule\">pull-requests<\/span><span class=\"token punctuation\">:<\/span> write\n      <span class=\"token key atrule\">issues<\/span><span class=\"token punctuation\">:<\/span> write\n    <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n      <span class=\"token key atrule\">TFACTION_TARGET<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> matrix.target.target <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n      <span class=\"token key atrule\">TFACTION_JOB_TYPE<\/span><span class=\"token punctuation\">:<\/span> terraform\n    <span class=\"token key atrule\">steps<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> actions\/checkout@v4\n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> Configure AWS credentials\n      <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> aws<span class=\"token punctuation\">-<\/span>actions\/configure<span class=\"token punctuation\">-<\/span>aws<span class=\"token punctuation\">-<\/span>credentials@v4.0.2\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">role-to-assume<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> secrets.TERRAGRUNT_AWS_IAM_ROLE_ARN <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n        <span class=\"token key atrule\">aws-region<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> vars.AWS_REGION <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n    \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> actions\/cache@v4\n      <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">tfaction_version<\/span><span class=\"token punctuation\">:<\/span> v1.16.1 \n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">path<\/span><span class=\"token punctuation\">:<\/span> ~\/.local\/share\/aquaproj<span class=\"token punctuation\">-<\/span>aqua\n        \n        <span class=\"token key atrule\">key<\/span><span class=\"token punctuation\">:<\/span> v2<span class=\"token punctuation\">-<\/span>aqua<span class=\"token punctuation\">-<\/span>installer<span class=\"token punctuation\">-<\/span>$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span>runner.os<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">-<\/span>$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span>runner.arch<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">-<\/span>for<span class=\"token punctuation\">-<\/span>tfaction<span class=\"token punctuation\">-<\/span>$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span>env.tfaction_version<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n        <span class=\"token key atrule\">restore-keys<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">|<\/span><span class=\"token scalar string\">\n          v2-aqua-installer-${{runner.os}}-${{runner.arch}}-<\/span>\n    \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> aquaproj\/aqua<span class=\"token punctuation\">-<\/span>installer@v3.1.2\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">aqua_version<\/span><span class=\"token punctuation\">:<\/span> v2.51.1 \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> Install terragrunt\n      <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> jaxxstorm\/action<span class=\"token punctuation\">-<\/span>install<span class=\"token punctuation\">-<\/span>gh<span class=\"token punctuation\">-<\/span>release@v2.1.0\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">repo<\/span><span class=\"token punctuation\">:<\/span> gruntwork<span class=\"token punctuation\">-<\/span>io\/terragrunt\n        <span class=\"token key atrule\">tag<\/span><span class=\"token punctuation\">:<\/span> v0.81.0 \n        <span class=\"token key atrule\">cache<\/span><span class=\"token punctuation\">:<\/span> enable\n        <span class=\"token key atrule\">rename-to<\/span><span class=\"token punctuation\">:<\/span> terragrunt\n        <span class=\"token key atrule\">chmod<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token number\">0755<\/span>\n        <span class=\"token key atrule\">extension-matching<\/span><span class=\"token punctuation\">:<\/span> disable\n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> hashicorp\/setup<span class=\"token punctuation\">-<\/span>terraform@v3.1.2\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">terraform_version<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"1.12.2\"<\/span> \n        <span class=\"token key atrule\">terraform_wrapper<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token boolean important\">false<\/span> \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> suzuki<span class=\"token punctuation\">-<\/span>shunsuke\/tfaction\/setup@v1.16.1\n      <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">TG_TF_FORWARD_STDOUT<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"true\"<\/span>\n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> suzuki<span class=\"token punctuation\">-<\/span>shunsuke\/tfaction\/plan@v1.16.1\n      <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">TG_TF_FORWARD_STDOUT<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"true\"<\/span>\n<\/code><\/pre>\n<\/div>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">tfaction-root.yaml<\/span><\/p>\n<pre class=\"language-yaml\"><code class=\"language-yaml code-line\" data-line=\"463\">\n\n<span class=\"token key atrule\">plan_workflow_name<\/span><span class=\"token punctuation\">:<\/span> Terragrunt Plan\n\n\n\n<span class=\"token key atrule\">update_local_path_module_caller<\/span><span class=\"token punctuation\">:<\/span>\n  <span class=\"token key atrule\">enabled<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token boolean important\">true<\/span>\n\n<span class=\"token key atrule\">terraform_command<\/span><span class=\"token punctuation\">:<\/span> terragrunt\n\n<span class=\"token key atrule\">target_groups<\/span><span class=\"token punctuation\">:<\/span>\n<span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">working_directory<\/span><span class=\"token punctuation\">:<\/span> terragrunt\/xxxx\n  <span class=\"token key atrule\">target<\/span><span class=\"token punctuation\">:<\/span> xxxx\n\n<\/code><\/pre>\n<\/div>\n<p data-line=\"481\" class=\"code-line\">\u5f0a\u793e\u306e\u30a4\u30f3\u30d5\u30e9\u30ea\u30dd\u30b8\u30c8\u30ea\u3067\u306f Argo CD \u306e CI \u3082\u5b9f\u884c\u3057\u3066\u3044\u308b\u305f\u3081\u3001tfcmt \u306e PR \u30b3\u30e1\u30f3\u30c8\u3092\u4e00\u90e8\u5909\u66f4\u3057\u3066\u3044\u307e\u3059\u3002\u307e\u305f\u3001\u30e9\u30d9\u30eb\u306e\u81ea\u52d5\u4ed8\u4e0e\u306f\u73fe\u6642\u70b9\u3067\u306f\u4e0d\u8981\u306a\u305f\u3081\u7121\u52b9\u5316\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">tfcmt.yaml<\/span><\/p>\n<pre class=\"language-yaml\"><code class=\"language-yaml code-line\" data-line=\"483\">\n\n<span class=\"token key atrule\">terraform<\/span><span class=\"token punctuation\">:<\/span>\n  <span class=\"token key atrule\">plan<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token key atrule\">disable_label<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token boolean important\">true<\/span>\n<span class=\"token key atrule\">templates<\/span><span class=\"token punctuation\">:<\/span>\n  \n  <span class=\"token key atrule\">plan_title<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"## {{if eq .ExitCode 1}}:x: {{end}}terragrunt plan result{{if .Vars.target}} ({{.Vars.target}}){{end}}\"<\/span>\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/details>\n<p data-line=\"496\" class=\"code-line\">tfcmt \u306b\u3088\u308b PR \u30b3\u30e1\u30f3\u30c8\u3067\u5909\u66f4\u5185\u5bb9\u306e\u30b5\u30de\u30ea\u304c\u8868\u793a\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u308a\u3001\u975e\u5e38\u306b\u898b\u3084\u3059\u304f\u306a\u308a\u307e\u3057\u305f\u3002<\/p>\n<p data-line=\"498\" class=\"code-line\"><img decoding=\"async\" src=\"https:\/\/storage.googleapis.com\/zenn-user-upload\/b92a8bdcb95a-20250911.png\" class=\"md-img\" loading=\"lazy\"\/><\/p>\n<p data-line=\"500\" class=\"code-line\">\u307e\u305f\u3001\u5408\u308f\u305b\u3066 PR \u30e9\u30d9\u30eb\u3068\u3057\u3066\u5909\u66f4\u304c\u3042\u3063\u305f\u30eb\u30fc\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u8a18\u8f09\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u308a\u3001Monorepo \u958b\u767a\u306b\u304a\u3044\u3066\u5909\u66f4\u7b87\u6240\u304c\u5206\u304b\u308a\u3084\u3059\u304f\u306a\u308a\u307e\u3057\u305f\u3002<\/p>\n<p data-line=\"502\" class=\"code-line\"><img decoding=\"async\" src=\"https:\/\/storage.googleapis.com\/zenn-user-upload\/26f204dd980d-20250911.png\" class=\"md-img\" loading=\"lazy\"\/><\/p>\n<p data-line=\"504\" class=\"code-line\">plan Action \u3068\u540c\u6642\u306b <a target=\"_blank\" href=\"https:\/\/github.com\/suzuki-shunsuke\/tfaction\/blob\/v1.16.1\/setup\/action.yaml\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">setup<\/a> Action \u3082\u5c0e\u5165\u3057\u305f\u3053\u3068\u306b\u3088\u308a\u3001<code>.terraform.lock.hcl<\/code> \u306e\u81ea\u52d5\u66f4\u65b0\u3082\u884c\u306a\u3063\u3066\u304f\u308c\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002<\/p>\n<p data-line=\"506\" class=\"code-line\"><img decoding=\"async\" src=\"https:\/\/storage.googleapis.com\/zenn-user-upload\/c5c20134ab2d-20250911.png\" class=\"md-img\" loading=\"lazy\"\/><\/p>\n<h3 id=\"3.-terragrunt-%E3%81%AE%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E6%A7%8B%E6%88%90%E5%A4%89%E6%9B%B4\" data-line=\"508\" class=\"code-line\">\n 3. Terragrunt \u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u6210\u5909\u66f4<\/h3>\n<p data-line=\"510\" class=\"code-line\">\u6b21\u306e\u30b9\u30c6\u30c3\u30d7\u306f tfaction \u3068\u76f4\u63a5\u7684\u306b\u95a2\u4fc2\u306a\u3044\u306e\u3067\u3059\u304c\u3001\u65e2\u5b58\u306e Terragrunt \u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u6210\u304c tfaction \u306e\u5229\u7528\u306b\u9069\u3057\u3066\u304a\u3089\u305a\u3001\u8907\u6570\u306e\u74b0\u5883\u306e plan \u3092\u5b9f\u884c\u3067\u304d\u306a\u3044\u72b6\u614b\u3060\u3063\u305f\u305f\u3081\u3001Terragrunt \u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u6210\u3092\u5909\u66f4\u3057\u307e\u3057\u305f\u3002<\/p>\n<p data-line=\"514\" class=\"code-line\">\u5143\u3005 Terragrunt \u5c0e\u5165\u6642\u306b\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u6210\u3068\u306a\u3063\u3066\u3044\u307e\u3057\u305f\u3002<\/p>\n<div class=\"code-block-container\">\n<pre><code class=\"code-line\" data-line=\"516\">- terragrunt\n    |- xxxx (\u30b5\u30fc\u30d3\u30b9\/\u30eb\u30fc\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb \u3054\u3068\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea)\n        |- terragrunt.hcl\n        |- *.tf (Terraform \u30bd\u30fc\u30b9\u30b3\u30fc\u30c9)\n<\/code><\/pre>\n<\/div>\n<p data-line=\"523\" class=\"code-line\">\u74b0\u5883\u3054\u3068\u306b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304c\u5206\u304b\u308c\u3066\u3044\u306a\u3044\u305f\u3081\u3001staging\/production \u306e\u5207\u308a\u66ff\u3048\u3092\u3069\u3046\u3084\u3063\u3066\u3044\u308b\u304b\u3068\u3044\u3046\u3068\u3001Terragrunt \u306e <a target=\"_blank\" href=\"https:\/\/terragrunt.gruntwork.io\/docs\/reference\/hcl\/functions\/#run_cmd\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">run_cmd function<\/a> \u3092\u4f7f\u3063\u3066\u30b7\u30a7\u30eb\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u5b9f\u884c\u3057\u3001\u74b0\u5883\u5909\u6570\u3084\u30cf\u30fc\u30c9\u30b3\u30fc\u30c9\u3055\u308c\u305f\u5024\u306a\u3069\u3067\u5b9f\u884c\u5bfe\u8c61\u306e\u74b0\u5883\u3092\u6c7a\u3081\u3066\u3044\u307e\u3057\u305f\u3002<\/p>\n<p data-line=\"525\" class=\"code-line\">\u305d\u306e\u305f\u3081\u3001tfaction \u306e\u8a2d\u5b9a\u3067\u3082 <code>target_groups<\/code> \u306f\u74b0\u5883\u3054\u3068\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u8a18\u8ff0\u305b\u305a\u306b\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3057\u305f\u3002<\/p>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">tfaction-root.yaml<\/span><\/p>\n<pre class=\"language-yaml\"><code class=\"language-yaml code-line\" data-line=\"527\">\n\n<span class=\"token key atrule\">target_groups<\/span><span class=\"token punctuation\">:<\/span>\n<span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">working_directory<\/span><span class=\"token punctuation\">:<\/span> terragrunt\/xxxx\n  <span class=\"token key atrule\">target<\/span><span class=\"token punctuation\">:<\/span> xxxx\n\n<\/code><\/pre>\n<\/div>\n<p data-line=\"536\" class=\"code-line\">\u305d\u3057\u3066\u3001CI \u4e0a\u3067\u306f <code>PREFIX<\/code> \u3068\u3044\u3046\u74b0\u5883\u5909\u6570\u3092\u7528\u3044\u3066 PR \u306e\u30d9\u30fc\u30b9\u30d6\u30e9\u30f3\u30c1\u306b\u5fdc\u3058\u3066\u74b0\u5883\u306e\u5207\u308a\u66ff\u3048\u3092\u884c\u306a\u3063\u3066\u3044\u307e\u3057\u305f\u3002<\/p>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">.github\/workflows\/terragrunt_plan.yml<\/span><\/p>\n<pre class=\"language-yaml\"><code class=\"language-yaml code-line\" data-line=\"538\">\n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> suzuki<span class=\"token punctuation\">-<\/span>shunsuke\/tfaction\/plan@v1.16.1\n      <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">PREFIX<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> github.base_ref == 'master' <span class=\"token important\">&amp;&amp;<\/span> 'production' <span class=\"token punctuation\">|<\/span><span class=\"token punctuation\">|<\/span> github.base_ref == 'staging' <span class=\"token important\">&amp;&amp;<\/span> 'staging' <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n<\/code><\/pre>\n<\/div>\n<p data-line=\"545\" class=\"code-line\">\u3053\u306e\u8a2d\u8a08\u3067\u3082 tfaction \u306e\u52d5\u4f5c\u306f\u554f\u984c\u306a\u3044\u306e\u3067\u3059\u304c\u30011 \u3064\u306e PR \u4e0a\u3067\u8907\u6570\u306e\u74b0\u5883\u306e plan \u3092\u5b9f\u884c\u3057\u3088\u3046\u3068\u3059\u308b\u3068\u3001tfaction \u306e <code>target_groups<\/code> \u304c\u540c\u4e00\u306e\u307e\u307e\u3060\u3068 plan Action \u3067\u306e\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u90e8\u5206 (plan \u7d50\u679c\u3092\u30d5\u30a1\u30a4\u30eb\u3068\u3057\u3066\u51fa\u529b\u3057\u3066\u3044\u308b) \u3067\u540d\u524d\u306e\u7af6\u5408\u304c\u304a\u304d\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30a8\u30e9\u30fc\u304c\u51fa\u3066\u3057\u307e\u3044\u307e\u3057\u305f\u3002<\/p>\n<div class=\"code-block-container\">\n<pre><code class=\"code-line\" data-line=\"547\">Error: Failed to CreateArtifact: Received non-retryable error: Failed request: (409) Conflict: an artifact with this name already exists on the workflow run\n<\/code><\/pre>\n<\/div>\n<p data-line=\"551\" class=\"code-line\">\u305d\u306e\u305f\u3081\u3001Terragrunt \u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u6210\u3092\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u5909\u66f4\u3057\u307e\u3057\u305f\u3002\u3053\u3061\u3089\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u6210\u306e\u65b9\u304c Terraform\/Terragrunt \u306b\u304a\u3044\u3066\u5272\u3068\u4e00\u822c\u7684\u3067\u306f\u306a\u3044\u304b\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n<div class=\"code-block-container\">\n<pre><code class=\"code-line\" data-line=\"553\">- terragrunt\n    |- envs\n    |   |- production\n    |       |- xxxx (\u30b5\u30fc\u30d3\u30b9\/\u30eb\u30fc\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb \u3054\u3068\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea)\n    |           |- terragrunt.hcl (Terragrunt \u30ef\u30fc\u30ad\u30f3\u30b0\u30c7\u30a3\u30ec\u30af\u30c8\u30ea)\n    |   |- staging\n    |       |- xxxx\n    |           |- terragrunt.hcl (Terragrunt \u30ef\u30fc\u30ad\u30f3\u30b0\u30c7\u30a3\u30ec\u30af\u30c8\u30ea)\n    |   |- review\n    |       |- xxxx\n    |           |- terragrunt.hcl (Terragrunt \u30ef\u30fc\u30ad\u30f3\u30b0\u30c7\u30a3\u30ec\u30af\u30c8\u30ea)\n    |- xxxx (\u30b5\u30fc\u30d3\u30b9\/\u30eb\u30fc\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb \u3054\u3068\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea)\n        |- terragrunt.hcl (\u4e92\u63db\u6027\u7dad\u6301\u306e\u305f\u3081\u4e00\u65e6\u6b8b\u3059)\n        |- *.tf (Terraform \u30bd\u30fc\u30b9\u30b3\u30fc\u30c9)\n<\/code><\/pre>\n<\/div>\n<p data-line=\"570\" class=\"code-line\">\u4e00\u5ea6\u306b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u6210\u3092\u5b8c\u5168\u306b\u5207\u308a\u66ff\u3048\u308b\u3068\u958b\u767a\u30c1\u30fc\u30e0\u5185\u3067\u6df7\u4e71\u304c\u8d77\u304d\u305d\u3046\u3060\u3068\u601d\u3044\u3001\u4e00\u5fdc\u5f93\u6765\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u6210\u3067\u3082\u30ed\u30fc\u30ab\u30eb\u304b\u3089 plan \u306a\u3069\u304c\u5b9f\u884c\u3067\u304d\u308b\u3088\u3046\u306b <code>terragrunt.hcl<\/code> \u3092\u6b8b\u3057\u3066\u3042\u308a\u307e\u3059\u3002<br \/>\u305f\u3060\u3057 CI \u4e0a\u3067\u306f\u65b0\u3057\u3044\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u6210\u3092\u524d\u63d0\u3068\u3057\u3066\u52d5\u4f5c\u3059\u308b\u3088\u3046\u306b\u3057\u307e\u3057\u305f\u3002<\/p>\n<p data-line=\"573\" class=\"code-line\">tfaction \u306e\u8a2d\u5b9a\u3082\u74b0\u5883\u3054\u3068\u306b <code>target_groups<\/code> \u306e\u5b9a\u7fa9\u3092\u5206\u3051\u308b\u3088\u3046\u306b\u3057\u307e\u3057\u305f\u3002<\/p>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">tfaction-root.yaml<\/span><\/p>\n<pre class=\"language-yaml\"><code class=\"language-yaml code-line\" data-line=\"575\">\n\n<span class=\"token key atrule\">target_groups<\/span><span class=\"token punctuation\">:<\/span>\n<span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">working_directory<\/span><span class=\"token punctuation\">:<\/span> terragrunt\/envs\/production\/xxxx\n  <span class=\"token key atrule\">target<\/span><span class=\"token punctuation\">:<\/span> production\/xxxx\n<span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">working_directory<\/span><span class=\"token punctuation\">:<\/span> terragrunt\/envs\/staging\/xxxx\n  <span class=\"token key atrule\">target<\/span><span class=\"token punctuation\">:<\/span> staging\/xxxx\n<span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">working_directory<\/span><span class=\"token punctuation\">:<\/span> terragrunt\/envs\/review\/xxxx\n  <span class=\"token key atrule\">target<\/span><span class=\"token punctuation\">:<\/span> review\/xxx\n\n<\/code><\/pre>\n<\/div>\n<p data-line=\"588\" class=\"code-line\">\u306a\u304a\u3001GitHub Actions \u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306e\u5b9f\u88c5\u4f8b\u306f\u672c\u7b4b\u304b\u3089\u5916\u308c\u308b\u305f\u3081\u7701\u7565\u3057\u307e\u3059\u3002<\/p>\n<h3 id=\"4.-test%2C-test-module-action-%E3%81%AE%E5%B0%8E%E5%85%A5\" data-line=\"590\" class=\"code-line\">\n 4. test, test-module Action \u306e\u5c0e\u5165<\/h3>\n<p data-line=\"592\" class=\"code-line\">\u6b21\u306e\u30b9\u30c6\u30c3\u30d7\u3068\u3057\u3066\u3001tfaction \u306e <a target=\"_blank\" href=\"https:\/\/github.com\/suzuki-shunsuke\/tfaction\/blob\/v1.16.1\/test\/action.yaml\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">test<\/a>, <a target=\"_blank\" href=\"https:\/\/github.com\/suzuki-shunsuke\/tfaction\/blob\/v1.16.1\/test-module\/action.yaml\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">test-module<\/a> Action \u3092\u5c0e\u5165\u3057\u307e\u3057\u305f\u3002<\/p>\n<p data-line=\"594\" class=\"code-line\">tfaction \u306e test Aciton \u3084 test-module Action \u3067\u306f\u4ee5\u4e0b\u306e\u3053\u3068\u304c\u884c\u3048\u307e\u3059\u3002<\/p>\n<ul data-line=\"596\" class=\"code-line\">\n<li data-line=\"596\" class=\"code-line\">terraform validate \u306b\u3088\u308b\u30a8\u30e9\u30fc\u691c\u51fa (test Action \u306e\u307f)<\/li>\n<li data-line=\"597\" class=\"code-line\">terraform fmt \u306b\u3088\u308b\u30b3\u30fc\u30c9\u306e\u81ea\u52d5\u4fee\u6b63<\/li>\n<li data-line=\"598\" class=\"code-line\">tflint &#8211;fix \u306b\u3088\u308b\u30b3\u30fc\u30c9\u306e\u81ea\u52d5\u4fee\u6b63<\/li>\n<li data-line=\"599\" class=\"code-line\">terraform-docs \u306b\u3088\u308b\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u751f\u6210<\/li>\n<li data-line=\"600\" class=\"code-line\">\u305d\u306e\u4ed6\u3001tfsec \u3084 trivy \u306e\u5b9f\u884c (\u4eca\u56de\u306f\u4f7f\u3063\u3066\u3044\u306a\u3044)<\/li>\n<\/ul>\n<p data-line=\"602\" class=\"code-line\">\u3053\u308c\u307e\u3067\u3001terraform fmt \u3084 tflint \u306f\u81ea\u524d\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3084 reviewdog \u306a\u3069\u3092\u4f7f\u3063\u3066\u5b9f\u88c5\u3057\u3066\u3044\u307e\u3057\u305f\u304c\u3001tfaction \u306b\u7d71\u5408\u3059\u308b\u3053\u3068\u3067\u3001\u7ba1\u7406\u3059\u308b\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306e\u6570\u3092\u6e1b\u3089\u305b\u308b\u70b9\u3084\u3001CI \u306e\u5b9f\u884c\u6642\u9593\u306a\u3069\u3067\u3044\u304f\u3064\u304b\u30e1\u30ea\u30c3\u30c8\u304c\u3042\u308a\u307e\u3057\u305f\u3002<\/p>\n<p data-line=\"604\" class=\"code-line\">test Acton \u306e\u5c0e\u5165\u306f\u57fa\u672c\u7684\u306b plan \u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306b\u4ee5\u4e0b\u3092\u8ffd\u52a0\u3059\u308b\u3060\u3051\u3067\u3059\u3002\u5f0a\u793e\u306e\u5834\u5408\u306f\u524d\u8ff0\u306e\u901a\u308a aqua \u3092\u4f7f\u3063\u3066\u3044\u306a\u3044\u305f\u3081\u3001tflint \u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3082\u884c\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">.github\/workflows\/terragrunt_plan.yml<\/span><\/p>\n<pre class=\"diff-highlight language-diff-yaml\"><code class=\"diff-highlight language-diff-yaml code-line\" data-line=\"606\">@@ -119,6 +120,10 @@ jobs:\n<span class=\"token inserted-sign inserted language-yaml\"><span class=\"token prefix inserted\">+<\/span>     <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> terraform<span class=\"token punctuation\">-<\/span>linters\/setup<span class=\"token punctuation\">-<\/span>tflint@v4.1.1\n<span class=\"token prefix inserted\">+<\/span>       <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n<span class=\"token prefix inserted\">+<\/span>         <span class=\"token key atrule\">tflint_version<\/span><span class=\"token punctuation\">:<\/span> v0.50.3 \n<\/span>@@ -152,6 +157,41 @@ jobs:\n<span class=\"token inserted-sign inserted language-yaml\"><span class=\"token prefix inserted\">+<\/span>     \n<span class=\"token prefix inserted\">+<\/span>     <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> suzuki<span class=\"token punctuation\">-<\/span>shunsuke\/tfaction\/test@v1.16.1\n<span class=\"token prefix inserted\">+<\/span>       <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n<span class=\"token prefix inserted\">+<\/span>         <span class=\"token key atrule\">TFLINT_CONFIG_FILE<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"${{ github.workspace }}\/.tflint.hcl\"<\/span>\n<span class=\"token prefix inserted\">+<\/span>         <span class=\"token key atrule\">TG_TF_FORWARD_STDOUT<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"true\"<\/span>\n<\/span><\/code><\/pre>\n<\/div>\n<p data-line=\"619\" class=\"code-line\">\u307e\u305f\u3001tfaction \u306e\u8a2d\u5b9a\u306b\u3082\u8ffd\u52a0\u304c\u5fc5\u8981\u3067\u3059\u3002<\/p>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">tfaction-root.yaml<\/span><\/p>\n<pre class=\"diff-highlight language-diff-yaml\"><code class=\"diff-highlight language-diff-yaml code-line\" data-line=\"621\"><span class=\"token inserted-sign inserted language-yaml\"><span class=\"token prefix inserted\">+<\/span> <span class=\"token key atrule\">tflint<\/span><span class=\"token punctuation\">:<\/span>\n<span class=\"token prefix inserted\">+<\/span>   <span class=\"token key atrule\">enabled<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token boolean important\">true<\/span>\n<span class=\"token prefix inserted\">+<\/span>   <span class=\"token key atrule\">fix<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token boolean important\">true<\/span>\n<span class=\"token prefix inserted\">+<\/span>\n<span class=\"token prefix inserted\">+<\/span> \n<span class=\"token prefix inserted\">+<\/span> <span class=\"token key atrule\">trivy<\/span><span class=\"token punctuation\">:<\/span>\n<span class=\"token prefix inserted\">+<\/span>   <span class=\"token key atrule\">enabled<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token boolean important\">false<\/span>\n<\/span><\/code><\/pre>\n<\/div>\n<p data-line=\"631\" class=\"code-line\">test-module Action \u306e\u5c0e\u5165\u306f plan \u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306b\u5225\u306e\u30b8\u30e7\u30d6\u3092\u8ffd\u52a0\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">.github\/workflows\/terragrunt_plan.yml<\/span><\/p>\n<pre class=\"language-yaml\"><code class=\"language-yaml code-line\" data-line=\"633\">\n  \n  <span class=\"token key atrule\">test-module<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"test-module for ${{ matrix.module }}\"<\/span>\n    <span class=\"token key atrule\">runs-on<\/span><span class=\"token punctuation\">:<\/span> ubuntu<span class=\"token punctuation\">-<\/span>latest\n    <span class=\"token key atrule\">needs<\/span><span class=\"token punctuation\">:<\/span> setup\n    \n    \n    <span class=\"token key atrule\">if<\/span><span class=\"token punctuation\">:<\/span> github.event_name == 'pull_request' <span class=\"token important\">&amp;&amp;<\/span> join(fromJSON(needs.setup.outputs.modules)<span class=\"token punctuation\">,<\/span> '') <span class=\"token tag\">!=<\/span> ''\n    <span class=\"token key atrule\">strategy<\/span><span class=\"token punctuation\">:<\/span>\n      <span class=\"token key atrule\">fail-fast<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token boolean important\">false<\/span>\n      <span class=\"token key atrule\">matrix<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">module<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> fromJSON(needs.setup.outputs.modules) <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n    <span class=\"token key atrule\">permissions<\/span><span class=\"token punctuation\">:<\/span>\n      <span class=\"token key atrule\">contents<\/span><span class=\"token punctuation\">:<\/span> write\n      <span class=\"token key atrule\">pull-requests<\/span><span class=\"token punctuation\">:<\/span> write\n      <span class=\"token key atrule\">issues<\/span><span class=\"token punctuation\">:<\/span> write\n    <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n      <span class=\"token key atrule\">TFACTION_TARGET<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> matrix.module <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n      <span class=\"token key atrule\">TFACTION_JOB_TYPE<\/span><span class=\"token punctuation\">:<\/span> terraform\n    <span class=\"token key atrule\">steps<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> actions\/checkout@v4\n    \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> actions\/cache@v4\n      <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">tfaction_version<\/span><span class=\"token punctuation\">:<\/span> v1.16.1 \n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">path<\/span><span class=\"token punctuation\">:<\/span> ~\/.local\/share\/aquaproj<span class=\"token punctuation\">-<\/span>aqua\n        \n        <span class=\"token key atrule\">key<\/span><span class=\"token punctuation\">:<\/span> v2<span class=\"token punctuation\">-<\/span>aqua<span class=\"token punctuation\">-<\/span>installer<span class=\"token punctuation\">-<\/span>$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span>runner.os<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">-<\/span>$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span>runner.arch<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">-<\/span>for<span class=\"token punctuation\">-<\/span>tfaction<span class=\"token punctuation\">-<\/span>$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span>env.tfaction_version<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n        <span class=\"token key atrule\">restore-keys<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">|<\/span><span class=\"token scalar string\">\n          v2-aqua-installer-${{runner.os}}-${{runner.arch}}-<\/span>\n    \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> aquaproj\/aqua<span class=\"token punctuation\">-<\/span>installer@v4.0.2\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">aqua_version<\/span><span class=\"token punctuation\">:<\/span> v2.51.1 \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> Install terragrunt\n      <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> jaxxstorm\/action<span class=\"token punctuation\">-<\/span>install<span class=\"token punctuation\">-<\/span>gh<span class=\"token punctuation\">-<\/span>release@v2.1.0\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">repo<\/span><span class=\"token punctuation\">:<\/span> gruntwork<span class=\"token punctuation\">-<\/span>io\/terragrunt\n        <span class=\"token key atrule\">tag<\/span><span class=\"token punctuation\">:<\/span> v0.81.0 \n        <span class=\"token key atrule\">cache<\/span><span class=\"token punctuation\">:<\/span> enable\n        <span class=\"token key atrule\">rename-to<\/span><span class=\"token punctuation\">:<\/span> terragrunt\n        <span class=\"token key atrule\">chmod<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token number\">0755<\/span>\n        <span class=\"token key atrule\">extension-matching<\/span><span class=\"token punctuation\">:<\/span> disable\n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> hashicorp\/setup<span class=\"token punctuation\">-<\/span>terraform@v3.1.2\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">terraform_version<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"1.12.2\"<\/span> \n        <span class=\"token key atrule\">terraform_wrapper<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token boolean important\">false<\/span> \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> terraform<span class=\"token punctuation\">-<\/span>linters\/setup<span class=\"token punctuation\">-<\/span>tflint@v4.1.1\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">tflint_version<\/span><span class=\"token punctuation\">:<\/span> v0.50.3 \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> suzuki<span class=\"token punctuation\">-<\/span>shunsuke\/tfaction\/install@v1.16.1\n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> .\/.github\/actions\/test<span class=\"token punctuation\">-<\/span>module\n      <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">TFLINT_CONFIG_FILE<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"${{ github.workspace }}\/.tflint.hcl\"<\/span>\n<\/code><\/pre>\n<\/div>\n<p data-line=\"692\" class=\"code-line\">test-module Action \u3067\u30c6\u30b9\u30c8\u3059\u308b\u5bfe\u8c61\u306f Terraform \u306e\u30eb\u30fc\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u4ee5\u5916\u3068\u3044\u3046\u3053\u3068\u306b\u306a\u308a\u307e\u3059\u304c\u3001\u5f0a\u793e\u306e\u5834\u5408\u306f <code>terragrunt\/modules\/<\/code> \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u914d\u4e0b\u306b\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u5b9a\u7fa9\u3057\u3066\u304a\u308a\u3001\u3053\u308c\u3089\u306e\u30ed\u30fc\u30ab\u30eb\u30e2\u30b8\u30e5\u30fc\u30eb\u306f\u7d20\u306e Terraform \u3067\u66f8\u304b\u308c\u3066\u3044\u308b\u305f\u3081 <code>terragrunt.hcl<\/code> \u3092\u914d\u7f6e\u3057\u3066\u304a\u3089\u305a\u3001test-module Action \u3067\u306f terraform \u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<p data-line=\"694\" class=\"code-line\">tfaction \u306e\u8a2d\u5b9a\u3067\u30c8\u30c3\u30d7\u30ec\u30d9\u30eb\u306b <code>terraform_command: terragrunt<\/code> \u3092\u6307\u5b9a\u3057\u3066\u3044\u308b\u3068\u3001test-module Action \u3067 terragrunt \u30b3\u30de\u30f3\u30c9\u304c\u4f7f\u308f\u308c\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u3057\u307e\u3044\u3001<code>terragrunt.hcl<\/code> \u304c\u5b58\u5728\u3057\u306a\u3044\u305f\u3081\u5b9f\u884c\u30a8\u30e9\u30fc\u3068\u306a\u3063\u3066\u3057\u307e\u3044\u307e\u3059\u3002<\/p>\n<p data-line=\"696\" class=\"code-line\">\u305d\u306e\u305f\u3081\u3001<code>terraform_command: terragrunt<\/code> \u3092 <code>target_groups<\/code> \u914d\u4e0b\u306e\u307f\u9069\u7528\u3059\u308b\u3088\u3046\u306b\u5909\u66f4\u3092\u52a0\u3048\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3057\u305f\u3002<\/p>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">tfaction-root.yaml<\/span><\/p>\n<pre class=\"diff-highlight language-diff-yaml\"><code class=\"diff-highlight language-diff-yaml code-line\" data-line=\"698\"><span class=\"token deleted-sign deleted language-yaml\"><span class=\"token prefix deleted\">-<\/span> <span class=\"token key atrule\">terraform_command<\/span><span class=\"token punctuation\">:<\/span> terragrunt\n<\/span><span class=\"token inserted-sign inserted language-yaml\"><span class=\"token prefix inserted\">+<\/span> \n<span class=\"token prefix inserted\">+<\/span> \n<span class=\"token prefix inserted\">+<\/span> \n<span class=\"token prefix inserted\">+<\/span> \n<\/span>\n<span class=\"token unchanged language-yaml\"><span class=\"token prefix unchanged\"> <\/span> <span class=\"token key atrule\">target_groups<\/span><span class=\"token punctuation\">:<\/span>\n<span class=\"token prefix unchanged\"> <\/span> <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">working_directory<\/span><span class=\"token punctuation\">:<\/span> terragrunt\/envs\/production\/xxxx\n<span class=\"token prefix unchanged\"> <\/span>   <span class=\"token key atrule\">target<\/span><span class=\"token punctuation\">:<\/span> production\/xxxx\n<\/span><span class=\"token inserted-sign inserted language-yaml\"><span class=\"token prefix inserted\">+<\/span>   <span class=\"token key atrule\">terraform_command<\/span><span class=\"token punctuation\">:<\/span> terragrunt\n<\/span><span class=\"token unchanged language-yaml\"><span class=\"token prefix unchanged\"> <\/span> <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">working_directory<\/span><span class=\"token punctuation\">:<\/span> terragrunt\/envs\/staging\/xxxx\n<span class=\"token prefix unchanged\"> <\/span>   <span class=\"token key atrule\">target<\/span><span class=\"token punctuation\">:<\/span> staging\/xxxx\n<\/span><span class=\"token inserted-sign inserted language-yaml\"><span class=\"token prefix inserted\">+<\/span>   <span class=\"token key atrule\">terraform_command<\/span><span class=\"token punctuation\">:<\/span> terragrunt\n<\/span><span class=\"token unchanged language-yaml\"><span class=\"token prefix unchanged\"> <\/span> <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">working_directory<\/span><span class=\"token punctuation\">:<\/span> terragrunt\/envs\/review\/xxxx\n<span class=\"token prefix unchanged\"> <\/span>   <span class=\"token key atrule\">target<\/span><span class=\"token punctuation\">:<\/span> review\/xxx\n<\/span><span class=\"token inserted-sign inserted language-yaml\"><span class=\"token prefix inserted\">+<\/span>   <span class=\"token key atrule\">terraform_command<\/span><span class=\"token punctuation\">:<\/span> terragrunt\n<\/span># ...\n<\/code><\/pre>\n<\/div>\n<p data-line=\"718\" class=\"code-line\">\u307e\u305f\u3001test-module Action \u5185\u3067\u306f terraform-docs \u3092\u4f7f\u7528\u3057\u3066\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u81ea\u52d5\u751f\u6210\u30fb\u66f4\u65b0\u3092\u884c\u306a\u3063\u3066\u304f\u308c\u308b\u306e\u3067\u3059\u304c\u3001\u5f0a\u793e\u3067\u306f\u5143\u3005 terraform-docs \u3092\u4f7f\u3063\u3066\u3044\u306a\u304b\u3063\u305f\u305f\u3081\u3001\u3053\u306e\u6642\u70b9\u3067 terraform-docs \u306e\u5c0e\u5165\u307e\u3067\u4e00\u7dd2\u306b\u3084\u3063\u3066\u3057\u307e\u3046\u3068\u8a8d\u77e5\u8ca0\u8377\u304c\u5897\u3048\u3066\u3057\u307e\u3046\u305f\u3081\u3001\u4e00\u6642\u7684\u306b terraform-docs \u306f\u5b9f\u884c\u3057\u306a\u3044\u3088\u3046\u306b\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p data-line=\"720\" class=\"code-line\">tfaction \u5074\u306b\u306f terraform-docs \u3092\u7121\u52b9\u5316\u3059\u308b\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u73fe\u5728\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002<\/p>\n<p data-line=\"722\" class=\"code-line\"><span class=\"embed-block zenn-embedded zenn-embedded-card\"><iframe id=\"zenn-embedded__cb30f3afc9874\" src=\"https:\/\/embed.zenn.studio\/card#zenn-embedded__cb30f3afc9874\" data-content=\"https%3A%2F%2Fgithub.com%2Fsuzuki-shunsuke%2Ftfaction%2Fissues%2F2757\" frameborder=\"0\" scrolling=\"no\" loading=\"lazy\"><\/iframe><\/span><a target=\"_blank\" href=\"https:\/\/github.com\/suzuki-shunsuke\/tfaction\/issues\/2757\" style=\"display:none\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/github.com\/suzuki-shunsuke\/tfaction\/issues\/2757<\/a><\/p>\n<p data-line=\"724\" class=\"code-line\">\u305d\u306e\u305f\u3081\u3001test-module Action \u3092\u30ed\u30fc\u30ab\u30eb\u306e Composite Action \u3068\u3057\u3066\u30b3\u30d4\u30fc\u3057\u3001terraform-docs \u5b9f\u884c\u90e8\u5206\u3060\u3051\u4e00\u90e8\u30b3\u30e1\u30f3\u30c8\u30a2\u30a6\u30c8\u3059\u308b\u3088\u3046\u306a\u5f62\u3092\u53d6\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">.github\/actions\/test-module\/action.yml<\/span><\/p>\n<pre class=\"diff-highlight language-diff-yaml\"><code class=\"diff-highlight language-diff-yaml code-line\" data-line=\"726\"><span class=\"token inserted-sign inserted language-yaml\"><span class=\"token prefix inserted\">+<\/span> MIT License\n<span class=\"token prefix inserted\">+<\/span> \n<span class=\"token prefix inserted\">+<\/span> Copyright (c) 2022 Shunsuke Suzuki\n<span class=\"token prefix inserted\">+<\/span> \n<span class=\"token prefix inserted\">+<\/span> Permission is hereby granted<span class=\"token punctuation\">,<\/span> free of charge<span class=\"token punctuation\">,<\/span> to any person obtaining a copy\n<span class=\"token prefix inserted\">+<\/span> of this software and associated documentation files (the \"Software\")<span class=\"token punctuation\">,<\/span> to deal\n<span class=\"token prefix inserted\">+<\/span> in the Software without restriction<span class=\"token punctuation\">,<\/span> including without limitation the rights\n<span class=\"token prefix inserted\">+<\/span> to use<span class=\"token punctuation\">,<\/span> copy<span class=\"token punctuation\">,<\/span> modify<span class=\"token punctuation\">,<\/span> merge<span class=\"token punctuation\">,<\/span> publish<span class=\"token punctuation\">,<\/span> distribute<span class=\"token punctuation\">,<\/span> sublicense<span class=\"token punctuation\">,<\/span> and\/or sell\n<span class=\"token prefix inserted\">+<\/span> copies of the Software<span class=\"token punctuation\">,<\/span> and to permit persons to whom the Software is\n<span class=\"token prefix inserted\">+<\/span> furnished to do so<span class=\"token punctuation\">,<\/span> <span class=\"token key atrule\">subject to the following conditions<\/span><span class=\"token punctuation\">:<\/span>\n<span class=\"token prefix inserted\">+<\/span> \n<span class=\"token prefix inserted\">+<\/span> The above copyright notice and this permission notice shall be included in all\n<span class=\"token prefix inserted\">+<\/span> copies or substantial portions of the Software.\n<span class=\"token prefix inserted\">+<\/span> \n<span class=\"token prefix inserted\">+<\/span> THE SOFTWARE IS PROVIDED \"AS IS\"<span class=\"token punctuation\">,<\/span> WITHOUT WARRANTY OF ANY KIND<span class=\"token punctuation\">,<\/span> EXPRESS OR\n<span class=\"token prefix inserted\">+<\/span> IMPLIED<span class=\"token punctuation\">,<\/span> INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY<span class=\"token punctuation\">,<\/span>\n<span class=\"token prefix inserted\">+<\/span> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n<span class=\"token prefix inserted\">+<\/span> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM<span class=\"token punctuation\">,<\/span> DAMAGES OR OTHER\n<span class=\"token prefix inserted\">+<\/span> LIABILITY<span class=\"token punctuation\">,<\/span> WHETHER IN AN ACTION OF CONTRACT<span class=\"token punctuation\">,<\/span> TORT OR OTHERWISE<span class=\"token punctuation\">,<\/span> ARISING FROM<span class=\"token punctuation\">,<\/span>\n<span class=\"token prefix inserted\">+<\/span> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n<span class=\"token prefix inserted\">+<\/span> SOFTWARE.\n<span class=\"token prefix inserted\">+<\/span>\n<span class=\"token prefix inserted\">+<\/span> \n<span class=\"token prefix inserted\">+<\/span> \n<span class=\"token prefix inserted\">+<\/span> \n<span class=\"token prefix inserted\">+<\/span> \n<span class=\"token prefix inserted\">+<\/span> \n<span class=\"token prefix inserted\">+<\/span> \n<span class=\"token prefix inserted\">+<\/span>\n<\/span><span class=\"token unchanged language-yaml\"><span class=\"token prefix unchanged\"> <\/span> <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> Test Module\n<span class=\"token prefix unchanged\"> <\/span> <span class=\"token key atrule\">description<\/span><span class=\"token punctuation\">:<\/span> Test Module\n<span class=\"token prefix unchanged\"> <\/span> <span class=\"token key atrule\">inputs<\/span><span class=\"token punctuation\">:<\/span>\n<\/span>@@ -56,10 +63,11 @@ runs:\n<span class=\"token unchanged language-yaml\"><span class=\"token prefix unchanged\"> <\/span>       <span class=\"token key atrule\">shell<\/span><span class=\"token punctuation\">:<\/span> bash\n<span class=\"token prefix unchanged\"> <\/span>       <span class=\"token key atrule\">working-directory<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> env.TFACTION_TARGET <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n<\/span>\n<span class=\"token deleted-sign deleted language-yaml\"><span class=\"token prefix deleted\">-<\/span>     <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> suzuki<span class=\"token punctuation\">-<\/span>shunsuke\/tfaction\/terraform<span class=\"token punctuation\">-<\/span>docs@v1.16.1\n<span class=\"token prefix deleted\">-<\/span>       <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n<span class=\"token prefix deleted\">-<\/span>         <span class=\"token key atrule\">github_token<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> inputs.github_token <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n<span class=\"token prefix deleted\">-<\/span>         <span class=\"token key atrule\">working_directory<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> env.TFACTION_TARGET <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n<\/span><span class=\"token inserted-sign inserted language-yaml\"><span class=\"token prefix inserted\">+<\/span>     \n<span class=\"token prefix inserted\">+<\/span>     \n<span class=\"token prefix inserted\">+<\/span>     \n<span class=\"token prefix inserted\">+<\/span>     \n<span class=\"token prefix inserted\">+<\/span>     \n<\/span><\/code><\/pre>\n<\/div>\n<p data-line=\"774\" class=\"code-line\">terraform-docs \u304c\u5b9f\u884c\u3055\u308c\u308b\u3053\u3068\u81ea\u4f53\u306f\u554f\u984c\u306a\u3044\u305f\u3081\u3001\u4eca\u5f8c\u3053\u306e Composite Action \u5ec3\u6b62\u3057\u3066\u901a\u5e38\u901a\u308a test-module Action \u3092\u4f7f\u3046\u4e88\u5b9a\u3067\u3059\u3002<\/p>\n<h3 id=\"5.-github-actions-%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%82%92-github-app-%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%81%B8%E7%A7%BB%E8%A1%8C\" data-line=\"776\" class=\"code-line\">\n 5. GitHub Actions \u30c8\u30fc\u30af\u30f3\u3092 GitHub App \u30c8\u30fc\u30af\u30f3\u3078\u79fb\u884c<\/h3>\n<p data-line=\"778\" class=\"code-line\">\u6b21\u306e\u30b9\u30c6\u30c3\u30d7\u3068\u3057\u3066\u3001<a target=\"_blank\" href=\"https:\/\/docs.github.com\/ja\/actions\/tutorials\/authenticate-with-github_token\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">GitHub Actions \u306e GITHUB_TOKEN<\/a> (\u3053\u3053\u3067\u306f\u4fbf\u5b9c\u4e0a GitHub Actions \u30c8\u30fc\u30af\u30f3\u3068\u8868\u73fe\u3057\u307e\u3059) \u304b\u3089 <a target=\"_blank\" href=\"https:\/\/docs.github.com\/ja\/apps\/creating-github-apps\/authenticating-with-a-github-app\/generating-an-installation-access-token-for-a-github-app\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">GitHub App \u30c8\u30fc\u30af\u30f3<\/a>\u3078\u79fb\u884c\u3057\u307e\u3057\u305f\u3002<br \/>\u79fb\u884c\u3057\u305f\u4e3b\u306a\u7406\u7531\u3068\u3057\u3066\u306f\u3001Renovate \u306e Terraform Provider \u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u306e PR \u3067\u30aa\u30fc\u30c8\u30de\u30fc\u30b8\u3092\u884c\u3046\u305f\u3081\u3067\u3059\u3002<\/p>\n<p data-line=\"781\" class=\"code-line\">tfaction \u306b\u306f Renovate \u306e PR \u4e0a\u3067 terraform plan \u306e\u5dee\u5206\u304c\u3042\u308b\u3068 CI \u3092\u5931\u6557\u6271\u3044\u306b\u3057\u3066\u304f\u308c\u308b\u6a5f\u80fd\u304c\u3042\u308a\u3001\u3053\u308c\u3092\u4f7f\u3046\u3053\u3068\u3067 Terraform Provider \u306a\u3069\u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3092\u5b89\u5168\u306b\u30aa\u30fc\u30c8\u30de\u30fc\u30b8\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p data-line=\"783\" class=\"code-line\"><span class=\"embed-block zenn-embedded zenn-embedded-card\"><iframe id=\"zenn-embedded__cce42dd82979\" src=\"https:\/\/embed.zenn.studio\/card#zenn-embedded__cce42dd82979\" data-content=\"https%3A%2F%2Fsuzuki-shunsuke.github.io%2Ftfaction%2Fdocs%2Ffeature%2Frenovate\" frameborder=\"0\" scrolling=\"no\" loading=\"lazy\"><\/iframe><\/span><a target=\"_blank\" href=\"https:\/\/suzuki-shunsuke.github.io\/tfaction\/docs\/feature\/renovate\" style=\"display:none\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/suzuki-shunsuke.github.io\/tfaction\/docs\/feature\/renovate<\/a><\/p>\n<p data-line=\"785\" class=\"code-line\">\u3053\u306e\u6a5f\u80fd\u3092\u4f7f\u3063\u3066 Renovate \u306e Terraform Provider \u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u306e PR \u3092\u30aa\u30fc\u30c8\u30de\u30fc\u30b8\u306b\u3057\u305f\u3044\u306e\u3067\u3059\u304c\u3001\u3053\u3053\u3067\u554f\u984c\u306b\u306a\u308b\u306e\u304c\u3001GitHub Actions \u30c8\u30fc\u30af\u30f3\u3068 GitHub Action \u306e\u4ed5\u69d8\u3067\u3059\u3002<\/p>\n<p data-line=\"787\" class=\"code-line\">GitHub Actions \u30c8\u30fc\u30af\u30f3\u3092\u7528\u3044\u3066\u30b3\u30df\u30c3\u30c8\u3057\u305f\u5834\u5408\u306f\u3001\u305d\u306e\u30b3\u30df\u30c3\u30c8\u3067\u6b21\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u304c\u30c8\u30ea\u30ac\u30fc\u3055\u308c\u306a\u3044\u305f\u3081\u3001GitHub App \u30c8\u30fc\u30af\u30f3\u3092\u4f7f\u3046\u3053\u3068\u3067\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u304c\u30c8\u30ea\u30ac\u30fc\u3055\u308c\u308b\u3088\u3046\u306b\u3057\u307e\u3057\u305f\u3002<\/p>\n<p data-line=\"789\" class=\"code-line\">GitHub App \u30c8\u30fc\u30af\u30f3\u306e\u751f\u6210\u306b\u306f <a target=\"_blank\" href=\"https:\/\/github.com\/actions\/create-github-app-token\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">actions\/create-github-app-token<\/a> Action \u3092\u4f7f\u3063\u3066\u3044\u307e\u3059\u3002\u4e00\u822c\u7684\u306a\u4f7f\u3044\u65b9\u3060\u3068\u601d\u3044\u307e\u3059\u306e\u3067\u3001\u8a73\u3057\u3044\u5b9f\u88c5\u306f\u5272\u611b\u3057\u307e\u3059\u3002<\/p>\n<h3 id=\"6.-apply-action-%E3%81%AE%E5%B0%8E%E5%85%A5\" data-line=\"791\" class=\"code-line\">\n 6. apply Action \u306e\u5c0e\u5165<\/h3>\n<p data-line=\"793\" class=\"code-line\">\u6700\u5f8c\u306e\u30b9\u30c6\u30c3\u30d7\u3068\u3057\u3066 tfaction \u306e <a target=\"_blank\" href=\"https:\/\/github.com\/suzuki-shunsuke\/tfaction\/blob\/v1.16.1\/apply\/action.yaml\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">apply<\/a> Action \u3092\u5c0e\u5165\u3057\u307e\u3057\u305f\u3002<br \/>\u3053\u3053\u307e\u3067\u6765\u308c\u3070 tfaction \u3092\u5c0e\u5165\u3057\u305f\u3068\u8a00\u3063\u3066\u826f\u3044\u3067\u3057\u3087\u3046 \ud83d\ude01<\/p>\n<p data-line=\"796\" class=\"code-line\">tfaction \u3067\u306f plan \u6642\u306b terraform plan \u306e <code>-out=tfplan.binary<\/code> \u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u4f7f\u3063\u3066 plan \u7d50\u679c\u3092\u30d5\u30a1\u30a4\u30eb\u51fa\u529b\u3057\u3001\u305d\u308c\u3092 apply \u6642\u306b\u53c2\u7167\u3057\u3066\u304f\u308c\u307e\u3059\u3002(\u7570\u306a\u308b\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u9593\u3067\u3059\u306e\u3067 GitHub Actions \u306e\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8\u3092\u7d4c\u7531\u3057\u307e\u3059)<\/p>\n<p data-line=\"798\" class=\"code-line\">\u3053\u308c\u306b\u3088\u3063\u3066\u3001plan \u306e\u7d50\u679c\u3068\u3057\u3066\u8868\u793a\u3055\u308c\u305f\u5dee\u5206\u3060\u3051\u3092\u9069\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u3001\u5b89\u5168\u306b terraform apply \u306e CI\/CD \u3092\u7d44\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p data-line=\"800\" class=\"code-line\"><span class=\"embed-block zenn-embedded zenn-embedded-card\"><iframe id=\"zenn-embedded__48b00c9ec9a26\" src=\"https:\/\/embed.zenn.studio\/card#zenn-embedded__48b00c9ec9a26\" data-content=\"https%3A%2F%2Fsuzuki-shunsuke.github.io%2Ftfaction%2Fdocs%2Ffeature%2Fplan-file\" frameborder=\"0\" scrolling=\"no\" loading=\"lazy\"><\/iframe><\/span><a target=\"_blank\" href=\"https:\/\/suzuki-shunsuke.github.io\/tfaction\/docs\/feature\/plan-file\" style=\"display:none\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/suzuki-shunsuke.github.io\/tfaction\/docs\/feature\/plan-file<\/a><\/p>\n<p data-line=\"802\" class=\"code-line\">\u307e\u305f\u3001<code>tfplan.binary<\/code> \u3092\u4f7f\u3063\u3066 apply \u3092\u884c\u3046\u3068\u3001\u53e4\u3044 <code>tfplan.binary<\/code> \u3067 apply \u3057\u305f\u6642\u306b\u4ee5\u4e0b\u306e\u30a8\u30e9\u30fc\u304c\u51fa\u307e\u3059\u3002<\/p>\n<div class=\"code-block-container\">\n<pre><code class=\"code-line\" data-line=\"804\">  \u2577\n  \u2502 Error: Saved plan is stale\n  \u2502 \n  \u2502 The given plan file can no longer be applied because the state was changed\n  \u2502 by another operation after the plan was created.\n  \u2575\n<\/code><\/pre>\n<\/div>\n<p data-line=\"813\" class=\"code-line\">\u3053\u306e\u3088\u3046\u306a\u30b1\u30fc\u30b9\u3092\u8003\u616e\u3057\u3066 tfaction \u3067\u306f\u81ea\u52d5\u7684\u306b\u540c\u3058\u30eb\u30fc\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb\u306b\u5909\u66f4\u304c\u3042\u308b PR \u306b\u5bfe\u3057\u3066\u30c7\u30d5\u30a9\u30eb\u30c8\u30d6\u30e9\u30f3\u30c1\u3092\u53d6\u308a\u8fbc\u3093\u3067\u304f\u308c\u308b\u3088\u3046\u306a\u6a5f\u80fd\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<p data-line=\"815\" class=\"code-line\"><span class=\"embed-block zenn-embedded zenn-embedded-card\"><iframe id=\"zenn-embedded__f6e610e564e73\" src=\"https:\/\/embed.zenn.studio\/card#zenn-embedded__f6e610e564e73\" data-content=\"https%3A%2F%2Fsuzuki-shunsuke.github.io%2Ftfaction%2Fdocs%2Ffeature%2Fauto-update-related-prs\" frameborder=\"0\" scrolling=\"no\" loading=\"lazy\"><\/iframe><\/span><a target=\"_blank\" href=\"https:\/\/suzuki-shunsuke.github.io\/tfaction\/docs\/feature\/auto-update-related-prs\" style=\"display:none\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/suzuki-shunsuke.github.io\/tfaction\/docs\/feature\/auto-update-related-prs<\/a><\/p>\n<p data-line=\"817\" class=\"code-line\">\u81ea\u524d\u3067\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u5b9f\u88c5\u3059\u308b\u5834\u5408\u306f\u3053\u3046\u3044\u3063\u305f\u8003\u616e\u304c\u3042\u3063\u3066\u96e3\u3057\u3044\u305f\u3081\u3001tfaction \u3092\u4f7f\u3046\u3053\u3068\u3067\u5b89\u5168\u306a\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u6bd4\u8f03\u7684\u7d44\u307f\u3084\u3059\u3044\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n<p data-line=\"819\" class=\"code-line\">\u3055\u3066\u3001apply Action \u306e\u5c0e\u5165\u3067\u3059\u304c\u3001\u57fa\u672c\u7684\u306b\u306f plan \u3068\u540c\u69d8\u306e\u5b9f\u88c5\u3067\u3001\u9055\u3046\u70b9\u3068\u3057\u3066\u306f <code>env.TFACTION_IS_APPLY: \"true\"<\/code> \u304c\u5fc5\u8981\u306b\u306a\u308b\u306e\u3068\u3001gruntwork-io\/terragrunt-action Action \u3092 suzuki-shunsuke\/tfaction\/apply Action \u306b\u7f6e\u304d\u63db\u3048\u308b\u304f\u3089\u3044\u3067\u3057\u305f\u3002<br \/>\u3042\u3068\u306f GITHUB_TOKEN \u306b <code>actions: read<\/code> \u306e\u6a29\u9650\u304c\u5fc5\u8981\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<div class=\"code-block-container\">\n<pre class=\"language-yaml\"><code class=\"language-yaml code-line\" data-line=\"822\">\n    <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n      <span class=\"token key atrule\">TFACTION_IS_APPLY<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"true\"<\/span>\n      <span class=\"token key atrule\">TFACTION_TARGET<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> matrix.target.target <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n      <span class=\"token key atrule\">TFACTION_JOB_TYPE<\/span><span class=\"token punctuation\">:<\/span> terraform\n    <span class=\"token key atrule\">steps<\/span><span class=\"token punctuation\">:<\/span>\n    \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> actions\/create<span class=\"token punctuation\">-<\/span>github<span class=\"token punctuation\">-<\/span>app<span class=\"token punctuation\">-<\/span>token@v2.0.2\n      <span class=\"token key atrule\">id<\/span><span class=\"token punctuation\">:<\/span> tfaction<span class=\"token punctuation\">-<\/span>app<span class=\"token punctuation\">-<\/span>token\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">app-id<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> vars.INFRA_TFACTION_GITHUB_APP_ID <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n        <span class=\"token key atrule\">private-key<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> secrets.INFRA_TFACTION_GITHUB_APP_PRIVATE_KEY <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n        <span class=\"token key atrule\">permission-actions<\/span><span class=\"token punctuation\">:<\/span> read \n        <span class=\"token key atrule\">permission-issues<\/span><span class=\"token punctuation\">:<\/span> write \n        <span class=\"token key atrule\">permission-pull-requests<\/span><span class=\"token punctuation\">:<\/span> write \n        <span class=\"token key atrule\">permission-contents<\/span><span class=\"token punctuation\">:<\/span> write \n\n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> terragrunt apply\n      <span class=\"token key atrule\">id<\/span><span class=\"token punctuation\">:<\/span> apply\n      <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> suzuki<span class=\"token punctuation\">-<\/span>shunsuke\/tfaction\/apply@v1.16.1\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">github_token<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> steps.tfaction<span class=\"token punctuation\">-<\/span>app<span class=\"token punctuation\">-<\/span>token.outputs.token <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n      <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">TG_TF_FORWARD_STDOUT<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"true\"<\/span>\n        <span class=\"token key atrule\">TG_LOG_LEVEL<\/span><span class=\"token punctuation\">:<\/span> warn \n\n<\/code><\/pre>\n<\/div>\n<p data-line=\"851\" class=\"code-line\">\u305f\u3060\u3001\u5f0a\u793e\u3067\u306f apply \u5b9f\u884c\u5f8c\u306b Slack \u3078\u901a\u77e5\u3057\u3066\u3044\u305f\u305f\u3081\u3001\u305d\u306e\u904b\u7528\u3092\u7dad\u6301\u3059\u308b\u305f\u3081\u306b\u4ee5\u4e0b\u306e\u6539\u4fee\u3082\u884c\u306a\u3063\u3066\u3044\u307e\u3059\u3002\u3082\u3068\u3082\u3068 terragrunt apply \u306e\u6a19\u6e96\u51fa\u529b\u3067 <code>No changes<\/code> \u304b\u3069\u3046\u304b\u3092\u5224\u65ad\u3057\u3066\u901a\u77e5\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u5185\u5bb9\u3092\u66f8\u304d\u5206\u3051\u3066\u3044\u307e\u3057\u305f\u304c\u3001tfaction \u306e apply Action \u3067\u306f\u6a19\u6e96\u51fa\u529b\u304c <code>outputs<\/code> \u7d4c\u7531\u3067\u53d6\u308c\u306a\u3044\u305f\u3081\u3001<code>tfplan.binary<\/code> \u306e\u4e2d\u304b\u3089 <code>.applyable<\/code> \u3092\u53c2\u7167\u3057\u3066 <code>No changes<\/code> \u304b\u3069\u3046\u304b\u3092\u5224\u65ad\u3059\u308b\u3088\u3046\u306b\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">.github\/workflows\/terragrunt_plan.yml<\/span><\/p>\n<pre class=\"language-yaml\"><code class=\"language-yaml code-line\" data-line=\"853\">\n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> create success message\n      <span class=\"token key atrule\">id<\/span><span class=\"token punctuation\">:<\/span> slack_success_message\n      <span class=\"token key atrule\">working-directory<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> matrix.target.working_directory <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n      <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">TFPLAN_FILE_PATH<\/span><span class=\"token punctuation\">:<\/span> tfplan.binary\n      <span class=\"token key atrule\">run<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">|<\/span><span class=\"token scalar string\">\n        ls -al .\/ # to debug\n        TERRAGRUNT_CHANGES=$(terragrunt show -json \"$TFPLAN_FILE_PATH\" | jq '.applyable')<\/span>\n\n        if <span class=\"token punctuation\">[<\/span> \"$TERRAGRUNT_CHANGES\" = 'false' <span class=\"token punctuation\">]<\/span>; then\n          message=$(cat *$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> github.actor <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>* \u306b\u3088\u308b <span class=\"token important\">*$<\/span><span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> github.ref_name <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>* Merge\u306b\u3088\u3063\u3066 <span class=\"token important\">*$<\/span><span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> matrix.target.target <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>* \u3078\u306e terragrunt apply \u306b\u3088\u308b\u5dee\u5206\u306f\u3042\u308a\u307e\u305b\u3093\u3067\u3057\u305f\n        EOS\n          )\n        else\n          message=$(cat *$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> github.actor <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>* \u306b\u3088\u308b <span class=\"token important\">*$<\/span><span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> github.ref_name <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>* Merge\u306b\u3088\u3063\u3066 <span class=\"token important\">*$<\/span><span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> matrix.target.target <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>* \u3078\u306e terragrunt apply \u304c\u5b9f\u884c\u3055\u308c\u307e\u3057\u305f\u3002\n        \u6b63\u5e38\u306b\u5b8c\u4e86\u3057\u307e\u3057\u305f\n        <https class=\"token punctuation\">:\/\/github.com\/$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> github.repository <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\/actions\/runs\/$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> github.run_id <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">|<\/span>Workflow URL<span class=\"token punctuation\">&gt;<\/span>\n        EOS\n          )\n        fi\n\n        <span class=\"token punctuation\">{<\/span>\n          echo 'message} <span class=\"token punctuation\">&gt;<\/span><span class=\"token punctuation\">&gt;<\/span> \"$GITHUB_OUTPUT\"\n\n<\/https><\/code><\/pre>\n<\/div>\n<p data-line=\"886\" class=\"code-line\">\u6700\u7d42\u7684\u306a plan, apply \u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306e\u5b9f\u88c5\u3092\u8f09\u305b\u3066\u304a\u304d\u307e\u3059\u3002<\/p>\n<details>\n<summary>\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u5168\u4f53<\/summary>\n<div class=\"details-content\">\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">.github\/workflows\/terragrunt_plan.yml<\/span><\/p>\n<pre class=\"language-yaml\"><code class=\"language-yaml code-line\" data-line=\"890\"><span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> Terragrunt Plan\n\n<span class=\"token key atrule\">on<\/span><span class=\"token punctuation\">:<\/span>\n  <span class=\"token key atrule\">pull_request<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token key atrule\">branches<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token punctuation\">-<\/span> master\n    <span class=\"token punctuation\">-<\/span> production\n    <span class=\"token key atrule\">paths<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token punctuation\">-<\/span> <span class=\"token string\">\"terragrunt\/**\"<\/span>\n  \n  <span class=\"token key atrule\">push<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token key atrule\">branches<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token punctuation\">-<\/span> master\n    <span class=\"token key atrule\">paths<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token punctuation\">-<\/span> <span class=\"token string\">\"terragrunt\/**\"<\/span>\n\n<span class=\"token key atrule\">jobs<\/span><span class=\"token punctuation\">:<\/span>\n  <span class=\"token key atrule\">setup<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> .\/.github\/workflows\/terragrunt_setup.yml\n    <span class=\"token key atrule\">secrets<\/span><span class=\"token punctuation\">:<\/span> inherit\n    <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n      \n      <span class=\"token key atrule\">target_envs<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">|<\/span><span class=\"token punctuation\">-<\/span>\n        $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span>\n          github.base_ref == 'master' <span class=\"token important\">&amp;&amp;<\/span> 'production staging review' <span class=\"token punctuation\">|<\/span><span class=\"token punctuation\">|<\/span>\n          github.base_ref == 'production' <span class=\"token important\">&amp;&amp;<\/span> 'production' <span class=\"token punctuation\">|<\/span><span class=\"token punctuation\">|<\/span>\n        <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n\n  <span class=\"token key atrule\">terragrunt-plan<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"terragrunt-plan for ${{ matrix.target.target }}\"<\/span>\n    <span class=\"token key atrule\">runs-on<\/span><span class=\"token punctuation\">:<\/span> ubuntu<span class=\"token punctuation\">-<\/span>latest\n    <span class=\"token key atrule\">needs<\/span><span class=\"token punctuation\">:<\/span> setup\n    \n    \n    <span class=\"token key atrule\">if<\/span><span class=\"token punctuation\">:<\/span> github.event_name == 'pull_request' <span class=\"token important\">&amp;&amp;<\/span> join(fromJSON(needs.setup.outputs.targets)<span class=\"token punctuation\">,<\/span> '') <span class=\"token tag\">!=<\/span> ''\n    <span class=\"token key atrule\">strategy<\/span><span class=\"token punctuation\">:<\/span>\n      <span class=\"token key atrule\">fail-fast<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token boolean important\">false<\/span>\n      <span class=\"token key atrule\">matrix<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">target<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> fromJSON(needs.setup.outputs.targets) <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n    <span class=\"token key atrule\">permissions<\/span><span class=\"token punctuation\">:<\/span>\n      <span class=\"token key atrule\">id-token<\/span><span class=\"token punctuation\">:<\/span> write\n      <span class=\"token key atrule\">contents<\/span><span class=\"token punctuation\">:<\/span> read\n    <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n      <span class=\"token key atrule\">TFACTION_TARGET<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> matrix.target.target <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n      <span class=\"token key atrule\">TFACTION_JOB_TYPE<\/span><span class=\"token punctuation\">:<\/span> terraform\n    <span class=\"token key atrule\">steps<\/span><span class=\"token punctuation\">:<\/span>\n    \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> actions\/create<span class=\"token punctuation\">-<\/span>github<span class=\"token punctuation\">-<\/span>app<span class=\"token punctuation\">-<\/span>token@v2.0.2\n      <span class=\"token key atrule\">id<\/span><span class=\"token punctuation\">:<\/span> tfaction<span class=\"token punctuation\">-<\/span>app<span class=\"token punctuation\">-<\/span>token\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">app-id<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> vars.INFRA_TFACTION_GITHUB_APP_ID <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n        <span class=\"token key atrule\">private-key<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> secrets.INFRA_TFACTION_GITHUB_APP_PRIVATE_KEY <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n        <span class=\"token key atrule\">permission-issues<\/span><span class=\"token punctuation\">:<\/span> write \n        <span class=\"token key atrule\">permission-pull-requests<\/span><span class=\"token punctuation\">:<\/span> write \n        <span class=\"token key atrule\">permission-contents<\/span><span class=\"token punctuation\">:<\/span> write \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">id<\/span><span class=\"token punctuation\">:<\/span> export<span class=\"token punctuation\">-<\/span>target\n      <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> Export target service and env from matrix.target.target\n      <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">target<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> matrix.target.target <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n      <span class=\"token key atrule\">run<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">|<\/span><span class=\"token scalar string\">\n        # $target: production\/account\n        # $env: production\n        # $service: account\n        env=$(echo \"$target\" | cut -d \"https:\/\/zenn.dev\/\" -f 1)\n        service=$(echo \"$target\" | cut -d \"https:\/\/zenn.dev\/\" -f 2)<\/span>\n\n        <span class=\"token key atrule\">echo \"env<\/span><span class=\"token punctuation\">:<\/span> $env\"\n        <span class=\"token key atrule\">echo \"service<\/span><span class=\"token punctuation\">:<\/span> $service\"\n\n        echo \"env=$env\" <span class=\"token punctuation\">&gt;<\/span><span class=\"token punctuation\">&gt;<\/span> \"$GITHUB_OUTPUT\"\n        echo \"service=$service\" <span class=\"token punctuation\">&gt;<\/span><span class=\"token punctuation\">&gt;<\/span> \"$GITHUB_OUTPUT\"\n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> actions\/checkout@v4\n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> Configure AWS credentials\n      <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> aws<span class=\"token punctuation\">-<\/span>actions\/configure<span class=\"token punctuation\">-<\/span>aws<span class=\"token punctuation\">-<\/span>credentials@v4.0.2\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">role-to-assume<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> secrets.TERRAGRUNT_AWS_IAM_ROLE_ARN <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n        <span class=\"token key atrule\">aws-region<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> vars.AWS_REGION <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n    \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> actions\/cache@v4\n      <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">tfaction_version<\/span><span class=\"token punctuation\">:<\/span> v1.16.1 \n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">path<\/span><span class=\"token punctuation\">:<\/span> ~\/.local\/share\/aquaproj<span class=\"token punctuation\">-<\/span>aqua\n        \n        <span class=\"token key atrule\">key<\/span><span class=\"token punctuation\">:<\/span> v2<span class=\"token punctuation\">-<\/span>aqua<span class=\"token punctuation\">-<\/span>installer<span class=\"token punctuation\">-<\/span>$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span>runner.os<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">-<\/span>$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span>runner.arch<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">-<\/span>for<span class=\"token punctuation\">-<\/span>tfaction<span class=\"token punctuation\">-<\/span>$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span>env.tfaction_version<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n        <span class=\"token key atrule\">restore-keys<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">|<\/span><span class=\"token scalar string\">\n          v2-aqua-installer-${{runner.os}}-${{runner.arch}}-<\/span>\n    \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> aquaproj\/aqua<span class=\"token punctuation\">-<\/span>installer@v4.0.2\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">aqua_version<\/span><span class=\"token punctuation\">:<\/span> v2.51.1 \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> Install terragrunt\n      <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> jaxxstorm\/action<span class=\"token punctuation\">-<\/span>install<span class=\"token punctuation\">-<\/span>gh<span class=\"token punctuation\">-<\/span>release@v2.1.0\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">repo<\/span><span class=\"token punctuation\">:<\/span> gruntwork<span class=\"token punctuation\">-<\/span>io\/terragrunt\n        <span class=\"token key atrule\">tag<\/span><span class=\"token punctuation\">:<\/span> v0.81.0 \n        <span class=\"token key atrule\">cache<\/span><span class=\"token punctuation\">:<\/span> enable\n        <span class=\"token key atrule\">rename-to<\/span><span class=\"token punctuation\">:<\/span> terragrunt\n        <span class=\"token key atrule\">chmod<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token number\">0755<\/span>\n        <span class=\"token key atrule\">extension-matching<\/span><span class=\"token punctuation\">:<\/span> disable\n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> hashicorp\/setup<span class=\"token punctuation\">-<\/span>terraform@v3.1.2\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">terraform_version<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"1.12.2\"<\/span> \n        <span class=\"token key atrule\">terraform_wrapper<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token boolean important\">false<\/span> \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> terraform<span class=\"token punctuation\">-<\/span>linters\/setup<span class=\"token punctuation\">-<\/span>tflint@v4.1.1\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">tflint_version<\/span><span class=\"token punctuation\">:<\/span> v0.50.3 \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> shmokmt\/actions<span class=\"token punctuation\">-<\/span>setup<span class=\"token punctuation\">-<\/span>github<span class=\"token punctuation\">-<\/span>comment@v2.1.1\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">version<\/span><span class=\"token punctuation\">:<\/span> v6.3.2 \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> Hide old PR comments\n      <span class=\"token key atrule\">run<\/span><span class=\"token punctuation\">:<\/span> github<span class=\"token punctuation\">-<\/span>comment exec <span class=\"token punctuation\">-<\/span>k hide <span class=\"token punctuation\">-<\/span><span class=\"token punctuation\">-<\/span> github<span class=\"token punctuation\">-<\/span>comment hide <span class=\"token punctuation\">-<\/span>k tfcmt\n      <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">GITHUB_TOKEN<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> steps.tfaction<span class=\"token punctuation\">-<\/span>app<span class=\"token punctuation\">-<\/span>token.outputs.token <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n        <span class=\"token key atrule\">GH_COMMENT_VAR_tfaction_target<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> env.TFACTION_TARGET <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n    \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> suzuki<span class=\"token punctuation\">-<\/span>shunsuke\/tfaction\/setup@v1.16.1\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">github_token<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> steps.tfaction<span class=\"token punctuation\">-<\/span>app<span class=\"token punctuation\">-<\/span>token.outputs.token <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n      <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">TG_TF_FORWARD_STDOUT<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"true\"<\/span>\n    \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> suzuki<span class=\"token punctuation\">-<\/span>shunsuke\/tfaction\/test@v1.16.1\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">github_token<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> steps.tfaction<span class=\"token punctuation\">-<\/span>app<span class=\"token punctuation\">-<\/span>token.outputs.token <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n      <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">GITHUB_TOKEN<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> steps.tfaction<span class=\"token punctuation\">-<\/span>app<span class=\"token punctuation\">-<\/span>token.outputs.token <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span> \n        <span class=\"token key atrule\">TFLINT_CONFIG_FILE<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"${{ github.workspace }}\/.tflint.hcl\"<\/span>\n        <span class=\"token key atrule\">TG_TF_FORWARD_STDOUT<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"true\"<\/span>\n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> suzuki<span class=\"token punctuation\">-<\/span>shunsuke\/tfaction\/plan@v1.16.1\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">github_token<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> steps.tfaction<span class=\"token punctuation\">-<\/span>app<span class=\"token punctuation\">-<\/span>token.outputs.token <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n      <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">GITHUB_TOKEN<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> steps.tfaction<span class=\"token punctuation\">-<\/span>app<span class=\"token punctuation\">-<\/span>token.outputs.token <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span> \n        <span class=\"token key atrule\">TG_TF_FORWARD_STDOUT<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"true\"<\/span>\n\n  \n  <span class=\"token key atrule\">test-module<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"test-module for ${{ matrix.module }}\"<\/span>\n    <span class=\"token key atrule\">runs-on<\/span><span class=\"token punctuation\">:<\/span> ubuntu<span class=\"token punctuation\">-<\/span>latest\n    <span class=\"token key atrule\">needs<\/span><span class=\"token punctuation\">:<\/span> setup\n    \n    \n    <span class=\"token key atrule\">if<\/span><span class=\"token punctuation\">:<\/span> github.event_name == 'pull_request' <span class=\"token important\">&amp;&amp;<\/span> join(fromJSON(needs.setup.outputs.modules)<span class=\"token punctuation\">,<\/span> '') <span class=\"token tag\">!=<\/span> ''\n    <span class=\"token key atrule\">strategy<\/span><span class=\"token punctuation\">:<\/span>\n      <span class=\"token key atrule\">fail-fast<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token boolean important\">false<\/span>\n      <span class=\"token key atrule\">matrix<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">module<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> fromJSON(needs.setup.outputs.modules) <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n    <span class=\"token key atrule\">permissions<\/span><span class=\"token punctuation\">:<\/span>\n      <span class=\"token key atrule\">id-token<\/span><span class=\"token punctuation\">:<\/span> write\n      <span class=\"token key atrule\">contents<\/span><span class=\"token punctuation\">:<\/span> read\n    <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n      <span class=\"token key atrule\">TFACTION_TARGET<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> matrix.module <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n      <span class=\"token key atrule\">TFACTION_JOB_TYPE<\/span><span class=\"token punctuation\">:<\/span> terraform\n    <span class=\"token key atrule\">steps<\/span><span class=\"token punctuation\">:<\/span>\n    \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> actions\/create<span class=\"token punctuation\">-<\/span>github<span class=\"token punctuation\">-<\/span>app<span class=\"token punctuation\">-<\/span>token@v2.0.2\n      <span class=\"token key atrule\">id<\/span><span class=\"token punctuation\">:<\/span> tfaction<span class=\"token punctuation\">-<\/span>app<span class=\"token punctuation\">-<\/span>token\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">app-id<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> vars.INFRA_TFACTION_GITHUB_APP_ID <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n        <span class=\"token key atrule\">private-key<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> secrets.INFRA_TFACTION_GITHUB_APP_PRIVATE_KEY <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n        <span class=\"token key atrule\">permission-pull-requests<\/span><span class=\"token punctuation\">:<\/span> write \n        <span class=\"token key atrule\">permission-contents<\/span><span class=\"token punctuation\">:<\/span> write \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> actions\/checkout@v4\n    \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> actions\/cache@v4\n      <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">tfaction_version<\/span><span class=\"token punctuation\">:<\/span> v1.16.1 \n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">path<\/span><span class=\"token punctuation\">:<\/span> ~\/.local\/share\/aquaproj<span class=\"token punctuation\">-<\/span>aqua\n        \n        <span class=\"token key atrule\">key<\/span><span class=\"token punctuation\">:<\/span> v2<span class=\"token punctuation\">-<\/span>aqua<span class=\"token punctuation\">-<\/span>installer<span class=\"token punctuation\">-<\/span>$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span>runner.os<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">-<\/span>$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span>runner.arch<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">-<\/span>for<span class=\"token punctuation\">-<\/span>tfaction<span class=\"token punctuation\">-<\/span>$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span>env.tfaction_version<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n        <span class=\"token key atrule\">restore-keys<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">|<\/span><span class=\"token scalar string\">\n          v2-aqua-installer-${{runner.os}}-${{runner.arch}}-<\/span>\n    \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> aquaproj\/aqua<span class=\"token punctuation\">-<\/span>installer@v4.0.2\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">aqua_version<\/span><span class=\"token punctuation\">:<\/span> v2.51.1 \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> Install terragrunt\n      <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> jaxxstorm\/action<span class=\"token punctuation\">-<\/span>install<span class=\"token punctuation\">-<\/span>gh<span class=\"token punctuation\">-<\/span>release@v2.1.0\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">repo<\/span><span class=\"token punctuation\">:<\/span> gruntwork<span class=\"token punctuation\">-<\/span>io\/terragrunt\n        <span class=\"token key atrule\">tag<\/span><span class=\"token punctuation\">:<\/span> v0.81.0 \n        <span class=\"token key atrule\">cache<\/span><span class=\"token punctuation\">:<\/span> enable\n        <span class=\"token key atrule\">rename-to<\/span><span class=\"token punctuation\">:<\/span> terragrunt\n        <span class=\"token key atrule\">chmod<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token number\">0755<\/span>\n        <span class=\"token key atrule\">extension-matching<\/span><span class=\"token punctuation\">:<\/span> disable\n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> hashicorp\/setup<span class=\"token punctuation\">-<\/span>terraform@v3.1.2\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">terraform_version<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"1.12.2\"<\/span> \n        <span class=\"token key atrule\">terraform_wrapper<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token boolean important\">false<\/span> \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> terraform<span class=\"token punctuation\">-<\/span>linters\/setup<span class=\"token punctuation\">-<\/span>tflint@v4.1.1\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">tflint_version<\/span><span class=\"token punctuation\">:<\/span> v0.50.3 \n    \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> suzuki<span class=\"token punctuation\">-<\/span>shunsuke\/tfaction\/install@v1.16.1\n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> .\/.github\/actions\/test<span class=\"token punctuation\">-<\/span>module\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">github_token<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> steps.tfaction<span class=\"token punctuation\">-<\/span>app<span class=\"token punctuation\">-<\/span>token.outputs.token <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n      <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">TFLINT_CONFIG_FILE<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"${{ github.workspace }}\/.tflint.hcl\"<\/span>\n\n  \n  \n  <span class=\"token key atrule\">terragrunt-plan-status-check<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token key atrule\">runs-on<\/span><span class=\"token punctuation\">:<\/span> ubuntu<span class=\"token punctuation\">-<\/span>latest\n    <span class=\"token key atrule\">needs<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">[<\/span>terragrunt<span class=\"token punctuation\">-<\/span>plan<span class=\"token punctuation\">,<\/span> test<span class=\"token punctuation\">-<\/span>module<span class=\"token punctuation\">]<\/span>\n    <span class=\"token key atrule\">if<\/span><span class=\"token punctuation\">:<\/span> failure()\n    <span class=\"token key atrule\">steps<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">run<\/span><span class=\"token punctuation\">:<\/span> exit 1\n<\/code><\/pre>\n<\/div>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">.github\/workflows\/terragrunt_apply.yml<\/span><\/p>\n<pre class=\"language-yaml\"><code class=\"language-yaml code-line\" data-line=\"1103\"><span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> Terragrunt Apply\n\n<span class=\"token key atrule\">on<\/span><span class=\"token punctuation\">:<\/span>\n  <span class=\"token key atrule\">push<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token key atrule\">branches<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token punctuation\">-<\/span> master\n    <span class=\"token punctuation\">-<\/span> staging\n    <span class=\"token key atrule\">paths<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token punctuation\">-<\/span> <span class=\"token string\">\"terragrunt\/**\"<\/span>\n\n<span class=\"token key atrule\">jobs<\/span><span class=\"token punctuation\">:<\/span>\n  <span class=\"token key atrule\">setup<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> .\/.github\/workflows\/terragrunt_setup.yml\n    <span class=\"token key atrule\">secrets<\/span><span class=\"token punctuation\">:<\/span> inherit\n    <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n      <span class=\"token key atrule\">target_envs<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">|<\/span><span class=\"token punctuation\">-<\/span>\n        $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span>\n          github.ref_name == 'master' <span class=\"token important\">&amp;&amp;<\/span> 'production' <span class=\"token punctuation\">|<\/span><span class=\"token punctuation\">|<\/span>\n          github.ref_name == 'staging' <span class=\"token important\">&amp;&amp;<\/span> 'staging'\n        <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n\n  <span class=\"token key atrule\">terragrunt-apply<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"terragrunt-apply for ${{ matrix.target.target }}\"<\/span>\n    <span class=\"token key atrule\">runs-on<\/span><span class=\"token punctuation\">:<\/span> ubuntu<span class=\"token punctuation\">-<\/span>latest\n    <span class=\"token key atrule\">needs<\/span><span class=\"token punctuation\">:<\/span> setup\n    \n    <span class=\"token key atrule\">if<\/span><span class=\"token punctuation\">:<\/span> join(fromJSON(needs.setup.outputs.targets)<span class=\"token punctuation\">,<\/span> '') <span class=\"token tag\">!=<\/span> ''\n    <span class=\"token key atrule\">strategy<\/span><span class=\"token punctuation\">:<\/span>\n      <span class=\"token key atrule\">fail-fast<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token boolean important\">false<\/span>\n      <span class=\"token key atrule\">matrix<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">target<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> fromJSON(needs.setup.outputs.targets) <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n    <span class=\"token key atrule\">permissions<\/span><span class=\"token punctuation\">:<\/span>\n      <span class=\"token key atrule\">id-token<\/span><span class=\"token punctuation\">:<\/span> write\n      <span class=\"token key atrule\">contents<\/span><span class=\"token punctuation\">:<\/span> read\n    <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n      <span class=\"token key atrule\">TFACTION_IS_APPLY<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"true\"<\/span>\n      <span class=\"token key atrule\">TFACTION_TARGET<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> matrix.target.target <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n      <span class=\"token key atrule\">TFACTION_JOB_TYPE<\/span><span class=\"token punctuation\">:<\/span> terraform\n    <span class=\"token key atrule\">steps<\/span><span class=\"token punctuation\">:<\/span>\n    \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> actions\/create<span class=\"token punctuation\">-<\/span>github<span class=\"token punctuation\">-<\/span>app<span class=\"token punctuation\">-<\/span>token@v2.0.2\n      <span class=\"token key atrule\">id<\/span><span class=\"token punctuation\">:<\/span> tfaction<span class=\"token punctuation\">-<\/span>app<span class=\"token punctuation\">-<\/span>token\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">app-id<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> vars.INFRA_TFACTION_GITHUB_APP_ID <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n        <span class=\"token key atrule\">private-key<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> secrets.INFRA_TFACTION_GITHUB_APP_PRIVATE_KEY <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n        <span class=\"token key atrule\">permission-actions<\/span><span class=\"token punctuation\">:<\/span> read \n        <span class=\"token key atrule\">permission-issues<\/span><span class=\"token punctuation\">:<\/span> write \n        <span class=\"token key atrule\">permission-pull-requests<\/span><span class=\"token punctuation\">:<\/span> write \n        <span class=\"token key atrule\">permission-contents<\/span><span class=\"token punctuation\">:<\/span> write \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">id<\/span><span class=\"token punctuation\">:<\/span> export<span class=\"token punctuation\">-<\/span>target\n      <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> Export target service and env from matrix.target.target\n      <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">target<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> matrix.target.target <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n      <span class=\"token key atrule\">run<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">|<\/span><span class=\"token scalar string\">\n        # $target: production\/account\n        # $env: production\n        # $service: account\n        env=$(echo \"$target\" | cut -d \"https:\/\/zenn.dev\/\" -f 1)\n        service=$(echo \"$target\" | cut -d \"https:\/\/zenn.dev\/\" -f 2)<\/span>\n\n        <span class=\"token key atrule\">echo \"env<\/span><span class=\"token punctuation\">:<\/span> $env\"\n        <span class=\"token key atrule\">echo \"service<\/span><span class=\"token punctuation\">:<\/span> $service\"\n\n        echo \"env=$env\" <span class=\"token punctuation\">&gt;<\/span><span class=\"token punctuation\">&gt;<\/span> \"$GITHUB_OUTPUT\"\n        echo \"service=$service\" <span class=\"token punctuation\">&gt;<\/span><span class=\"token punctuation\">&gt;<\/span> \"$GITHUB_OUTPUT\"\n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> actions\/checkout@v4\n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> Configure AWS credentials\n      <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> aws<span class=\"token punctuation\">-<\/span>actions\/configure<span class=\"token punctuation\">-<\/span>aws<span class=\"token punctuation\">-<\/span>credentials@v4.0.2\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">role-to-assume<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> secrets.TERRAGRUNT_AWS_IAM_ROLE_ARN <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n        <span class=\"token key atrule\">aws-region<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> vars.AWS_REGION <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n    \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> actions\/cache@v4\n      <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">tfaction_version<\/span><span class=\"token punctuation\">:<\/span> v1.16.1 \n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">path<\/span><span class=\"token punctuation\">:<\/span> ~\/.local\/share\/aquaproj<span class=\"token punctuation\">-<\/span>aqua\n        \n        <span class=\"token key atrule\">key<\/span><span class=\"token punctuation\">:<\/span> v2<span class=\"token punctuation\">-<\/span>aqua<span class=\"token punctuation\">-<\/span>installer<span class=\"token punctuation\">-<\/span>$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span>runner.os<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">-<\/span>$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span>runner.arch<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">-<\/span>for<span class=\"token punctuation\">-<\/span>tfaction<span class=\"token punctuation\">-<\/span>$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span>env.tfaction_version<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n        <span class=\"token key atrule\">restore-keys<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">|<\/span><span class=\"token scalar string\">\n          v2-aqua-installer-${{runner.os}}-${{runner.arch}}-<\/span>\n    \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> aquaproj\/aqua<span class=\"token punctuation\">-<\/span>installer@v4.0.2\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">aqua_version<\/span><span class=\"token punctuation\">:<\/span> v2.51.1 \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> Install terragrunt\n      <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> jaxxstorm\/action<span class=\"token punctuation\">-<\/span>install<span class=\"token punctuation\">-<\/span>gh<span class=\"token punctuation\">-<\/span>release@v2.1.0\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">repo<\/span><span class=\"token punctuation\">:<\/span> gruntwork<span class=\"token punctuation\">-<\/span>io\/terragrunt\n        <span class=\"token key atrule\">tag<\/span><span class=\"token punctuation\">:<\/span> v0.81.0 \n        <span class=\"token key atrule\">cache<\/span><span class=\"token punctuation\">:<\/span> enable\n        <span class=\"token key atrule\">rename-to<\/span><span class=\"token punctuation\">:<\/span> terragrunt\n        <span class=\"token key atrule\">chmod<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token number\">0755<\/span>\n        <span class=\"token key atrule\">extension-matching<\/span><span class=\"token punctuation\">:<\/span> disable\n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> hashicorp\/setup<span class=\"token punctuation\">-<\/span>terraform@v3.1.2\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">terraform_version<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"1.12.2\"<\/span> \n        <span class=\"token key atrule\">terraform_wrapper<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token boolean important\">false<\/span> \n    \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> suzuki<span class=\"token punctuation\">-<\/span>shunsuke\/tfaction\/setup@v1.16.1\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">github_token<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> steps.tfaction<span class=\"token punctuation\">-<\/span>app<span class=\"token punctuation\">-<\/span>token.outputs.token <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n      <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">TG_TF_FORWARD_STDOUT<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"true\"<\/span>\n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> terragrunt apply\n      <span class=\"token key atrule\">id<\/span><span class=\"token punctuation\">:<\/span> apply\n      <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> suzuki<span class=\"token punctuation\">-<\/span>shunsuke\/tfaction\/apply@v1.16.1\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">github_token<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> steps.tfaction<span class=\"token punctuation\">-<\/span>app<span class=\"token punctuation\">-<\/span>token.outputs.token <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n      <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">TG_TF_FORWARD_STDOUT<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"true\"<\/span>\n        <span class=\"token key atrule\">TG_LOG_LEVEL<\/span><span class=\"token punctuation\">:<\/span> warn \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> create failure message\n      <span class=\"token key atrule\">if<\/span><span class=\"token punctuation\">:<\/span> failure()\n      <span class=\"token key atrule\">id<\/span><span class=\"token punctuation\">:<\/span> slack_failure_message\n      <span class=\"token key atrule\">run<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">|<\/span><span class=\"token scalar string\">\n        message=$(cat \n        EOS\n        )<\/span>\n\n        <span class=\"token punctuation\">{<\/span>\n          echo 'message} <span class=\"token punctuation\">&gt;<\/span><span class=\"token punctuation\">&gt;<\/span> \"$GITHUB_OUTPUT\"\n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> create success message\n      <span class=\"token key atrule\">id<\/span><span class=\"token punctuation\">:<\/span> slack_success_message\n      <span class=\"token key atrule\">working-directory<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> matrix.target.working_directory <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n      <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">TFPLAN_FILE_PATH<\/span><span class=\"token punctuation\">:<\/span> tfplan.binary\n      <span class=\"token key atrule\">run<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">|<\/span><span class=\"token scalar string\">\n        ls -al .\/ # to debug\n        TERRAGRUNT_CHANGES=$(terragrunt show -json \"$TFPLAN_FILE_PATH\" | jq '.applyable')<\/span>\n\n        if <span class=\"token punctuation\">[<\/span> \"$TERRAGRUNT_CHANGES\" = 'false' <span class=\"token punctuation\">]<\/span>; then\n          message=$(cat *$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> github.actor <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>* \u306b\u3088\u308b <span class=\"token important\">*$<\/span><span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> github.ref_name <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>* Merge\u306b\u3088\u3063\u3066 <span class=\"token important\">*$<\/span><span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> matrix.target.target <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>* \u3078\u306e terragrunt apply \u306b\u3088\u308b\u5dee\u5206\u306f\u3042\u308a\u307e\u305b\u3093\u3067\u3057\u305f\n        EOS\n          )\n        else\n          message=$(cat *$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> github.actor <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>* \u306b\u3088\u308b <span class=\"token important\">*$<\/span><span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> github.ref_name <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>* Merge\u306b\u3088\u3063\u3066 <span class=\"token important\">*$<\/span><span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> matrix.target.target <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>* \u3078\u306e terragrunt apply \u304c\u5b9f\u884c\u3055\u308c\u307e\u3057\u305f\u3002\n        \u6b63\u5e38\u306b\u5b8c\u4e86\u3057\u307e\u3057\u305f\n        <https class=\"token punctuation\">:\/\/github.com\/$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> github.repository <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\/actions\/runs\/$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> github.run_id <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">|<\/span>Workflow URL<span class=\"token punctuation\">&gt;<\/span>\n        EOS\n          )\n        fi\n\n        <span class=\"token punctuation\">{<\/span>\n          echo 'message} <span class=\"token punctuation\">&gt;<\/span><span class=\"token punctuation\">&gt;<\/span> \"$GITHUB_OUTPUT\"\n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> Send Slack notification\n      <span class=\"token key atrule\">if<\/span><span class=\"token punctuation\">:<\/span> always()\n      <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> .\/.github\/actions\/slack_custom_notification\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        \n        <span class=\"token key atrule\">message<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> steps.slack_success_message.outputs.message <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> steps.slack_failure_message.outputs.message <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n        <span class=\"token key atrule\">slack_webhook_url<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> secrets.SLACK_WEBHOOK_URL_DEV_TEAM_INFRA <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n<\/https><\/code><\/pre>\n<\/div>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">.github\/workflows\/terragrunt_setup.yml<\/span><\/p>\n<pre class=\"language-yaml\"><code class=\"language-yaml code-line\" data-line=\"1269\"><span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> Terragrunt Setup\n\n<span class=\"token key atrule\">on<\/span><span class=\"token punctuation\">:<\/span>\n  <span class=\"token key atrule\">workflow_call<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token key atrule\">inputs<\/span><span class=\"token punctuation\">:<\/span>\n      <span class=\"token key atrule\">target_envs<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">required<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token boolean important\">true<\/span>\n        <span class=\"token key atrule\">type<\/span><span class=\"token punctuation\">:<\/span> string\n        <span class=\"token key atrule\">description<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">'plan\/apply \u5bfe\u8c61\u306e env\u3002\u30b9\u30da\u30fc\u30b9\u533a\u5207\u308a\u3067\u8907\u6570\u6307\u5b9a\u53ef\u80fd'<\/span>\n    <span class=\"token key atrule\">outputs<\/span><span class=\"token punctuation\">:<\/span>\n      <span class=\"token key atrule\">targets<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">description<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">'\u5909\u66f4\u304c\u3042\u3063\u305f Terragrunt \u30eb\u30fc\u30c8\u30e2\u30b8\u30e5\u30fc\u30eb'<\/span>\n        <span class=\"token key atrule\">value<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> jobs.setup.outputs.targets <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n      <span class=\"token key atrule\">modules<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">description<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">'\u5909\u66f4\u304c\u3042\u3063\u305f Terragrunt \u5171\u6709\u30e2\u30b8\u30e5\u30fc\u30eb'<\/span>\n        <span class=\"token key atrule\">value<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> jobs.setup.outputs.modules <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n\n<span class=\"token key atrule\">jobs<\/span><span class=\"token punctuation\">:<\/span>\n  <span class=\"token key atrule\">setup<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token key atrule\">runs-on<\/span><span class=\"token punctuation\">:<\/span> ubuntu<span class=\"token punctuation\">-<\/span>latest\n    <span class=\"token key atrule\">outputs<\/span><span class=\"token punctuation\">:<\/span>\n      <span class=\"token key atrule\">targets<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> steps.filtered<span class=\"token punctuation\">-<\/span>targets.outputs.targets <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n      <span class=\"token key atrule\">modules<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> steps.list<span class=\"token punctuation\">-<\/span>targets.outputs.modules <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n    <span class=\"token key atrule\">permissions<\/span><span class=\"token punctuation\">:<\/span>\n      <span class=\"token key atrule\">contents<\/span><span class=\"token punctuation\">:<\/span> read\n      <span class=\"token key atrule\">pull-requests<\/span><span class=\"token punctuation\">:<\/span> write \n    <span class=\"token key atrule\">steps<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> actions\/checkout@v4\n    \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> actions\/cache@v4\n      <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">tfaction_version<\/span><span class=\"token punctuation\">:<\/span> v1.16.1 \n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">path<\/span><span class=\"token punctuation\">:<\/span> ~\/.local\/share\/aquaproj<span class=\"token punctuation\">-<\/span>aqua\n        \n        <span class=\"token key atrule\">key<\/span><span class=\"token punctuation\">:<\/span> v2<span class=\"token punctuation\">-<\/span>aqua<span class=\"token punctuation\">-<\/span>installer<span class=\"token punctuation\">-<\/span>$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span>runner.os<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">-<\/span>$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span>runner.arch<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">-<\/span>for<span class=\"token punctuation\">-<\/span>tfaction<span class=\"token punctuation\">-<\/span>$<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span>env.tfaction_version<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n        <span class=\"token key atrule\">restore-keys<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">|<\/span><span class=\"token scalar string\">\n          v2-aqua-installer-${{runner.os}}-${{runner.arch}}-<\/span>\n    \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> aquaproj\/aqua<span class=\"token punctuation\">-<\/span>installer@v4.0.2\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">aqua_version<\/span><span class=\"token punctuation\">:<\/span> v2.51.1 \n    \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> Install terragrunt\n      <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> jaxxstorm\/action<span class=\"token punctuation\">-<\/span>install<span class=\"token punctuation\">-<\/span>gh<span class=\"token punctuation\">-<\/span>release@v2.1.0\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">repo<\/span><span class=\"token punctuation\">:<\/span> gruntwork<span class=\"token punctuation\">-<\/span>io\/terragrunt\n        <span class=\"token key atrule\">tag<\/span><span class=\"token punctuation\">:<\/span> v0.81.0 \n        <span class=\"token key atrule\">cache<\/span><span class=\"token punctuation\">:<\/span> enable\n        <span class=\"token key atrule\">rename-to<\/span><span class=\"token punctuation\">:<\/span> terragrunt\n        <span class=\"token key atrule\">chmod<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token number\">0755<\/span>\n        <span class=\"token key atrule\">extension-matching<\/span><span class=\"token punctuation\">:<\/span> disable\n    \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> hashicorp\/setup<span class=\"token punctuation\">-<\/span>terraform@v3.1.2\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">terraform_version<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"1.12.2\"<\/span> \n        <span class=\"token key atrule\">terraform_wrapper<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token boolean important\">false<\/span> \n    \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">uses<\/span><span class=\"token punctuation\">:<\/span> suzuki<span class=\"token punctuation\">-<\/span>shunsuke\/tfaction\/list<span class=\"token punctuation\">-<\/span>targets@v1.16.1\n      <span class=\"token key atrule\">id<\/span><span class=\"token punctuation\">:<\/span> list<span class=\"token punctuation\">-<\/span>targets\n      <span class=\"token key atrule\">with<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">github_token<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> github.token <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n    \n    <span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">name<\/span><span class=\"token punctuation\">:<\/span> Exclude all but the target env\n      <span class=\"token key atrule\">id<\/span><span class=\"token punctuation\">:<\/span> filtered<span class=\"token punctuation\">-<\/span>targets\n      <span class=\"token key atrule\">env<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token key atrule\">targets<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> steps.list<span class=\"token punctuation\">-<\/span>targets.outputs.targets <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n        <span class=\"token key atrule\">target_envs<\/span><span class=\"token punctuation\">:<\/span> $<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> inputs.target_envs <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\n      <span class=\"token key atrule\">run<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">|<\/span><span class=\"token scalar string\">\n        outputs=\"[]\"<\/span>\n\n        for target_env in $<span class=\"token punctuation\">{<\/span>target_envs<span class=\"token punctuation\">}<\/span>; do\n          \n          \n          filtered_targets=$(echo \"$targets\" <span class=\"token punctuation\">|<\/span> jq <span class=\"token punctuation\">-<\/span>c \"map(select(\n            (.working_directory <span class=\"token punctuation\">|<\/span> startswith(\\\"terragrunt\/envs\/$target_env\\\"))\n          ))\")\n\n          <span class=\"token key atrule\">echo \"filtered_targets<\/span><span class=\"token punctuation\">:<\/span> $filtered_targets\"\n\n          \n          outputs=$(jq <span class=\"token punctuation\">-<\/span>n <span class=\"token punctuation\">-<\/span>c <span class=\"token punctuation\">-<\/span><span class=\"token punctuation\">-<\/span>argjson a \"$outputs\" <span class=\"token punctuation\">-<\/span><span class=\"token punctuation\">-<\/span>argjson b \"$filtered_targets\" '$a + $b')\n        done\n\n        <span class=\"token key atrule\">echo \"outputs<\/span><span class=\"token punctuation\">:<\/span> $outputs\"\n        echo \"targets=$outputs\" <span class=\"token punctuation\">&gt;<\/span><span class=\"token punctuation\">&gt;<\/span> \"$GITHUB_OUTPUT\"\n<\/code><\/pre>\n<\/div>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">tfaction-root.yaml<\/span><\/p>\n<pre class=\"language-yaml\"><code class=\"language-yaml code-line\" data-line=\"1358\">\n\n\n<span class=\"token key atrule\">plan_workflow_name<\/span><span class=\"token punctuation\">:<\/span> Terragrunt Plan\n\n\n\n<span class=\"token key atrule\">update_local_path_module_caller<\/span><span class=\"token punctuation\">:<\/span>\n  <span class=\"token key atrule\">enabled<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token boolean important\">true<\/span>\n\n\n\n\n\n\n<span class=\"token key atrule\">tflint<\/span><span class=\"token punctuation\">:<\/span>\n  <span class=\"token key atrule\">enabled<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token boolean important\">true<\/span>\n  <span class=\"token key atrule\">fix<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token boolean important\">true<\/span>\n\n\n<span class=\"token key atrule\">trivy<\/span><span class=\"token punctuation\">:<\/span>\n  <span class=\"token key atrule\">enabled<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token boolean important\">false<\/span>\n\n<span class=\"token key atrule\">providers_lock_opts<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">-<\/span>platform=linux_amd64 <span class=\"token punctuation\">-<\/span>platform=linux_arm64 <span class=\"token punctuation\">-<\/span>platform=darwin_arm64\n\n<span class=\"token key atrule\">target_groups<\/span><span class=\"token punctuation\">:<\/span>\n<span class=\"token key atrule\">target_groups<\/span><span class=\"token punctuation\">:<\/span>\n<span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">working_directory<\/span><span class=\"token punctuation\">:<\/span> terragrunt\/envs\/production\/xxxx\n  <span class=\"token key atrule\">target<\/span><span class=\"token punctuation\">:<\/span> production\/xxxx\n  <span class=\"token key atrule\">terraform_command<\/span><span class=\"token punctuation\">:<\/span> terragrunt\n<span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">working_directory<\/span><span class=\"token punctuation\">:<\/span> terragrunt\/envs\/staging\/xxxx\n  <span class=\"token key atrule\">target<\/span><span class=\"token punctuation\">:<\/span> staging\/xxxx\n  <span class=\"token key atrule\">terraform_command<\/span><span class=\"token punctuation\">:<\/span> terragrunt\n<span class=\"token punctuation\">-<\/span> <span class=\"token key atrule\">working_directory<\/span><span class=\"token punctuation\">:<\/span> terragrunt\/envs\/review\/xxxx\n  <span class=\"token key atrule\">target<\/span><span class=\"token punctuation\">:<\/span> review\/xxx\n  <span class=\"token key atrule\">terraform_command<\/span><span class=\"token punctuation\">:<\/span> terragrunt\n\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/details>\n<h2 id=\"%E4%BB%8A%E5%BE%8C%E3%81%AE%E6%96%B9%E9%87%9D\" data-line=\"1400\" class=\"code-line\">\n \u4eca\u5f8c\u306e\u65b9\u91dd<\/h2>\n<p data-line=\"1402\" class=\"code-line\">\u4eca\u56de\u5c0e\u5165\u3057\u305f Action \u4ee5\u5916\u306b\u3082\u3001tfaction \u306b\u306f\u69d8\u3005\u306a\u6a5f\u80fd\u304c\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<ul data-line=\"1404\" class=\"code-line\">\n<li data-line=\"1404\" class=\"code-line\">\u30c9\u30ea\u30d5\u30c8\u691c\u51fa<\/li>\n<li data-line=\"1405\" class=\"code-line\">apply \u5931\u6557\u6642\u306e\u30d5\u30a9\u30ed\u30fc\u30a2\u30c3\u30d7 PR \u306e\u81ea\u52d5\u4f5c\u6210<\/li>\n<li data-line=\"1406\" class=\"code-line\">\u30ef\u30fc\u30ad\u30f3\u30b0\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3001\u30e2\u30b8\u30e5\u30fc\u30eb\u306a\u3069\u306e scaffold<\/li>\n<li data-line=\"1407\" class=\"code-line\">Conftest \u30b5\u30dd\u30fc\u30c8<\/li>\n<li data-line=\"1408\" class=\"code-line\">tfsec, trivy \u306e\u5b9f\u884c<\/li>\n<li data-line=\"1409\" class=\"code-line\">terraform-docs \u306e\u5b9f\u884c<\/li>\n<\/ul>\n<p data-line=\"1411\" class=\"code-line\">\u4eca\u56de\u7d39\u4ecb\u3057\u305f\u3088\u3046\u306b\u3001tfaction \u306f\u6bb5\u968e\u7684\u30fb\u90e8\u5206\u7684\u306a\u5c0e\u5165\u304c\u3067\u304d\u308b\u305f\u3081\u3001\u3053\u308c\u3089\u3059\u3079\u3066\u306e\u6a5f\u80fd\u3092\u4f7f\u3046\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u304c\u3001\u793e\u5185\u306e\u9700\u8981\u306b\u5fdc\u3058\u3066\u5c0e\u5165\u3092\u9032\u3081\u3066\u3044\u3051\u308c\u3070\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n<p data-line=\"1413\" class=\"code-line\">\u7279\u306b\u30c9\u30ea\u30d5\u30c8\u691c\u51fa\u306f Terraform \u306e CI\/CD \u3092\u7d44\u3080\u4e0a\u3067\u306e\u30ea\u30b9\u30af\u3092\u6e1b\u3089\u305b\u308b\u305f\u3081\u3001\u7a4d\u6975\u7684\u306b\u5c0e\u5165\u3057\u305f\u3044\u3068\u8003\u3048\u3066\u3044\u307e\u3059\u3002<\/p>\n<h2 id=\"%E3%81%BE%E3%81%A8%E3%82%81\" data-line=\"1415\" class=\"code-line\">\n \u307e\u3068\u3081<\/h2>\n<p data-line=\"1417\" class=\"code-line\">\u4eca\u56de\u793e\u5185\u306e\u8ab2\u984c\u3092\u89e3\u6c7a\u3059\u308b\u306e\u306b tfaction \u304c\u30d4\u30c3\u30bf\u30ea\u30cf\u30de\u308a\u307e\u3057\u305f\u3002<\/p>\n<p data-line=\"1419\" class=\"code-line\">Terraform \u306e CI\/CD \u3067\u304a\u56f0\u308a\u306e\u65b9\u306f\u90e8\u5206\u7684\u306b\u3067\u3082 tfaction \u3092\u5c0e\u5165\u3057\u3066\u307f\u308b\u3068\u3001\u8ab2\u984c\u306b\u5bfe\u3057\u3066\u5fc5\u8981\u6700\u5c0f\u9650\u306e\u5b9f\u88c5\u30fb\u52b4\u529b\u3067\u6e08\u3080\u305f\u3081\u3001\u975e\u5e38\u306b\u304a\u3059\u3059\u3081\u3067\u3059\u3002<\/p>\n<p data-line=\"1421\" class=\"code-line\">tfaction \u306e\u826f\u3044\u3068\u3053\u308d\u306f\u5c0f\u3055\u304f\u5c0e\u5165\u3067\u304d\u308b\u3068\u3053\u308d\u3060\u3068\u601d\u3063\u3066\u3044\u307e\u3059\u3002\u4ed6\u306e Terraform CI\/CD \u30c4\u30fc\u30eb\u3060\u3068\u5272\u3068\u7d44\u307f\u8fbc\u3080\u306e\u304c\u5927\u639b\u304b\u308a\u306b\u306a\u3063\u305f\u308a\u3001\u65e2\u5b58\u306e\u958b\u767a\u30d5\u30ed\u30fc\u3092\u5927\u304d\u304f\u5909\u3048\u308b\u5fc5\u8981\u304c\u3042\u308b\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n<\/div>\n\n<br \/><a href=\"https:\/\/zenn.dev\/socialplus\/articles\/769cab32c22e58\">\u5143\u306e\u8a18\u4e8b\u3092\u78ba\u8a8d\u3059\u308b <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\u3053\u3093\u306b\u3061\u306f\u3001tsub \u3067\u3059\u30022023 \u5e74 11 \u6708\u304b\u3089\u80b2\u4f11\u3092\u53d6\u5f97\u3057\u3066\u3044\u3066\u4eca\u5e74\u306e 5 \u6708\u306b\u5fa9\u8077\u3057\u307e\u3057\u305f\u3002\u4eca\u56de\u304c Social PLUS Tech Blog \u3078\u306e\u521d\u6295\u7a3f\u3068\u306a\u308a\u307e\u3059 \ud83d\ude04 \u3053\u306e\u6570\u30f6\u6708\u9593\u3001\u5f90\u3005\u306b tfaction  [&hellip;]","protected":false},"author":1,"featured_media":5306,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[4],"tags":[],"class_list":["post-5305","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-company-tec"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>tfaction \u3092\u6bb5\u968e\u7684\u306b\u5c0e\u5165\u3057\u305f - \u30dd\u30b1\u30b3\u30f3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/zenn.dev\/socialplus\/articles\/769cab32c22e58\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"tfaction \u3092\u6bb5\u968e\u7684\u306b\u5c0e\u5165\u3057\u305f - \u30dd\u30b1\u30b3\u30f3\" \/>\n<meta property=\"og:description\" content=\"\u3053\u3093\u306b\u3061\u306f\u3001tsub \u3067\u3059\u30022023 \u5e74 11 \u6708\u304b\u3089\u80b2\u4f11\u3092\u53d6\u5f97\u3057\u3066\u3044\u3066\u4eca\u5e74\u306e 5 \u6708\u306b\u5fa9\u8077\u3057\u307e\u3057\u305f\u3002\u4eca\u56de\u304c Social PLUS Tech Blog \u3078\u306e\u521d\u6295\u7a3f\u3068\u306a\u308a\u307e\u3059 \ud83d\ude04 \u3053\u306e\u6570\u30f6\u6708\u9593\u3001\u5f90\u3005\u306b tfaction [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/zenn.dev\/socialplus\/articles\/769cab32c22e58\" \/>\n<meta property=\"og:site_name\" content=\"\u30dd\u30b1\u30b3\u30f3\" \/>\n<meta property=\"article:published_time\" content=\"2025-09-12T16:55:24+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/09\/1757696124_og-base-w1200-v2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"info@pokecon.jp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u57f7\u7b46\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"info@pokecon.jp\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"19\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/zenn.dev\\\/socialplus\\\/articles\\\/769cab32c22e58#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/5305\\\/\"},\"author\":{\"name\":\"info@pokecon.jp\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\"},\"headline\":\"tfaction \u3092\u6bb5\u968e\u7684\u306b\u5c0e\u5165\u3057\u305f\",\"datePublished\":\"2025-09-12T16:55:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/5305\\\/\"},\"wordCount\":518,\"image\":{\"@id\":\"https:\\\/\\\/zenn.dev\\\/socialplus\\\/articles\\\/769cab32c22e58#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/1757696124_og-base-w1200-v2.png\",\"articleSection\":[\"\u4f01\u696d\u30c6\u30c3\u30af\"],\"inLanguage\":\"ja\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/5305\\\/\",\"url\":\"https:\\\/\\\/zenn.dev\\\/socialplus\\\/articles\\\/769cab32c22e58\",\"name\":\"tfaction \u3092\u6bb5\u968e\u7684\u306b\u5c0e\u5165\u3057\u305f - \u30dd\u30b1\u30b3\u30f3\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/zenn.dev\\\/socialplus\\\/articles\\\/769cab32c22e58#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/zenn.dev\\\/socialplus\\\/articles\\\/769cab32c22e58#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/1757696124_og-base-w1200-v2.png\",\"datePublished\":\"2025-09-12T16:55:24+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/zenn.dev\\\/socialplus\\\/articles\\\/769cab32c22e58#breadcrumb\"},\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/zenn.dev\\\/socialplus\\\/articles\\\/769cab32c22e58\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/zenn.dev\\\/socialplus\\\/articles\\\/769cab32c22e58#primaryimage\",\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/1757696124_og-base-w1200-v2.png\",\"contentUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/1757696124_og-base-w1200-v2.png\",\"width\":1200,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/zenn.dev\\\/socialplus\\\/articles\\\/769cab32c22e58#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u30db\u30fc\u30e0\",\"item\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"tfaction \u3092\u6bb5\u968e\u7684\u306b\u5c0e\u5165\u3057\u305f\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#website\",\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/\",\"name\":\"\u30dd\u30b1\u30b3\u30f3\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ja\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\",\"name\":\"info@pokecon.jp\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"caption\":\"info@pokecon.jp\"},\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/author\\\/infopokecon-jp\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"tfaction \u3092\u6bb5\u968e\u7684\u306b\u5c0e\u5165\u3057\u305f - \u30dd\u30b1\u30b3\u30f3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/zenn.dev\/socialplus\/articles\/769cab32c22e58","og_locale":"ja_JP","og_type":"article","og_title":"tfaction \u3092\u6bb5\u968e\u7684\u306b\u5c0e\u5165\u3057\u305f - \u30dd\u30b1\u30b3\u30f3","og_description":"\u3053\u3093\u306b\u3061\u306f\u3001tsub \u3067\u3059\u30022023 \u5e74 11 \u6708\u304b\u3089\u80b2\u4f11\u3092\u53d6\u5f97\u3057\u3066\u3044\u3066\u4eca\u5e74\u306e 5 \u6708\u306b\u5fa9\u8077\u3057\u307e\u3057\u305f\u3002\u4eca\u56de\u304c Social PLUS Tech Blog \u3078\u306e\u521d\u6295\u7a3f\u3068\u306a\u308a\u307e\u3059 \ud83d\ude04 \u3053\u306e\u6570\u30f6\u6708\u9593\u3001\u5f90\u3005\u306b tfaction [&hellip;]","og_url":"https:\/\/zenn.dev\/socialplus\/articles\/769cab32c22e58","og_site_name":"\u30dd\u30b1\u30b3\u30f3","article_published_time":"2025-09-12T16:55:24+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/09\/1757696124_og-base-w1200-v2.png","type":"image\/png"}],"author":"info@pokecon.jp","twitter_card":"summary_large_image","twitter_misc":{"\u57f7\u7b46\u8005":"info@pokecon.jp","\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593":"19\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/zenn.dev\/socialplus\/articles\/769cab32c22e58#article","isPartOf":{"@id":"https:\/\/pokecon.jp\/job\/5305\/"},"author":{"name":"info@pokecon.jp","@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997"},"headline":"tfaction \u3092\u6bb5\u968e\u7684\u306b\u5c0e\u5165\u3057\u305f","datePublished":"2025-09-12T16:55:24+00:00","mainEntityOfPage":{"@id":"https:\/\/pokecon.jp\/job\/5305\/"},"wordCount":518,"image":{"@id":"https:\/\/zenn.dev\/socialplus\/articles\/769cab32c22e58#primaryimage"},"thumbnailUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/09\/1757696124_og-base-w1200-v2.png","articleSection":["\u4f01\u696d\u30c6\u30c3\u30af"],"inLanguage":"ja"},{"@type":"WebPage","@id":"https:\/\/pokecon.jp\/job\/5305\/","url":"https:\/\/zenn.dev\/socialplus\/articles\/769cab32c22e58","name":"tfaction \u3092\u6bb5\u968e\u7684\u306b\u5c0e\u5165\u3057\u305f - \u30dd\u30b1\u30b3\u30f3","isPartOf":{"@id":"https:\/\/pokecon.jp\/job\/#website"},"primaryImageOfPage":{"@id":"https:\/\/zenn.dev\/socialplus\/articles\/769cab32c22e58#primaryimage"},"image":{"@id":"https:\/\/zenn.dev\/socialplus\/articles\/769cab32c22e58#primaryimage"},"thumbnailUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/09\/1757696124_og-base-w1200-v2.png","datePublished":"2025-09-12T16:55:24+00:00","author":{"@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997"},"breadcrumb":{"@id":"https:\/\/zenn.dev\/socialplus\/articles\/769cab32c22e58#breadcrumb"},"inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/zenn.dev\/socialplus\/articles\/769cab32c22e58"]}]},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/zenn.dev\/socialplus\/articles\/769cab32c22e58#primaryimage","url":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/09\/1757696124_og-base-w1200-v2.png","contentUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/09\/1757696124_og-base-w1200-v2.png","width":1200,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/zenn.dev\/socialplus\/articles\/769cab32c22e58#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u30db\u30fc\u30e0","item":"https:\/\/pokecon.jp\/job\/"},{"@type":"ListItem","position":2,"name":"tfaction \u3092\u6bb5\u968e\u7684\u306b\u5c0e\u5165\u3057\u305f"}]},{"@type":"WebSite","@id":"https:\/\/pokecon.jp\/job\/#website","url":"https:\/\/pokecon.jp\/job\/","name":"\u30dd\u30b1\u30b3\u30f3","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/pokecon.jp\/job\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ja"},{"@type":"Person","@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997","name":"info@pokecon.jp","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","caption":"info@pokecon.jp"},"url":"https:\/\/pokecon.jp\/job\/author\/infopokecon-jp\/"}]}},"_links":{"self":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/5305","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/comments?post=5305"}],"version-history":[{"count":1,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/5305\/revisions"}],"predecessor-version":[{"id":5307,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/5305\/revisions\/5307"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/media\/5306"}],"wp:attachment":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/media?parent=5305"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/categories?post=5305"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/tags?post=5305"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}