<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ktor アーカイブ - Sheltie Garage Tech</title>
	<atom:link href="https://sheltie-garage.xyz/tech/category/kotlin/ktor/feed/" rel="self" type="application/rss+xml" />
	<link>https://sheltie-garage.xyz/tech/category/kotlin/ktor/</link>
	<description>テクノロジー関連の話題をまとめたブログです</description>
	<lastBuildDate>Sun, 25 Sep 2022 05:01:53 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>Kotlin Ktorで作成したWebアプリをAWS App Runnerで動かしたい</title>
		<link>https://sheltie-garage.xyz/tech/2022/09/kotlin-ktor%e3%81%a7%e4%bd%9c%e6%88%90%e3%81%97%e3%81%9fweb%e3%82%a2%e3%83%97%e3%83%aa%e3%82%92aws-app-runner%e3%81%a7%e5%8b%95%e3%81%8b%e3%81%97%e3%81%9f%e3%81%84/</link>
					<comments>https://sheltie-garage.xyz/tech/2022/09/kotlin-ktor%e3%81%a7%e4%bd%9c%e6%88%90%e3%81%97%e3%81%9fweb%e3%82%a2%e3%83%97%e3%83%aa%e3%82%92aws-app-runner%e3%81%a7%e5%8b%95%e3%81%8b%e3%81%97%e3%81%9f%e3%81%84/#respond</comments>
		
		<dc:creator><![CDATA[monodon]]></dc:creator>
		<pubDate>Sun, 25 Sep 2022 05:01:50 +0000</pubDate>
				<category><![CDATA[kotlin]]></category>
		<category><![CDATA[Ktor]]></category>
		<category><![CDATA[インフラ]]></category>
		<guid isPermaLink="false">https://sheltie-garage.xyz/tech/?p=373</guid>

					<description><![CDATA[<p>先日「Kotlin Korで作成したWebアプリをAWS Fargateで動かしたい」という記事を投稿しました「これで自分も今どきのつよつよエンジニアだわｗ」とか思っていたのですが、なんか、時代はすでに「え、まだfarg [&#8230;]</p>
<p>投稿 <a href="https://sheltie-garage.xyz/tech/2022/09/kotlin-ktor%e3%81%a7%e4%bd%9c%e6%88%90%e3%81%97%e3%81%9fweb%e3%82%a2%e3%83%97%e3%83%aa%e3%82%92aws-app-runner%e3%81%a7%e5%8b%95%e3%81%8b%e3%81%97%e3%81%9f%e3%81%84/">Kotlin Ktorで作成したWebアプリをAWS App Runnerで動かしたい</a> は <a href="https://sheltie-garage.xyz/tech">Sheltie Garage Tech</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<p>先日「<a href="https://sheltie-garage.xyz/tech/wp-admin/post.php?post=323&amp;action=edit">Kotlin Korで作成したWebアプリをAWS Fargateで動かしたい</a>」という記事を投稿しました<br>「これで自分も今どきのつよつよエンジニアだわｗ」とか思っていたのですが、なんか、時代はすでに「え、まだfargateとか使ってるんすかw やばいっすねwww」みたいな流れになっている(脳内妄想)ので、よりイケてるエンジニアになるためにApp Runnerで自作アプリを動かします</p>



<h2 class="wp-block-heading">AWS App Runnerとは</h2>



<p>ざっくり理解で「AWSのベストプラクティスに基づいてネットワーク等の設定が行われているコンテナ実行環境であり、ユーザーはアプリケーションの開発に集中できる」という理解です。<br>詳細は公式ページを御覧ください（丸投げ）<br><a href="https://us-east-1.console.aws.amazon.com/apprunner/home?region=us-east-1#/welcome" target="_blank" rel="noreferrer noopener">https://us-east-1.console.aws.amazon.com/apprunner/home?region=us-east-1#/welcome</a></p>



<h2 class="wp-block-heading">早速使ってみる</h2>



<p>早速使ってみます</p>



<h3 class="wp-block-heading">App Runnerの作成</h3>



<p>ページ右側のApp Runnerサービスを作成をクリック</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="471" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_001-1024x471.png" alt="" class="wp-image-374" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_001-1024x471.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_001-300x138.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_001-768x353.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_001-1536x706.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_001-2048x941.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>次のページは以下のように設定<br>前回、せっかくECRを利用したので、リポジトリタイプはコンテナレジストリを選択、デプロイは手動を選択しました</p>



<figure class="wp-block-image size-large"><img decoding="async" width="978" height="1024" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_002-978x1024.png" alt="" class="wp-image-377" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_002-978x1024.png 978w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_002-287x300.png 287w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_002-768x804.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_002-1467x1536.png 1467w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_002.png 1662w" sizes="(max-width: 978px) 100vw, 978px" /></figure>



<p>次のページではサービス名だけ設定し、ほかはデフォルトとしました</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="751" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_003-1024x751.png" alt="" class="wp-image-376" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_003-1024x751.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_003-300x220.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_003-768x564.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_003-1536x1127.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_003.png 1630w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>設定が完了すると、自動で初回のデプロイが実行されます</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="543" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_004-1024x543.png" alt="" class="wp-image-378" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_004-1024x543.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_004-300x159.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_004-768x407.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_004-1536x814.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_004-2048x1085.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">アクセスしてみる</h3>



<p>暫く待つとデプロイが完了するため、提示されているデフォルトドメインにアクセスしてみます</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="271" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_005-1024x271.png" alt="" class="wp-image-379" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_005-1024x271.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_005-300x80.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_005-768x204.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_005-1536x407.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_005-2048x543.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>下記の通り、あっさりと動きました</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="854" height="222" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_006.png" alt="" class="wp-image-380" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_006.png 854w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_006-300x78.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_006-768x200.png 768w" sizes="auto, (max-width: 854px) 100vw, 854px" /></figure>



<h2 class="wp-block-heading">更新してみる</h2>



<p>現在のWebアプリはHello Worldという文字列を表示するプログラムになっていますが、文字列を変更して「Hello App Runner!」を返却するプログラムに修正してみます</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="493" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_007-1024x493.png" alt="" class="wp-image-381" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_007-1024x493.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_007-300x144.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_007-768x370.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_007.png 1034w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>上記のようにプログラムを修正後、改めてDocker Imageを作成し、ECRにプッシュしました</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="323" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_008-1024x323.png" alt="" class="wp-image-383" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_008-1024x323.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_008-300x95.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_008-768x242.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_008-1536x484.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_008-2048x645.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>デプロイは手動にしているため、App Runnerの管理画面からデプロイを実行します</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="246" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_009-1024x246.png" alt="" class="wp-image-384" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_009-1024x246.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_009-300x72.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_009-768x184.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_009-1536x369.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_009-2048x491.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>デプロイ完了後、再度デフォルトドメインにアクセスします</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="860" height="228" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_010.png" alt="" class="wp-image-385" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_010.png 860w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_010-300x80.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220925_010-768x204.png 768w" sizes="auto, (max-width: 860px) 100vw, 860px" /></figure>



<p>あっさりとデプロイできました</p>



<h2 class="wp-block-heading">以上</h2>



<p>AWS App Runnerを使ってみたというお話でした<br>Fargateと比較してより少ない手順でアプリを公開することができました<br>せっかくFargateを覚えたところですが、App Runnerのほうがかなり楽な印象を受けたので<br>なにかアプリを公開するときはApp Runnerを利用してみたいと思います</p>


<div id="rinkerid386" class="yyi-rinker-contents  yyi-rinker-postid-386 yyi-rinker-img-m yyi-rinker-catid-7 yyi-rinker-catid-9 yyi-rinker-catid-6 ">
	<div class="yyi-rinker-box">
		<div class="yyi-rinker-image">
							<a href="https://af.moshimo.com/af/c/click?a_id=3394378&#038;p_id=54&#038;pc_id=54&#038;pl_id=616&#038;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FAWS%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow"><img loading="lazy" decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/9061/9784815609061_1_3.jpg?_ex=128x128" width="128" height="128" class="yyi-rinker-main-img" style="border: none;"></a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">					</div>
		<div class="yyi-rinker-info">
			<div class="yyi-rinker-title">
									<a href="https://af.moshimo.com/af/c/click?a_id=3394378&#038;p_id=54&#038;pc_id=54&#038;pl_id=616&#038;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FAWS%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow">AWS認定資格試験テキスト＆問題集　AWS認定ソリューションアーキテクト &#8211; プロフェッショナル [ 山下光洋 ]</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">							</div>
			<div class="yyi-rinker-detail">
							<div class="credit-box">created by&nbsp;<a href="https://oyakosodate.com/rinker/" rel="nofollow noopener" target="_blank" >Rinker</a></div>
										<div class="price-box">
							<span title="" class="price">¥3,080</span>
															<span class="price_at">(2026/04/07 01:40:36時点&nbsp;楽天市場調べ-</span><span title="このサイトで掲載されている情報は当サイトの作成者により運営されています。価格、販売可能情報は、変更される場合があります。購入時に楽天市場店舗（www.rakuten.co.jp）に表示されている価格がその商品の販売に適用されます。">詳細)</span>
																	</div>
						</div>
						<ul class="yyi-rinker-links">
																                    <li class="amazonlink">
						<a href="https://www.amazon.co.jp/gp/search?ie=UTF8&amp;keywords=AWS&amp;tag=monodon-22&amp;index=blended&amp;linkCode=ure&amp;creative=6339" rel="nofollow" class="yyi-rinker-link">Amazon</a>					</li>
													<li class="rakutenlink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616&amp;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FAWS%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow" class="yyi-rinker-link">楽天市場</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">					</li>
													<li class="yahoolink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502&amp;url=https%3A%2F%2Fshopping.yahoo.co.jp%2Fsearch%3Fp%3DAWS" rel="nofollow" class="yyi-rinker-link">Yahooショッピング</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502" width="1" height="1" style="border:none;">					</li>
				                											</ul>
					</div>
	</div>
</div>


<div id="rinkerid387" class="yyi-rinker-contents  yyi-rinker-postid-387 yyi-rinker-img-m yyi-rinker-catid-7 yyi-rinker-catid-9 yyi-rinker-catid-6 ">
	<div class="yyi-rinker-box">
		<div class="yyi-rinker-image">
							<a href="https://af.moshimo.com/af/c/click?a_id=3394378&#038;p_id=54&#038;pc_id=54&#038;pl_id=616&#038;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FAWS%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow"><img loading="lazy" decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/7654/9784815607654_1_3.jpg?_ex=128x128" width="128" height="128" class="yyi-rinker-main-img" style="border: none;"></a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">					</div>
		<div class="yyi-rinker-info">
			<div class="yyi-rinker-title">
									<a href="https://af.moshimo.com/af/c/click?a_id=3394378&#038;p_id=54&#038;pc_id=54&#038;pl_id=616&#038;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FAWS%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow">AWSコンテナ設計・構築[本格]入門 [ 佐々木拓郎 ]</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">							</div>
			<div class="yyi-rinker-detail">
							<div class="credit-box">created by&nbsp;<a href="https://oyakosodate.com/rinker/" rel="nofollow noopener" target="_blank" >Rinker</a></div>
										<div class="price-box">
							<span title="" class="price">¥3,300</span>
															<span class="price_at">(2026/04/07 01:40:36時点&nbsp;楽天市場調べ-</span><span title="このサイトで掲載されている情報は当サイトの作成者により運営されています。価格、販売可能情報は、変更される場合があります。購入時に楽天市場店舗（www.rakuten.co.jp）に表示されている価格がその商品の販売に適用されます。">詳細)</span>
																	</div>
						</div>
						<ul class="yyi-rinker-links">
																                    <li class="amazonlink">
						<a href="https://www.amazon.co.jp/gp/search?ie=UTF8&amp;keywords=AWS&amp;tag=monodon-22&amp;index=blended&amp;linkCode=ure&amp;creative=6339" rel="nofollow" class="yyi-rinker-link">Amazon</a>					</li>
													<li class="rakutenlink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616&amp;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FAWS%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow" class="yyi-rinker-link">楽天市場</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">					</li>
													<li class="yahoolink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502&amp;url=https%3A%2F%2Fshopping.yahoo.co.jp%2Fsearch%3Fp%3DAWS" rel="nofollow" class="yyi-rinker-link">Yahooショッピング</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502" width="1" height="1" style="border:none;">					</li>
				                											</ul>
					</div>
	</div>
</div>
<p>投稿 <a href="https://sheltie-garage.xyz/tech/2022/09/kotlin-ktor%e3%81%a7%e4%bd%9c%e6%88%90%e3%81%97%e3%81%9fweb%e3%82%a2%e3%83%97%e3%83%aa%e3%82%92aws-app-runner%e3%81%a7%e5%8b%95%e3%81%8b%e3%81%97%e3%81%9f%e3%81%84/">Kotlin Ktorで作成したWebアプリをAWS App Runnerで動かしたい</a> は <a href="https://sheltie-garage.xyz/tech">Sheltie Garage Tech</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sheltie-garage.xyz/tech/2022/09/kotlin-ktor%e3%81%a7%e4%bd%9c%e6%88%90%e3%81%97%e3%81%9fweb%e3%82%a2%e3%83%97%e3%83%aa%e3%82%92aws-app-runner%e3%81%a7%e5%8b%95%e3%81%8b%e3%81%97%e3%81%9f%e3%81%84/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Kotlin Korで作成したWebアプリをAWS Fargateで動かしたい</title>
		<link>https://sheltie-garage.xyz/tech/2022/09/kotlin-kor%e3%81%a7%e4%bd%9c%e6%88%90%e3%81%97%e3%81%9fweb%e3%82%a2%e3%83%97%e3%83%aa%e3%82%92aws-fargate%e3%81%a7%e5%8b%95%e3%81%8b%e3%81%97%e3%81%9f%e3%81%84/</link>
					<comments>https://sheltie-garage.xyz/tech/2022/09/kotlin-kor%e3%81%a7%e4%bd%9c%e6%88%90%e3%81%97%e3%81%9fweb%e3%82%a2%e3%83%97%e3%83%aa%e3%82%92aws-fargate%e3%81%a7%e5%8b%95%e3%81%8b%e3%81%97%e3%81%9f%e3%81%84/#respond</comments>
		
		<dc:creator><![CDATA[monodon]]></dc:creator>
		<pubDate>Fri, 23 Sep 2022 10:28:35 +0000</pubDate>
				<category><![CDATA[kotlin]]></category>
		<category><![CDATA[Ktor]]></category>
		<category><![CDATA[インフラ]]></category>
		<guid isPermaLink="false">https://sheltie-garage.xyz/tech/?p=323</guid>

					<description><![CDATA[<p>今まで勤めていた会社ではAWSやGCP等の「今どきな」クラウドを全く触る機会がなかったため、この辺りの知識がかなり遅れています・・・未だにサーバを建てるといえば、VPS契約してyumでhttpサーバやmakeコマンドでM [&#8230;]</p>
<p>投稿 <a href="https://sheltie-garage.xyz/tech/2022/09/kotlin-kor%e3%81%a7%e4%bd%9c%e6%88%90%e3%81%97%e3%81%9fweb%e3%82%a2%e3%83%97%e3%83%aa%e3%82%92aws-fargate%e3%81%a7%e5%8b%95%e3%81%8b%e3%81%97%e3%81%9f%e3%81%84/">Kotlin Korで作成したWebアプリをAWS Fargateで動かしたい</a> は <a href="https://sheltie-garage.xyz/tech">Sheltie Garage Tech</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<p>今まで勤めていた会社ではAWSやGCP等の「今どきな」クラウドを全く触る機会がなかったため、この辺りの知識がかなり遅れています・・・<br>未だにサーバを建てるといえば、VPS契約してyumでhttpサーバやmakeコマンドでMySQLをインストールするとか、そんな次元の人間です。</p>



<p>転職先の会社ではAWSを利用しており、面談でも「新しい技術使っていいよ、コンテナとかサーバーレスとか」みたいな話が出たので、まずは簡単なWebアプリをAWS Fargateで動かすことを目標に作業を行ってみました。</p>



<p>これはAWS未経験の中年エンジニアが奮闘した記録である(要するに参考にできるような記事ではない)</p>



<h2 class="wp-block-heading">環境について</h2>



<p>以下の環境で実施しています<br>・Intel Mac 2019<br>・Dockerインストール済み<br>・IDEはIntellij Idea</p>



<p>また、aws cliをインストールしておく必要があります<br><a href="https://aws.amazon.com/jp/cli/" target="_blank" rel="noreferrer noopener">https://aws.amazon.com/jp/cli/</a></p>



<h2 class="wp-block-heading">まずはKtorでWebアプリを作成する</h2>



<p>といっても、Ktor Project Generatorでサンプルコード込みで作成してしまえばよいだけです・・・<br><a href="https://start.ktor.io/">https://start.ktor.io/</a></p>



<p>上記のサイトでスタートアッププロジェクトがZip形式でダウンロードできるので、適当な場所にダウンロードします。</p>



<h2 class="wp-block-heading">Intellij Ideaで開く</h2>



<p>Zipを展開した後、Intellij Ideaで開きます。自動でGradleの更新が動いて、いろいろなライブラリのダウンロードが開始されます。<br>ライブラリダウンロード後、とりあえず起動して動作を確認します</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="581" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_001-1024x581.png" alt="" class="wp-image-324" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_001-1024x581.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_001-300x170.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_001-768x436.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_001-1536x872.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_001-2048x1162.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>起動後、ブラウザで「http://0.0.0.0:8080」にアクセスれば、Hello woldが表示されるはずです</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="792" height="236" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_002.png" alt="" class="wp-image-325" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_002.png 792w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_002-300x89.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_002-768x229.png 768w" sizes="auto, (max-width: 792px) 100vw, 792px" /></figure>



<p>ひとまず、これで簡単なWebアプリの準備はできました</p>



<h2 class="wp-block-heading">Ktorに準備されたタスクを実行してみる</h2>



<p>Ktorを利用すると、Gradleにタスクがいくつか追加されます</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="580" height="294" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_003.png" alt="" class="wp-image-326" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_003.png 580w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_003-300x152.png 300w" sizes="auto, (max-width: 580px) 100vw, 580px" /></figure>



<p>それぞれのタスクの詳細については、以下を参照されたい<br><a href="https://ktor.io/docs/docker.html" target="_blank" rel="noreferrer noopener">https://ktor.io/docs/docker.html</a></p>



<p>まずは「publishImageToLocalRegistry」を実行し、ローカルのDockerRegistryにイメージが登録されることを確認してみます</p>



<h2 class="wp-block-heading">ローカルのDockerにImageを登録する</h2>



<p>現在のローカルDocker Registryは以下のとおりです</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="213" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_004-1024x213.png" alt="" class="wp-image-328" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_004-1024x213.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_004-300x62.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_004-768x160.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_004-1536x319.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_004.png 1974w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>プロジェクト内の「build.gradle.kts」に以下の設定を追加します</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>ktor {
    docker {
        localImageName.set(&quot;ktor-docker-fagate&quot;)
        imageTag.set(&quot;0.0.1-preview&quot;)
    }
}</code></pre></div>



<p>Intellij Ideaから「publishImageToLocalRegistry」を実行します。<br>このタスクを実行すると、ローカルレジストリに作成したWebアプリのイメージが登録されます</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="238" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_005-1024x238.png" alt="" class="wp-image-329" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_005-1024x238.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_005-300x70.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_005-768x178.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_005-1536x357.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_005-2048x476.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="214" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_006-1024x214.png" alt="" class="wp-image-330" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_006-1024x214.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_006-300x63.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_006-768x160.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_006-1536x321.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_006-2048x427.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>この状態で下記コマンドを実行すると作成したイメージからコンテナが生成され、Hello Worldが表示されます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>docker run -p 8080:8080 ktor-docker-fagate:0.0.1-preview</code></pre></div>



<p>上記コマンド実行後、http://0.0.0.0:8080にアクセスするとHello worldが表示されます</p>



<h2 class="wp-block-heading">AWS ECRを利用するまでの色々</h2>



<p>Fargateに乗せるためのDockerイメージは、Amazon Elastic Container Registryを利用してみたいと思います。</p>



<p>AWSはアカウントのみ作った状態でまっさらなため、ユーザー作成からECR作成までやってみたいと思います</p>



<h3 class="wp-block-heading">ユーザー作成</h3>



<p>Identity and Access Management (IAM) から新規ユーザーを作成</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="902" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_007_001-1024x902.png" alt="" class="wp-image-331" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_007_001-1024x902.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_007_001-300x264.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_007_001-768x677.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_007_001-1536x1354.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_007_001.png 1972w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>ユーザーグループの設定画面<br>ユーザーグループがまだ存在しないので、作成をクリック</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="460" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_007_002-1024x460.png" alt="" class="wp-image-332" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_007_002-1024x460.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_007_002-300x135.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_007_002-768x345.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_007_002-1536x690.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_007_002.png 1986w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>グループは以下のように設定<br>ポリシーはElasticConteinerRegistryのFullAccessを選択してみました</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="589" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_007_003-1024x589.png" alt="" class="wp-image-333" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_007_003-1024x589.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_007_003-300x173.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_007_003-768x442.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_007_003.png 1276w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>グループ作成後、ユーザー作成の画面に戻ってくるので、作成したグループを選択します</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="508" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_007_004-1024x508.png" alt="" class="wp-image-334" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_007_004-1024x508.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_007_004-300x149.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_007_004-768x381.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_007_004-1536x762.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_007_004.png 1976w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>この次の画面でタグの設定になりますが、今回は何も設定せず次へ、確認画面の後、ユーザーが作成されます<br>ユーザー作成後、ユーザーID、シークレットキーが表示されるため両方ともメモしておきます(Docker ImageをPushするときの認証に利用します)</p>



<figure class="wp-block-image size-full"><img decoding="async" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_007_005.png" alt="" class="wp-image-335"/></figure>



<p>以上でユーザーの作成は終了です</p>



<h3 class="wp-block-heading">Elastic Container Registryを作成</h3>



<p>Amazon Elastic Container Registry のページにアクセス<br>画面右側に「リポジトリの作成 利用方法」というボタンがあるので、これをクリックするとリポジトリ作成画面に遷移できます。</p>



<p>リポジトリ名だけ設定し、画面下部のリポジトリ作成を実施しました</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="842" height="646" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_008.png" alt="" class="wp-image-336" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_008.png 842w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_008-300x230.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_008-768x589.png 768w" sizes="auto, (max-width: 842px) 100vw, 842px" /></figure>



<p>リポジトリが作成されました</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="188" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_009-1024x188.png" alt="" class="wp-image-337" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_009-1024x188.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_009-300x55.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_009-768x141.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_009-1536x282.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_009.png 1591w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">Docker Imageを作成してECRにPushする</h2>



<h3 class="wp-block-heading">Push用イメージのビルド</h3>



<p>マニュアルはこちら<br><a href="https://ktor.io/docs/docker.html#manual" target="_blank" rel="noreferrer noopener">https://ktor.io/docs/docker.html#manual</a></p>



<p>マニュアルを見ると、Docker Hub、Google Container RegistryにプッシュするときにはKtorにヘルパー関数的なものが準備されているそうですが、AWS用のものは見つかりませんでした(なんで？)<br>なので、手動でイメージをビルドし、プッシュします</p>



<p>プロジェクトルートにDockerfileを準備し、以下の内容を記載します</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>FROM gradle:7-jdk11 AS build
COPY --chown=gradle:gradle . /home/gradle/src
WORKDIR /home/gradle/src
RUN gradle buildFatJar --no-daemon

FROM openjdk:11
EXPOSE 8080:8080
RUN mkdir /app
COPY --from=build /home/gradle/src/build/libs/*.jar /app/ktor-docker-sample.jar
ENTRYPOINT [&quot;java&quot;,&quot;-jar&quot;,&quot;/app/ktor-docker-sample.jar&quot;]</code></pre></div>



<p>Macのターミナルでプロジェクトのルートディレクトリにcdコマンドで移動した後、以下のコマンドでイメージをビルドします</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>docker build -t kotlin-ktor-fargate .</code></pre></div>



<h3 class="wp-block-heading">認証情報の作成</h3>



<p>ECRにイメージをプッシュする際に認証が必要となるため、事前に情報を作成しておきます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>aws configure</code></pre></div>



<p>対話式で設定を行うモードになるので、メモっておいたアクセスキー、シークレットアクセスキーを設定します</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="149" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_010-1024x149.png" alt="" class="wp-image-338" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_010-1024x149.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_010-300x44.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_010-768x112.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_010-1536x224.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_010.png 1618w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">ECRにプッシュしてみる</h3>



<p>マニュアルはこちら<br><a href="https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/docker-push-ecr-image.html" target="_blank" rel="noreferrer noopener">https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/docker-push-ecr-image.html</a></p>



<p>コマンドはこんな感じにしてみました</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin アカウントID.dkr.ecr.us-east-1.amazonaws.com</code></pre></div>



<p>アカウントIDは画面右上のユーザー名をクリックすると確認できます</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="361" height="424" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_011.png" alt="" class="wp-image-339" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_011.png 361w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_011-255x300.png 255w" sizes="auto, (max-width: 361px) 100vw, 361px" /></figure>



<p>問題なければ、コマンド実行後に「Login Succeeded」が表示されます</p>



<p>次に以下のコマンドを実行し、タグ付とプッシュを行いました</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>docker tag プッシュ対象のイメージ アカウントID.dkr.ecr.us-east-1.amazonaws.com/kotlin-application:latest</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>docker push アカウントID.dkr.ecr.us-east-1.amazonaws.com/kotlin-application:latest</code></pre></div>



<p>上記コマンドを実行すると、ECRにイメージがプッシュされたことが確認できるかと思います</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="242" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_012-1024x242.png" alt="" class="wp-image-341" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_012-1024x242.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_012-300x71.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_012-768x182.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_012-1536x363.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_012.png 1581w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">Amazon Elastic Conteiner ServiceでWebアプリを稼働させる</h2>



<p>ここまで来てやっと本題である「自作WebアプリをFargateで稼働させる」にたどり着きました・・・</p>



<p>以下の手順で設定していきます</p>



<h3 class="wp-block-heading">Elastic Container Serviceの設定</h3>



<p>Elastic Container Serviceのページにアクセスし、「今すぐ始める」をクリックします<br>下記のような設定画面になるため、customの設定ボタンをクリックします</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="882" height="730" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_013_001.png" alt="" class="wp-image-343" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_013_001.png 882w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_013_001-300x248.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_013_001-768x636.png 768w" sizes="auto, (max-width: 882px) 100vw, 882px" /></figure>



<p>コンテナ内では8080ポートでリクエストを受け付けているため、ポートマッピングの設定を行っています</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="671" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_013_002-1024x671.png" alt="" class="wp-image-344" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_013_002-1024x671.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_013_002-300x197.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_013_002-768x503.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_013_002.png 1210w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>下記画面のような状態で次へをクリック</p>



<figure class="wp-block-image size-full"><img decoding="async" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_013_003.png" alt="" class="wp-image-345"/></figure>



<p>サービスの定義の画面になります<br>以下のように設定して次へ</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="890" height="552" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_013_004.png" alt="" class="wp-image-346" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_013_004.png 890w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_013_004-300x186.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_013_004-768x476.png 768w" sizes="auto, (max-width: 890px) 100vw, 890px" /></figure>



<p>次のクラスターの設定はデフォルト設定で次へを選択しました<br>確認画面で作成を選択すると、色々と作成が始まる画面に切り替わります</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="364" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_013_005-1024x364.png" alt="" class="wp-image-347" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_013_005-1024x364.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_013_005-300x107.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_013_005-768x273.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_013_005-1536x546.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_013_005.png 1813w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">Public IPを確認し、アクセスする</h3>



<p>上記のジョブがすべて終わると「サービスの表示」がクリックできるようになるのでクリックします</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="201" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_014-1024x201.png" alt="" class="wp-image-348" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_014-1024x201.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_014-300x59.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_014-768x151.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_014.png 1059w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>遷移先の画面でタスクタブ内のタスクをクリック</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="496" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_015-1024x496.png" alt="" class="wp-image-349" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_015-1024x496.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_015-300x145.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_015-768x372.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_015.png 1389w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>ネットワーク内にパブリックIPがあるので、確認します</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="531" height="251" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_016.png" alt="" class="wp-image-350" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_016.png 531w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_016-300x142.png 300w" sizes="auto, (max-width: 531px) 100vw, 531px" /></figure>



<p>ブラウザから確認したパブリックIPにアクセスすれば、Hello World!の文字が表示されるはずです<br>8080ポートで待ち受けているため、そこだけ注意が必要です</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="456" height="103" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_017.png" alt="" class="wp-image-351" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_017.png 456w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_017-300x68.png 300w" sizes="auto, (max-width: 456px) 100vw, 456px" /></figure>



<p>ここまでの手順で、ひとまず自作のWebアプリがFargateを利用して公開できたことになります<br>お疲れさまでした！</p>



<h2 class="wp-block-heading">後片付け</h2>



<p>確認が取れたので後片付けを行います。(色々と課金が怖いので・・・)</p>



<p>赤枠内のボタンからクラスターの削除を行います</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="398" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_018-1024x398.png" alt="" class="wp-image-352" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_018-1024x398.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_018-300x117.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_018-768x299.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_018-1536x597.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_018.png 1667w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>テキストボックス内にdelete meと入力して削除を行うと、削除が開始されます</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="611" height="504" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_019.png" alt="" class="wp-image-353" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_019.png 611w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_019-300x247.png 300w" sizes="auto, (max-width: 611px) 100vw, 611px" /></figure>



<p>ロググループの削除も行います<br>CloudWatch > ロググループから下記画面に遷移できます</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="234" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_020-1024x234.png" alt="" class="wp-image-354" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_020-1024x234.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_020-300x68.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_020-768x175.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_020.png 1451w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>ECRのレジストリも削除しておきます</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="219" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_021-1024x219.png" alt="" class="wp-image-355" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_021-1024x219.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_021-300x64.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_021-768x164.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_021-1536x328.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/09/20220923_021.png 1574w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>以上で後片付けも終了です</p>



<h2 class="wp-block-heading">以上</h2>



<p>ということで、AWS全く知らないおじさんがFargateを利用して独自のWebアプリを動かしてみるお話でした<br>疲れた・・・ ブログ書きながら作業したら5時間くらいかかった・・・ しかも、アカウント作成までは一回練習した状態でそれだけ時間がかかりました。<br><br>一応動いたことは動いたけど、本番稼働に利用するにはまだまだ知識が足りない状態です<br>ただ、Ktor自体がマイクロサービスを意識しているのか、コンテナとかなり相性が良い印象を受けたので、今後なにかサービスを開発するときはKtor + Fargateの環境は全然アリだなと思いました</p>


<div id="rinkerid356" class="yyi-rinker-contents  yyi-rinker-postid-356 yyi-rinker-img-m yyi-rinker-catid-7 yyi-rinker-catid-9 yyi-rinker-catid-6 ">
	<div class="yyi-rinker-box">
		<div class="yyi-rinker-image">
							<a href="https://af.moshimo.com/af/c/click?a_id=3394378&#038;p_id=54&#038;pc_id=54&#038;pl_id=616&#038;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FAWS%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/7406/9784797397406.jpg?_ex=128x128" width="128" height="128" class="yyi-rinker-main-img" style="border: none;" loading="lazy"></a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">					</div>
		<div class="yyi-rinker-info">
			<div class="yyi-rinker-title">
									<a href="https://af.moshimo.com/af/c/click?a_id=3394378&#038;p_id=54&#038;pc_id=54&#038;pl_id=616&#038;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FAWS%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow">AWS認定試験対策　AWS クラウドプラクティショナー [ 山下 光洋 ]</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">							</div>
			<div class="yyi-rinker-detail">
							<div class="credit-box">created by&nbsp;<a href="https://oyakosodate.com/rinker/" rel="nofollow noopener" target="_blank" >Rinker</a></div>
										<div class="price-box">
							<span title="" class="price">¥2,618</span>
															<span class="price_at">(2026/04/07 01:40:37時点&nbsp;楽天市場調べ-</span><span title="このサイトで掲載されている情報は当サイトの作成者により運営されています。価格、販売可能情報は、変更される場合があります。購入時に楽天市場店舗（www.rakuten.co.jp）に表示されている価格がその商品の販売に適用されます。">詳細)</span>
																	</div>
						</div>
						<ul class="yyi-rinker-links">
																                    <li class="amazonlink">
						<a href="https://www.amazon.co.jp/gp/search?ie=UTF8&amp;keywords=AWS&amp;tag=monodon-22&amp;index=blended&amp;linkCode=ure&amp;creative=6339" rel="nofollow" class="yyi-rinker-link">Amazon</a>					</li>
													<li class="rakutenlink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616&amp;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FAWS%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow" class="yyi-rinker-link">楽天市場</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">					</li>
													<li class="yahoolink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502&amp;url=https%3A%2F%2Fshopping.yahoo.co.jp%2Fsearch%3Fp%3DAWS" rel="nofollow" class="yyi-rinker-link">Yahooショッピング</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502" width="1" height="1" style="border:none;">					</li>
				                											</ul>
					</div>
	</div>
</div>


<div id="rinkerid357" class="yyi-rinker-contents  yyi-rinker-postid-357 yyi-rinker-img-m yyi-rinker-catid-7 yyi-rinker-catid-9 yyi-rinker-catid-6 ">
	<div class="yyi-rinker-box">
		<div class="yyi-rinker-image">
							<a href="https://af.moshimo.com/af/c/click?a_id=3394378&#038;p_id=54&#038;pc_id=54&#038;pl_id=616&#038;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FAWS%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/7654/9784815607654_1_3.jpg?_ex=128x128" width="128" height="128" class="yyi-rinker-main-img" style="border: none;" loading="lazy"></a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">					</div>
		<div class="yyi-rinker-info">
			<div class="yyi-rinker-title">
									<a href="https://af.moshimo.com/af/c/click?a_id=3394378&#038;p_id=54&#038;pc_id=54&#038;pl_id=616&#038;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FAWS%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow">AWSコンテナ設計・構築[本格]入門 [ 佐々木拓郎 ]</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">							</div>
			<div class="yyi-rinker-detail">
							<div class="credit-box">created by&nbsp;<a href="https://oyakosodate.com/rinker/" rel="nofollow noopener" target="_blank" >Rinker</a></div>
										<div class="price-box">
							<span title="" class="price">¥3,300</span>
															<span class="price_at">(2026/04/07 19:59:19時点&nbsp;楽天市場調べ-</span><span title="このサイトで掲載されている情報は当サイトの作成者により運営されています。価格、販売可能情報は、変更される場合があります。購入時に楽天市場店舗（www.rakuten.co.jp）に表示されている価格がその商品の販売に適用されます。">詳細)</span>
																	</div>
						</div>
						<ul class="yyi-rinker-links">
																                    <li class="amazonlink">
						<a href="https://www.amazon.co.jp/gp/search?ie=UTF8&amp;keywords=AWS&amp;tag=monodon-22&amp;index=blended&amp;linkCode=ure&amp;creative=6339" rel="nofollow" class="yyi-rinker-link">Amazon</a>					</li>
													<li class="rakutenlink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616&amp;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FAWS%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow" class="yyi-rinker-link">楽天市場</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">					</li>
													<li class="yahoolink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502&amp;url=https%3A%2F%2Fshopping.yahoo.co.jp%2Fsearch%3Fp%3DAWS" rel="nofollow" class="yyi-rinker-link">Yahooショッピング</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502" width="1" height="1" style="border:none;">					</li>
				                											</ul>
					</div>
	</div>
</div>
<p>投稿 <a href="https://sheltie-garage.xyz/tech/2022/09/kotlin-kor%e3%81%a7%e4%bd%9c%e6%88%90%e3%81%97%e3%81%9fweb%e3%82%a2%e3%83%97%e3%83%aa%e3%82%92aws-fargate%e3%81%a7%e5%8b%95%e3%81%8b%e3%81%97%e3%81%9f%e3%81%84/">Kotlin Korで作成したWebアプリをAWS Fargateで動かしたい</a> は <a href="https://sheltie-garage.xyz/tech">Sheltie Garage Tech</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sheltie-garage.xyz/tech/2022/09/kotlin-kor%e3%81%a7%e4%bd%9c%e6%88%90%e3%81%97%e3%81%9fweb%e3%82%a2%e3%83%97%e3%83%aa%e3%82%92aws-fargate%e3%81%a7%e5%8b%95%e3%81%8b%e3%81%97%e3%81%9f%e3%81%84/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ktor + ExposedでCRUDしてみる</title>
		<link>https://sheltie-garage.xyz/tech/2022/07/ktor-exposed%e3%81%a7crud%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b/</link>
					<comments>https://sheltie-garage.xyz/tech/2022/07/ktor-exposed%e3%81%a7crud%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b/#respond</comments>
		
		<dc:creator><![CDATA[monodon]]></dc:creator>
		<pubDate>Sun, 10 Jul 2022 12:58:10 +0000</pubDate>
				<category><![CDATA[Exposed]]></category>
		<category><![CDATA[kotlin]]></category>
		<category><![CDATA[Ktor]]></category>
		<guid isPermaLink="false">https://sheltie-garage.xyz/tech/?p=158</guid>

					<description><![CDATA[<p>先日なんとなくktorが使えるようになったので、今度はDB操作の基本であるCRUDを組んでみようと思います O/Rマッパーをどうするか 今回O/Rマッパーとして「Exposed」を利用してみることにしました。Expose [&#8230;]</p>
<p>投稿 <a href="https://sheltie-garage.xyz/tech/2022/07/ktor-exposed%e3%81%a7crud%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b/">ktor + ExposedでCRUDしてみる</a> は <a href="https://sheltie-garage.xyz/tech">Sheltie Garage Tech</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<p>先日なんとなくktorが使えるようになったので、今度はDB操作の基本であるCRUDを組んでみようと思います</p>



<h2 class="wp-block-heading">O/Rマッパーをどうするか</h2>



<p>今回O/Rマッパーとして「<a href="https://github.com/JetBrains/Exposed" target="_blank" rel="noreferrer noopener">Exposed</a>」を利用してみることにしました。<br>Exposedはkotlinの開発元であるJetBrains謹製のO/Rマッパーですね<br>kotlin開発元が作成しているということで、相性やサポートも良さそうな印象があるので使ってみることにしました</p>



<h2 class="wp-block-heading">サンプルプログラム</h2>



<p>今回作成したプログラムは<a href="https://github.com/sheltie-fusafusa/ktor_exposed" target="_blank" rel="noreferrer noopener">GitHub</a>にあげています。</p>



<h2 class="wp-block-heading">プログラムのざっくり紹介</h2>



<p>プログラムはKtor + Exposedの構成で作成されており、以下のような仕様で動きます<br>・組み込みtomcat、8080ポートでリクエストを受け付けます<br>・CRUDの動作はPOST/GET/PUT/DELETE のそれぞれのHTTPメソッドに対応させています</p>



<h2 class="wp-block-heading">POSTMANを利用した動作確認</h2>



<p>PostManを利用した動作は以下のようになります</p>



<h3 class="wp-block-heading">Create / POST</h3>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="554" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220710_001-1024x554.png" alt="" class="wp-image-159" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220710_001-1024x554.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220710_001-300x162.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220710_001-768x415.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220710_001.png 1520w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>上記を実行すると、DB内にデータが作成されました</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="556" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220710_002-1024x556.png" alt="" class="wp-image-160" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220710_002-1024x556.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220710_002-300x163.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220710_002-768x417.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220710_002.png 1042w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p></p>



<h3 class="wp-block-heading">READ / GET</h3>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="613" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220710_003-1024x613.png" alt="" class="wp-image-161" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220710_003-1024x613.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220710_003-300x180.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220710_003-768x460.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220710_003.png 1510w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">UPDATE / PUT</h3>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="557" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220710_004-1024x557.png" alt="" class="wp-image-162" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220710_004-1024x557.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220710_004-300x163.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220710_004-768x418.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220710_004.png 1504w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p></p>



<p>アップデートを実行すると以下のようにデータが更新されました</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="434" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220710_005-1024x434.png" alt="" class="wp-image-163" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220710_005-1024x434.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220710_005-300x127.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220710_005-768x326.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220710_005.png 1080w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">DELETE / DELETE</h3>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="567" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220710_006-1024x567.png" alt="" class="wp-image-164" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220710_006-1024x567.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220710_006-300x166.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220710_006-768x425.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220710_006.png 1520w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>productNoをキーにDELETEを実行します</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="932" height="510" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220710_007.png" alt="" class="wp-image-165" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220710_007.png 932w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220710_007-300x164.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220710_007-768x420.png 768w" sizes="auto, (max-width: 932px) 100vw, 932px" /></figure>



<p>データが無事に消えました</p>



<h2 class="wp-block-heading">以上</h2>



<p>簡単ですが、Ktor+Exposedを利用した簡単なCRUD操作を紹介いたしました。<br>DB周りの操作を行えるようになると、アプリ開発の幅もぐっと広がりますね。<br>DBアクセスに付いては、ずっとSQLを記述する方式で操作をしてきたので、テーブルオブジェクトに値を設定するだけでアップデートされたり削除できたりできるのはなんとなく動作が読めず複雑な気がしますが、徐々になれていきたいと思います。</p>


<div id="rinkerid166" class="yyi-rinker-contents  yyi-rinker-postid-166 yyi-rinker-img-m yyi-rinker-catid-10 yyi-rinker-catid-7 yyi-rinker-catid-9 ">
	<div class="yyi-rinker-box">
		<div class="yyi-rinker-image">
							<a href="https://af.moshimo.com/af/c/click?a_id=3394378&#038;p_id=54&#038;pc_id=54&#038;pl_id=616&#038;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2Fkotlin%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/4272/9784877834272.jpg?_ex=128x128" width="128" height="128" class="yyi-rinker-main-img" style="border: none;" loading="lazy"></a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">					</div>
		<div class="yyi-rinker-info">
			<div class="yyi-rinker-title">
									<a href="https://af.moshimo.com/af/c/click?a_id=3394378&#038;p_id=54&#038;pc_id=54&#038;pl_id=616&#038;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2Fkotlin%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow">やさしいKotlin入門 [ 野崎英一 ]</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">							</div>
			<div class="yyi-rinker-detail">
							<div class="credit-box">created by&nbsp;<a href="https://oyakosodate.com/rinker/" rel="nofollow noopener" target="_blank" >Rinker</a></div>
										<div class="price-box">
							<span title="" class="price">¥2,640</span>
															<span class="price_at">(2026/04/07 19:59:19時点&nbsp;楽天市場調べ-</span><span title="このサイトで掲載されている情報は当サイトの作成者により運営されています。価格、販売可能情報は、変更される場合があります。購入時に楽天市場店舗（www.rakuten.co.jp）に表示されている価格がその商品の販売に適用されます。">詳細)</span>
																	</div>
						</div>
						<ul class="yyi-rinker-links">
																                    <li class="amazonlink">
						<a href="https://www.amazon.co.jp/gp/search?ie=UTF8&amp;keywords=kotlin&amp;tag=monodon-22&amp;index=blended&amp;linkCode=ure&amp;creative=6339" rel="nofollow" class="yyi-rinker-link">Amazon</a>					</li>
													<li class="rakutenlink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616&amp;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2Fkotlin%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow" class="yyi-rinker-link">楽天市場</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">					</li>
													<li class="yahoolink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502&amp;url=https%3A%2F%2Fshopping.yahoo.co.jp%2Fsearch%3Fp%3Dkotlin" rel="nofollow" class="yyi-rinker-link">Yahooショッピング</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502" width="1" height="1" style="border:none;">					</li>
				                											</ul>
					</div>
	</div>
</div>


<div id="rinkerid167" class="yyi-rinker-contents  yyi-rinker-postid-167 yyi-rinker-img-m yyi-rinker-catid-10 yyi-rinker-catid-7 yyi-rinker-catid-9 ">
	<div class="yyi-rinker-box">
		<div class="yyi-rinker-image">
							<a href="https://af.moshimo.com/af/c/click?a_id=3394378&#038;p_id=54&#038;pc_id=54&#038;pl_id=616&#038;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FDocker%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/6424/9784296106424.jpg?_ex=128x128" width="128" height="128" class="yyi-rinker-main-img" style="border: none;" loading="lazy"></a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">					</div>
		<div class="yyi-rinker-info">
			<div class="yyi-rinker-title">
									<a href="https://af.moshimo.com/af/c/click?a_id=3394378&#038;p_id=54&#038;pc_id=54&#038;pl_id=616&#038;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FDocker%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow">さわって学ぶクラウドインフラ　docker基礎からのコンテナ構築 [ 大澤 文孝 ]</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">							</div>
			<div class="yyi-rinker-detail">
							<div class="credit-box">created by&nbsp;<a href="https://oyakosodate.com/rinker/" rel="nofollow noopener" target="_blank" >Rinker</a></div>
										<div class="price-box">
							<span title="" class="price">¥2,970</span>
															<span class="price_at">(2026/04/07 19:59:19時点&nbsp;楽天市場調べ-</span><span title="このサイトで掲載されている情報は当サイトの作成者により運営されています。価格、販売可能情報は、変更される場合があります。購入時に楽天市場店舗（www.rakuten.co.jp）に表示されている価格がその商品の販売に適用されます。">詳細)</span>
																	</div>
						</div>
						<ul class="yyi-rinker-links">
																                    <li class="amazonlink">
						<a href="https://www.amazon.co.jp/gp/search?ie=UTF8&amp;keywords=Docker&amp;tag=monodon-22&amp;index=blended&amp;linkCode=ure&amp;creative=6339" rel="nofollow" class="yyi-rinker-link">Amazon</a>					</li>
													<li class="rakutenlink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616&amp;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FDocker%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow" class="yyi-rinker-link">楽天市場</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">					</li>
													<li class="yahoolink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502&amp;url=https%3A%2F%2Fshopping.yahoo.co.jp%2Fsearch%3Fp%3DDocker" rel="nofollow" class="yyi-rinker-link">Yahooショッピング</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502" width="1" height="1" style="border:none;">					</li>
				                											</ul>
					</div>
	</div>
</div>
<p>投稿 <a href="https://sheltie-garage.xyz/tech/2022/07/ktor-exposed%e3%81%a7crud%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b/">ktor + ExposedでCRUDしてみる</a> は <a href="https://sheltie-garage.xyz/tech">Sheltie Garage Tech</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sheltie-garage.xyz/tech/2022/07/ktor-exposed%e3%81%a7crud%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>初めてのKtor</title>
		<link>https://sheltie-garage.xyz/tech/2022/07/%e5%88%9d%e3%82%81%e3%81%a6%e3%81%aektor/</link>
					<comments>https://sheltie-garage.xyz/tech/2022/07/%e5%88%9d%e3%82%81%e3%81%a6%e3%81%aektor/#respond</comments>
		
		<dc:creator><![CDATA[monodon]]></dc:creator>
		<pubDate>Sun, 03 Jul 2022 06:14:52 +0000</pubDate>
				<category><![CDATA[kotlin]]></category>
		<category><![CDATA[Ktor]]></category>
		<guid isPermaLink="false">https://sheltie-garage.xyz/tech/?p=145</guid>

					<description><![CDATA[<p>仕事でKtorを触ることがあったので、基本的な部分のメモを残す目的でこのエントリを作成しました Ktorプロジェクトの作成 Google検索で出てくる記事を見てみると「Intellij IdeaのプラグインからKtorプ [&#8230;]</p>
<p>投稿 <a href="https://sheltie-garage.xyz/tech/2022/07/%e5%88%9d%e3%82%81%e3%81%a6%e3%81%aektor/">初めてのKtor</a> は <a href="https://sheltie-garage.xyz/tech">Sheltie Garage Tech</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<p>仕事でKtorを触ることがあったので、基本的な部分のメモを残す目的でこのエントリを作成しました</p>



<h2 class="wp-block-heading">Ktorプロジェクトの作成</h2>



<p>Google検索で出てくる記事を見てみると「Intellij IdeaのプラグインからKtorプロジェクトを作りましょう」という記事を多く見かけます。自分が購入したkotlin入門書も、Intellij Ideaのプラグインを利用したプロジェクト作成方法が記載されていました</p>



<p class="has-vivid-red-color has-text-color has-medium-font-size"><strong>が、現在Intellij Idea Community Editionでは、プラグインを利用したKtorプロジェクト作成は行なえません</strong></p>



<p>Intellij Ideaのプラグインは、残念ながらUltimateから利用可能となっているようです。現在、Ktorプロエジェクトは以下の3つの方法で作成出来ます</p>



<p>・Intellij Idea Ultimate Editionのプラグインを利用する<br>・Ktor Project Generatorで作成する<br>・手動で依存関係を設定する</p>



<p>参照<br><a href="https://ktor.io/create/" target="_blank" rel="noreferrer noopener">https://ktor.io/create/</a></p>



<p>今回はGeneratorを利用してプロジェクトを作成してみます</p>



<h2 class="wp-block-heading">Generatorを利用したプロジェクト</h2>



<p><a href="https://start.ktor.io/" target="_blank" rel="noreferrer noopener">https://start.ktor.io/</a> にアクセスします<br>Adjust project settings をクリックすることで、組み込みサーバやパッケージ名など、より詳細な情報を設定できます</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="897" height="1024" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_001-897x1024.png" alt="" class="wp-image-146" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_001-897x1024.png 897w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_001-263x300.png 263w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_001-768x877.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_001-1345x1536.png 1345w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_001.png 1480w" sizes="auto, (max-width: 897px) 100vw, 897px" /></figure>



<p>Add pluginをクリックすると、導入するプラグインが選択できます。<br>かなりの数がありますね・・・<br>（何も選択しなくても、Routingプラグインは自動で導入されるようです）</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="790" height="1024" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_002-790x1024.png" alt="" class="wp-image-147" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_002-790x1024.png 790w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_002-231x300.png 231w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_002-768x995.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_002-1185x1536.png 1185w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_002.png 1344w" sizes="auto, (max-width: 790px) 100vw, 790px" /></figure>



<p>最後に「Generate project」をクリックすると、設定した内容でダウンロードが始まるため、適当なディレクトリにコピーします</p>



<h2 class="wp-block-heading">Intellij Idea CAでプロジェクトを開いて実行してみる</h2>



<p>ダウンロードしたzipファイルを展開します</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="672" height="376" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_003.png" alt="" class="wp-image-148" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_003.png 672w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_003-300x168.png 300w" sizes="auto, (max-width: 672px) 100vw, 672px" /></figure>



<p>Intellij Ideaの起動し、開くを選択します</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="656" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_004-1024x656.png" alt="" class="wp-image-149" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_004-1024x656.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_004-300x192.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_004-768x492.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_004-1536x984.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_004.png 1602w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>zipを展開したディレクトリを指定します</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="452" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_005-1024x452.png" alt="" class="wp-image-150" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_005-1024x452.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_005-300x132.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_005-768x339.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_005.png 1442w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>プロジェクトを開くと、Gradleの依存関係処理が動きます。<br>サンプルコードを含む設定でプロジェクトを作成したため、Hello Worldの表示サンプルが含まれていました</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="517" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_006-1024x517.png" alt="" class="wp-image-151" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_006-1024x517.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_006-300x151.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_006-768x388.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_006-1536x776.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_006.png 2008w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">ローカルサーバを起動し、Hello Worldを表示する</h2>



<p>Intellij IdeaのGradleタスク一覧から「Application > run」を選択します<br>組み込みTomcatが起動し、「http://0.0.0.0:8080」でアクセスを待ち受ける状態になります</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="705" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_007-1024x705.png" alt="" class="wp-image-152" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_007-1024x705.png 1024w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_007-300x207.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_007-768x529.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_007-1536x1057.png 1536w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20220703_007.png 1958w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="802" height="262" src="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20200703_008.png" alt="" class="wp-image-153" srcset="https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20200703_008.png 802w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20200703_008-300x98.png 300w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20200703_008-768x251.png 768w, https://sheltie-garage.xyz/tech/wp-content/uploads/2022/07/20200703_008-800x262.png 800w" sizes="auto, (max-width: 802px) 100vw, 802px" /></figure>



<h2 class="wp-block-heading">以上</h2>



<p>Ktorを触ってみる、という記事でした。特にKtorプロジェクトの作成について、Intellij Ideaのプラグインがエディションによっては利用できなくなっているため、最新情報のキャッチアップは重要だと感じました。<br>Ktorについては触り始めたばかりでまだなんとも言えませんが、ルーティングを設定し、それに応じた処理を書いていくということで、結構素直な使い方ができそうな気がします。</p>


<div id="rinkerid154" class="yyi-rinker-contents  yyi-rinker-postid-154 yyi-rinker-img-m yyi-rinker-catid-7 yyi-rinker-catid-9 ">
	<div class="yyi-rinker-box">
		<div class="yyi-rinker-image">
							<a href="https://af.moshimo.com/af/c/click?a_id=3394378&#038;p_id=54&#038;pc_id=54&#038;pl_id=616&#038;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FKtor%2Bkotlin%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/dorama/cabinet/bkimg/2022/021/34351544.jpg?_ex=128x128" width="128" height="128" class="yyi-rinker-main-img" style="border: none;" loading="lazy"></a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">					</div>
		<div class="yyi-rinker-info">
			<div class="yyi-rinker-title">
									<a href="https://af.moshimo.com/af/c/click?a_id=3394378&#038;p_id=54&#038;pc_id=54&#038;pl_id=616&#038;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FKtor%2Bkotlin%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow">【新品】WEB+DB　PRESS　Vol．129　特集Reactの深層｜デザインシステム｜レコメンドエンジン｜Ktor/Kotlin</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">							</div>
			<div class="yyi-rinker-detail">
							<div class="credit-box">created by&nbsp;<a href="https://oyakosodate.com/rinker/" rel="nofollow noopener" target="_blank" >Rinker</a></div>
										<div class="price-box">
							</div>
						</div>
						<ul class="yyi-rinker-links">
																                    <li class="amazonlink">
						<a href="https://www.amazon.co.jp/gp/search?ie=UTF8&amp;keywords=Ktor+kotlin&amp;tag=monodon-22&amp;index=blended&amp;linkCode=ure&amp;creative=6339" rel="nofollow" class="yyi-rinker-link">Amazon</a>					</li>
													<li class="rakutenlink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616&amp;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FKtor%2Bkotlin%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow" class="yyi-rinker-link">楽天市場</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">					</li>
													<li class="yahoolink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502&amp;url=https%3A%2F%2Fshopping.yahoo.co.jp%2Fsearch%3Fp%3DKtor%2Bkotlin" rel="nofollow" class="yyi-rinker-link">Yahooショッピング</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502" width="1" height="1" style="border:none;">					</li>
				                											</ul>
					</div>
	</div>
</div>


<div id="rinkerid155" class="yyi-rinker-contents  yyi-rinker-postid-155 yyi-rinker-img-m yyi-rinker-catid-7 yyi-rinker-catid-9 ">
	<div class="yyi-rinker-box">
		<div class="yyi-rinker-image">
							<a href="https://af.moshimo.com/af/c/click?a_id=3394378&#038;p_id=54&#038;pc_id=54&#038;pl_id=616&#038;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2Fkotlin%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/8594/9784297118594.jpg?_ex=128x128" width="128" height="128" class="yyi-rinker-main-img" style="border: none;" loading="lazy"></a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">					</div>
		<div class="yyi-rinker-info">
			<div class="yyi-rinker-title">
									<a href="https://af.moshimo.com/af/c/click?a_id=3394378&#038;p_id=54&#038;pc_id=54&#038;pl_id=616&#038;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2Fkotlin%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow">Kotlin サーバーサイドプログラミング実践開発 [ 竹端尚人 ]</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">							</div>
			<div class="yyi-rinker-detail">
							<div class="credit-box">created by&nbsp;<a href="https://oyakosodate.com/rinker/" rel="nofollow noopener" target="_blank" >Rinker</a></div>
										<div class="price-box">
							</div>
						</div>
						<ul class="yyi-rinker-links">
																                    <li class="amazonlink">
						<a href="https://www.amazon.co.jp/gp/search?ie=UTF8&amp;keywords=kotlin&amp;tag=monodon-22&amp;index=blended&amp;linkCode=ure&amp;creative=6339" rel="nofollow" class="yyi-rinker-link">Amazon</a>					</li>
													<li class="rakutenlink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616&amp;url=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2Fkotlin%2F%3Ff%3D1%26grp%3Dproduct" rel="nofollow" class="yyi-rinker-link">楽天市場</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3394378&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" style="border:none;">					</li>
													<li class="yahoolink">
						<a href="https://af.moshimo.com/af/c/click?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502&amp;url=https%3A%2F%2Fshopping.yahoo.co.jp%2Fsearch%3Fp%3Dkotlin" rel="nofollow" class="yyi-rinker-link">Yahooショッピング</a><img loading="lazy" decoding="async" src="https://i.moshimo.com/af/i/impression?a_id=3442618&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502" width="1" height="1" style="border:none;">					</li>
				                											</ul>
					</div>
	</div>
</div>
<p>投稿 <a href="https://sheltie-garage.xyz/tech/2022/07/%e5%88%9d%e3%82%81%e3%81%a6%e3%81%aektor/">初めてのKtor</a> は <a href="https://sheltie-garage.xyz/tech">Sheltie Garage Tech</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sheltie-garage.xyz/tech/2022/07/%e5%88%9d%e3%82%81%e3%81%a6%e3%81%aektor/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
