{"componentChunkName":"component---src-templates-post-template-js","path":"/posts/aws-app-runner-with-cloud-native-buildpacks","result":{"data":{"markdownRemark":{"id":"cc685378-9006-5523-bf95-922e4cd9459a","html":"<p>先日 AWS に App Runner という新サービスがリリースされました。</p>\n<p>Fargate をさらに抽象化したようなサービスで、使い勝手は Heroku のような PaaS に近いです。</p>\n<p>そんな App Runner ですが、</p>\n<ul>\n<li>ECR と連携して、別途自作したコンテナイメージを使用</li>\n<li>GitHub と連携して、自動でコンテナイメージを作成して使用</li>\n</ul>\n<p>という 2 パターンの使い方があります。</p>\n<p>後者の GitHub と連携して自動でコンテナイメージを作成してくれるパターンについては、現状では Node.js と Python しかサポートされていません。</p>\n<p>Dockerfile を書かなくてもコンテナイメージが自動で作成されてデプロイされるというのはかなり楽なので、他の言語でも似たようなことをしてみたいです。</p>\n<p>そこで、コンテナイメージの作成を自動でやってくれる <a href=\"https://buildpacks.io/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Cloud Native Buildpacks</a> と GitHub Actions を使って、Dockerfile を書かずに App Runner で Ruby のアプリケーションを起動してみようと思います。</p>\n<p>※ サンプルとして Ruby を使いますが、他の言語でも同様のことができるはずです。</p>\n<h2 id=\"つまり\" style=\"position:relative;\"><a href=\"#%E3%81%A4%E3%81%BE%E3%82%8A\" aria-label=\"つまり permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>つまり…</h2>\n<p>やりたいことを簡単に整理すると、</p>\n<ul>\n<li>GitHub Actions で Cloud Native Buildpacks を使ってイメージをビルドし、ECR に push</li>\n<li>ECR と連携した App Runner に自動でデプロイされる</li>\n</ul>\n<p>というイメージです。</p>\n<h2 id=\"セットアップ\" style=\"position:relative;\"><a href=\"#%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97\" aria-label=\"セットアップ permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>セットアップ</h2>\n<p>では、セットアップしていきます。</p>\n<p>手順は 6 ステップあるので多く見えますが、1 つ 1 つは簡単です。</p>\n<h3 id=\"1-サンプルアプリケーションの実装\" style=\"position:relative;\"><a href=\"#1-%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E5%AE%9F%E8%A3%85\" aria-label=\"1 サンプルアプリケーションの実装 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1. サンプルアプリケーションの実装</h3>\n<p>Ruby のサンプルということで、今回は簡単に用意できる Sinatra を使うことにしました。</p>\n<p>GitHub にリポジトリを作成し、</p>\n<ul>\n<li>Gemfile</li>\n<li>app.rb</li>\n<li>config.ru</li>\n</ul>\n<p>の 3 ファイルを以下のように作成します。</p>\n<p>Gemfile</p>\n<div class=\"gatsby-highlight\" data-language=\"ruby\"><pre class=\"language-ruby\"><code class=\"language-ruby\"><span class=\"token comment\"># frozen_string_literal: true</span>\n\nsource <span class=\"token string\">\"https://rubygems.org\"</span>\n\ngit_source<span class=\"token punctuation\">(</span><span class=\"token symbol\">:github</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span><span class=\"token operator\">|</span>repo_name<span class=\"token operator\">|</span> <span class=\"token string\">\"https://github.com/<span class=\"token interpolation\"><span class=\"token delimiter tag\">#{</span>repo_name<span class=\"token delimiter tag\">}</span></span>\"</span> <span class=\"token punctuation\">}</span>\n\ngem <span class=\"token string\">\"sinatra\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"~> 2.1\"</span></code></pre></div>\n<p>app.rb</p>\n<div class=\"gatsby-highlight\" data-language=\"ruby\"><pre class=\"language-ruby\"><code class=\"language-ruby\"><span class=\"token keyword\">require</span> <span class=\"token string\">'sinatra'</span>\n\nget <span class=\"token string\">'/'</span> <span class=\"token keyword\">do</span>\n  <span class=\"token string\">'Hello world!'</span>\n<span class=\"token keyword\">end</span></code></pre></div>\n<p>config.ru</p>\n<div class=\"gatsby-highlight\" data-language=\"ruby\"><pre class=\"language-ruby\"><code class=\"language-ruby\"><span class=\"token keyword\">require</span> <span class=\"token string\">'./app'</span>\nrun <span class=\"token constant\">Sinatra</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token constant\">Application</span></code></pre></div>\n<p>コードは以下からも確認できます。</p>\n<ul>\n<li><a href=\"https://github.com/os1ma/aws-app-runner-with-cloud-native-buildpacks\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">os1ma/aws-app-runner-with-cloud-native-buildpacks</a></li>\n</ul>\n<p>このコードが動くかローカルで動作確認したい場合は、Cloud Native Buildpacks の pack コマンドと Docker をインストールして、以下のようなコマンドを実行します。</p>\n<div class=\"gatsby-highlight\" data-language=\"console\"><pre class=\"language-console\"><code class=\"language-console\">$ pack build myapp --builder paketobuildpacks/builder:base\n$ docker run --rm -e PORT=8000 -p 8000:8000 myapp</code></pre></div>\n<h3 id=\"2-ecr-リポジトリの作成\" style=\"position:relative;\"><a href=\"#2-ecr-%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%81%AE%E4%BD%9C%E6%88%90\" aria-label=\"2 ecr リポジトリの作成 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2. ECR リポジトリの作成</h3>\n<p>次に、AWS にログインし、ECR のリポジトリを作成します。</p>\n<p>ECR のリポジトリ名は、GitHub のリポジトリ名と同じにしました。</p>\n<h3 id=\"3-iam-ユーザの作成\" style=\"position:relative;\"><a href=\"#3-iam-%E3%83%A6%E3%83%BC%E3%82%B6%E3%81%AE%E4%BD%9C%E6%88%90\" aria-label=\"3 iam ユーザの作成 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3. IAM ユーザの作成</h3>\n<p>GitHub Actions から ECR に push するには、IAM ユーザのアクセスキー・シックレットアクセスキーを使う必要があります。</p>\n<p>※ もしアクセスキー・シークレットアクセスキーを使いたくない場合は、GitHub Actions ではなく AWS CodeBuild を使いましょう。</p>\n<p>専用の IAM ユーザを作成し、ECR にイメージを push するための権限を与えます。</p>\n<div class=\"gatsby-highlight\" data-language=\"json\"><pre class=\"language-json\"><code class=\"language-json\"><span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"Version\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"2012-10-17\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"Statement\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n        <span class=\"token punctuation\">{</span>\n            <span class=\"token property\">\"Sid\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"GetAuthorizationToken\"</span><span class=\"token punctuation\">,</span>\n            <span class=\"token property\">\"Effect\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"Allow\"</span><span class=\"token punctuation\">,</span>\n            <span class=\"token property\">\"Action\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n                <span class=\"token string\">\"ecr:GetAuthorizationToken\"</span>\n            <span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n            <span class=\"token property\">\"Resource\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"*\"</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n        <span class=\"token punctuation\">{</span>\n            <span class=\"token property\">\"Sid\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"AllowPush\"</span><span class=\"token punctuation\">,</span>\n            <span class=\"token property\">\"Effect\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"Allow\"</span><span class=\"token punctuation\">,</span>\n            <span class=\"token property\">\"Action\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n                <span class=\"token string\">\"ecr:BatchCheckLayerAvailability\"</span><span class=\"token punctuation\">,</span>\n                <span class=\"token string\">\"ecr:PutImage\"</span><span class=\"token punctuation\">,</span>\n                <span class=\"token string\">\"ecr:InitiateLayerUpload\"</span><span class=\"token punctuation\">,</span>\n                <span class=\"token string\">\"ecr:UploadLayerPart\"</span><span class=\"token punctuation\">,</span>\n                <span class=\"token string\">\"ecr:CompleteLayerUpload\"</span>\n            <span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n            <span class=\"token property\">\"Resource\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"arn:aws:ecr:ap-northeast-1:{AWSアカウントID}:repository/{リポジトリ名}\"</span>\n        <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">]</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>※ {AWSアカウントID} と {リポジトリ名} は読み替えが必要です。</p>\n<h3 id=\"4-iam-ユーザのアクセスキー・シークレットアクセスキーを-github-に設定\" style=\"position:relative;\"><a href=\"#4-iam-%E3%83%A6%E3%83%BC%E3%82%B6%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%82%AD%E3%83%BC%E3%83%BB%E3%82%B7%E3%83%BC%E3%82%AF%E3%83%AC%E3%83%83%E3%83%88%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%82%AD%E3%83%BC%E3%82%92-github-%E3%81%AB%E8%A8%AD%E5%AE%9A\" aria-label=\"4 iam ユーザのアクセスキー・シークレットアクセスキーを github に設定 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4. IAM ユーザのアクセスキー・シークレットアクセスキーを GitHub に設定</h3>\n<p>上記の IAM ユーザのアクセスキー・シークレットアクセスキーを払い出したら、GitHub のリポジトリの設定画面から、「Settings」>「Secrets」と進み、</p>\n<ul>\n<li><code class=\"language-text\">AWS_ACCESS_KEY_ID</code></li>\n<li><code class=\"language-text\">AWS_SECRET_ACCESS_KEY</code></li>\n</ul>\n<p>という名前でそれぞれ登録します。</p>\n<h3 id=\"5-github-actions-のワークフロー設定\" style=\"position:relative;\"><a href=\"#5-github-actions-%E3%81%AE%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%95%E3%83%AD%E3%83%BC%E8%A8%AD%E5%AE%9A\" aria-label=\"5 github actions のワークフロー設定 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5. GitHub Actions のワークフロー設定</h3>\n<p>以下の内容で、.github/workflows/main.yaml というファイルを作成します。</p>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> main\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> main\n\n<span class=\"token key atrule\">jobs</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">build</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\">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@v2\n\n    <span class=\"token punctuation\">-</span> <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@v1\n      <span class=\"token key atrule\">with</span><span class=\"token punctuation\">:</span>\n        <span class=\"token key atrule\">aws-access-key-id</span><span class=\"token punctuation\">:</span> $<span class=\"token punctuation\">{</span><span class=\"token punctuation\">{</span> secrets.AWS_ACCESS_KEY_ID <span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span>\n        <span class=\"token key atrule\">aws-secret-access-key</span><span class=\"token punctuation\">:</span> $<span class=\"token punctuation\">{</span><span class=\"token punctuation\">{</span> secrets.AWS_SECRET_ACCESS_KEY <span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span>\n        <span class=\"token key atrule\">aws-region</span><span class=\"token punctuation\">:</span> ap<span class=\"token punctuation\">-</span>northeast<span class=\"token punctuation\">-</span><span class=\"token number\">1</span>\n\n    <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">uses</span><span class=\"token punctuation\">:</span> aws<span class=\"token punctuation\">-</span>actions/amazon<span class=\"token punctuation\">-</span>ecr<span class=\"token punctuation\">-</span>login@v1\n      <span class=\"token key atrule\">id</span><span class=\"token punctuation\">:</span> login<span class=\"token punctuation\">-</span>ecr\n\n    <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">uses</span><span class=\"token punctuation\">:</span> asdf<span class=\"token punctuation\">-</span>vm/actions/setup@v1\n\n    <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">run</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">|</span><span class=\"token scalar string\">\n        asdf plugin-add buildpack\n        asdf install\n        pack build $ECR_REGISTRY/$ECR_REPOSITORY:latest --builder paketobuildpacks/builder:base\n        docker push $ECR_REGISTRY/$ECR_REPOSITORY:latest</span>\n      <span class=\"token key atrule\">env</span><span class=\"token punctuation\">:</span>\n        <span class=\"token key atrule\">ECR_REGISTRY</span><span class=\"token punctuation\">:</span> $<span class=\"token punctuation\">{</span><span class=\"token punctuation\">{</span> steps.login<span class=\"token punctuation\">-</span>ecr.outputs.registry <span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span>\n        <span class=\"token key atrule\">ECR_REPOSITORY</span><span class=\"token punctuation\">:</span> $<span class=\"token punctuation\">{</span><span class=\"token punctuation\">{</span> github.repository <span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span></code></pre></div>\n<p>ここでは pack コマンドのインストールに <a href=\"https://asdf-vm.com/#/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">asdf</a> を使っていますが、<a href=\"https://github.com/buildpacks/github-actions\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Cloud Native Buildpacks 側が提供しているアクション</a> で pack コマンドをインストールしてもいいと思います。</p>\n<p>この YAML ファイルを GitHub に push すれば、GitHub Actions が動き出し、ECR にイメージが push されます。</p>\n<h3 id=\"6-app-runner-でサービスの作成\" style=\"position:relative;\"><a href=\"#6-app-runner-%E3%81%A7%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AE%E4%BD%9C%E6%88%90\" aria-label=\"6 app runner でサービスの作成 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>6. App Runner でサービスの作成</h3>\n<p>あとは App Runner でサービスを作成するだけです。</p>\n<p>マネジメントコンソールから作成する場合は、雰囲気でぽちぽちすればいけます。</p>\n<p>ちなみに、ポート番号はなんでも大丈夫です。\n(App Runner はポート番号を PORT という環境変数でコンテナに渡してくれて、かつ、Ruby のコンテナ側は PORT という環境変数を使うようになっているため)</p>\n<p>起動を待てば、問題なくアクセスできます。</p>\n<div class=\"gatsby-highlight\" data-language=\"console\"><pre class=\"language-console\"><code class=\"language-console\">$ curl https://&lt;ドメイン&gt;\nHello world!</code></pre></div>\n<h2 id=\"まとめ\" style=\"position:relative;\"><a href=\"#%E3%81%BE%E3%81%A8%E3%82%81\" aria-label=\"まとめ permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>まとめ</h2>\n<p>Cloud Native Buildpacks と GitHub Actions を使って、Dockerfile を書かずに App Runner で Ruby のアプリケーションを起動することができました。</p>\n<p>App Runner のロードマップには Ruby のサポートや、Cloud Native Buildpacks のサポートも挙げられています。</p>\n<ul>\n<li><a href=\"https://github.com/aws/apprunner-roadmap/issues/27\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Ruby support · Issue #27 · aws/apprunner-roadmap</a></li>\n<li><a href=\"https://github.com/aws/apprunner-roadmap/issues/11\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Buildpack support · Issue #11 · aws/apprunner-roadmap</a></li>\n</ul>\n<p>ゆくゆくは、自前で GitHub Actions や Cloud Native Buildpacks を使う必要はなくなるかもしれません。</p>","fields":{"slug":"/posts/aws-app-runner-with-cloud-native-buildpacks","tagSlugs":["/tag/aws/","/tag/container/"],"autoRecommendPosts":["getting-started-with-aws-app-runner","udemy-aws-container","udemy-cicd-with-github-actions","ci-services"]},"frontmatter":{"date":"2021-05-21T14:02:38.204Z","description":"先日 AWS に App Runner という新サービスがリリースされました。\nコンテナイメージの作成を自動でやってくれる Cloud Native Buildpacks と GitHub Actions を使って、Dockerfile を書かずに App Runner で Ruby のアプリケーションを起動してみようと思います。","tags":["aws","container"],"title":"AWS App Runner が Ruby のソースコード連携に対応してなくて面倒？そんなときは Cloud Native Buildpacks","socialImage":null,"recommendPosts":["https://www.kanzennirikaisita.com/posts/getting-started-with-aws-app-runner","https://www.kanzennirikaisita.com/posts/4839975868","https://www.kanzennirikaisita.com/posts/how-to-study-aws-basics","https://www.kanzennirikaisita.com/posts/software-developer-books-index"]}}},"pageContext":{"slug":"/posts/aws-app-runner-with-cloud-native-buildpacks"}},"staticQueryHashes":["251939775","3942705351","401334301"]}