<?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>AWS | きいちログ</title>
	<atom:link href="https://wptech.kiichiro.work/tag/aws/feed/" rel="self" type="application/rss+xml" />
	<link>https://wptech.kiichiro.work</link>
	<description>WordPressとかAWSとかPHPとか</description>
	<lastBuildDate>Sat, 06 Dec 2025 22:56:08 +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>CloudShell VPC environment で RDS に dump を流し込む</title>
		<link>https://wptech.kiichiro.work/29x6dunked/</link>
		
		<dc:creator><![CDATA[むらおか]]></dc:creator>
		<pubDate>Sat, 06 Dec 2025 22:56:08 +0000</pubDate>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[AWS]]></category>
		<guid isPermaLink="false">https://wptech.kiichiro.work/?p=4039</guid>

					<description><![CDATA[目次 はじめに構成事前準備VPC ネットワークの作成RDS の作成S3 バケットの作成と dump ファイルのアップロード実行CloudShell の起動dump ファイルのダウンロードdump データのインポートおわり [&#8230;]]]></description>
										<content:encoded><![CDATA[

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">はじめに</a></li><li><a href="#toc2" tabindex="0">構成</a></li><li><a href="#toc3" tabindex="0">事前準備</a><ol><li><a href="#toc4" tabindex="0">VPC ネットワークの作成</a></li><li><a href="#toc5" tabindex="0">RDS の作成</a></li><li><a href="#toc6" tabindex="0">S3 バケットの作成と dump ファイルのアップロード</a></li></ol></li><li><a href="#toc7" tabindex="0">実行</a><ol><li><a href="#toc8" tabindex="0">CloudShell の起動</a></li><li><a href="#toc9" tabindex="0">dump ファイルのダウンロード</a></li><li><a href="#toc10" tabindex="0">dump データのインポート</a></li></ol></li><li><a href="#toc11" tabindex="0">おわりに</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">はじめに</span></h2>



<p>結構前の話ですが VPC 内に CloudShell 環境を作ることが出来るようになってました。</p>




<a rel="noopener" href="https://docs.aws.amazon.com/ja_jp/cloudshell/latest/userguide/using-cshell-in-vpc.html" title="Amazon VPC AWS CloudShell &#12391;&#12398; &#12398;&#20351;&#29992; - AWS CloudShell" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fdocs.aws.amazon.com%2Fja_jp%2Fcloudshell%2Flatest%2Fuserguide%2Fusing-cshell-in-vpc.html?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Amazon VPC AWS CloudShell &#12391;&#12398; &#12398;&#20351;&#29992; - AWS CloudShell</div><div class="blogcard-snippet external-blogcard-snippet">VPC での CloudShell の使用に関するガイダンスを提供します。これには、運用上の制約、CloudShell VPC 環境を作成する手順、作成と使用に必要な IAM アクセス許可が含まれます。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://docs.aws.amazon.com/ja_jp/cloudshell/latest/userguide/using-cshell-in-vpc.html" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">docs.aws.amazon.com</div></div></div></div></a>



<p>従来はプライベートサブネット内の RDS へのアクセスは、Bastion host を ECS で構築しておいて ECS Exec する方法が主流だったと思いますが、CloudShell VPC environment であればコンテナを用意する必要が無いということになります。更に嬉しいことに mysql や psql コマンドが標準でインストールされています。</p>



<p>利用時の注意点として、ファイルのアップロード/ダウンロードが出来ないというのがあります。よって、RDS に dump データを流し込む際は S3 を経由するなどをする必要があります。</p>



<p>実際にやってみます。</p>



<h2 class="wp-block-heading"><span id="toc2">構成</span></h2>



<p>同じ VPC 内に RDS と CloudShell を用意することになります。</p>



<p>今回は dump ファイルを持っていきたいので S3 に sql ファイルをアップロードしておきます。プライベートサブネット内から S3 へのアクセスはゲートウェイエンドポイントを介して行います。</p>



<figure class="wp-block-image aligncenter size-full"><img fetchpriority="high" decoding="async" width="841" height="461" src="https://wptech.kiichiro.work/wp-content/uploads/2025/12/cloudshell-rds-access-overview.drawio.png" alt="AWS Cloud の中の VPC にPrivate subnet がある。その中に RDS と CloudShell が入っており、相互に矢印で結線している。S3 は VPC の外に配置され、dump.sql が重なっている。CloudShell と S3 は Gateway を介して結線している。" class="wp-image-4057" srcset="https://wptech.kiichiro.work/wp-content/uploads/2025/12/cloudshell-rds-access-overview.drawio.png 841w, https://wptech.kiichiro.work/wp-content/uploads/2025/12/cloudshell-rds-access-overview.drawio-300x164.png 300w, https://wptech.kiichiro.work/wp-content/uploads/2025/12/cloudshell-rds-access-overview.drawio-768x421.png 768w" sizes="(max-width: 841px) 100vw, 841px" /></figure>



<h2 class="wp-block-heading"><span id="toc3">事前準備</span></h2>



<p>必要なリソースをマネジメントコンソールから作成します。</p>



<h3 class="wp-block-heading"><span id="toc4">VPC ネットワークの作成</span></h3>



<p>VPC とその関連リソースを作成します。作成するリソースを「VPCなど」とすることで周辺のリソースも併せて作成出来ます。</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1022" height="342" data-id="4064" src="https://wptech.kiichiro.work/wp-content/uploads/2025/12/6dfb821fb3725240e12edace8c677165.png" alt="VPCの設定で作成するリソースをVPCなどにチェックを入れている" class="wp-image-4064" srcset="https://wptech.kiichiro.work/wp-content/uploads/2025/12/6dfb821fb3725240e12edace8c677165.png 1022w, https://wptech.kiichiro.work/wp-content/uploads/2025/12/6dfb821fb3725240e12edace8c677165-300x100.png 300w, https://wptech.kiichiro.work/wp-content/uploads/2025/12/6dfb821fb3725240e12edace8c677165-768x257.png 768w" sizes="(max-width: 1022px) 100vw, 1022px" /></figure>
</figure>



<p>プライベートサブネットがあれば良いのでいくつか作成しておきます。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="908" height="204" src="https://wptech.kiichiro.work/wp-content/uploads/2025/12/fa3f66a41470995edb8814bd345ae1c7.png" alt="プライベートサブネットの数の選択肢の2を選択している" class="wp-image-4065" srcset="https://wptech.kiichiro.work/wp-content/uploads/2025/12/fa3f66a41470995edb8814bd345ae1c7.png 908w, https://wptech.kiichiro.work/wp-content/uploads/2025/12/fa3f66a41470995edb8814bd345ae1c7-300x67.png 300w, https://wptech.kiichiro.work/wp-content/uploads/2025/12/fa3f66a41470995edb8814bd345ae1c7-768x173.png 768w" sizes="(max-width: 908px) 100vw, 908px" /></figure>



<p>VPC エンドポイントは S3 ゲートウェイエンドポイントが必要なのでここで一緒に作成するか、別で作成する必要があります。別で作成する場合はサブネットのルートテーブルに忘れずにアタッチしておきましょう。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="940" height="286" src="https://wptech.kiichiro.work/wp-content/uploads/2025/12/b1fd6d569d1afcae6d5164957ba221a1.png" alt="VPCエンドポイントの選択肢のなしを選択している" class="wp-image-4063" srcset="https://wptech.kiichiro.work/wp-content/uploads/2025/12/b1fd6d569d1afcae6d5164957ba221a1.png 940w, https://wptech.kiichiro.work/wp-content/uploads/2025/12/b1fd6d569d1afcae6d5164957ba221a1-300x91.png 300w, https://wptech.kiichiro.work/wp-content/uploads/2025/12/b1fd6d569d1afcae6d5164957ba221a1-768x234.png 768w" sizes="(max-width: 940px) 100vw, 940px" /></figure>



<h3 class="wp-block-heading"><span id="toc5">RDS の作成</span></h3>



<p>今回は MySQL を使います。先程作成した VPC リソースに合わせて VPC とサブネットを選択します。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="423" src="https://wptech.kiichiro.work/wp-content/uploads/2025/12/1c7f94dbfc08d0d363cbfd07bb4e3c50-1024x423.png" alt="RDSのネットワーク設定画面" class="wp-image-4088" srcset="https://wptech.kiichiro.work/wp-content/uploads/2025/12/1c7f94dbfc08d0d363cbfd07bb4e3c50-1024x423.png 1024w, https://wptech.kiichiro.work/wp-content/uploads/2025/12/1c7f94dbfc08d0d363cbfd07bb4e3c50-300x124.png 300w, https://wptech.kiichiro.work/wp-content/uploads/2025/12/1c7f94dbfc08d0d363cbfd07bb4e3c50-768x317.png 768w, https://wptech.kiichiro.work/wp-content/uploads/2025/12/1c7f94dbfc08d0d363cbfd07bb4e3c50-1536x634.png 1536w, https://wptech.kiichiro.work/wp-content/uploads/2025/12/1c7f94dbfc08d0d363cbfd07bb4e3c50-2048x846.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>セキュリティグループを新規作成する場合は、CloudShell のセキュリティグループからのインバウンドアクセスを許可するようにする必要があります。</p>



<h3 class="wp-block-heading"><span id="toc6">S3 バケットの作成と dump ファイルのアップロード</span></h3>



<p>S3 バケットを用意します。パブリックアクセスは off のままで OK です。</p>



<p>dump ファイルは今回は以下のものを利用します。</p>




<a rel="noopener" href="https://dev.mysql.com/doc/index-other.html" title="https://dev.mysql.com/doc/index-other.html" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fdev.mysql.com%2Fdoc%2Findex-other.html?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">https://dev.mysql.com/doc/index-other.html</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://dev.mysql.com/doc/index-other.html" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">dev.mysql.com</div></div></div></div></a>



<h2 class="wp-block-heading"><span id="toc7">実行</span></h2>



<h3 class="wp-block-heading"><span id="toc8">CloudShell の起動</span></h3>



<p>マネジメントコンソールにログインし、CloudShell を起動します。</p>



<p>画面上部のアイコンをクリックすると、画面下段に CloudShell が起動します。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="794" height="102" src="https://wptech.kiichiro.work/wp-content/uploads/2025/12/5d81015708b5d32611509f055cb39014.png" alt="CloudShell のアイコンが赤枠で示されている" class="wp-image-4098" srcset="https://wptech.kiichiro.work/wp-content/uploads/2025/12/5d81015708b5d32611509f055cb39014.png 794w, https://wptech.kiichiro.work/wp-content/uploads/2025/12/5d81015708b5d32611509f055cb39014-300x39.png 300w, https://wptech.kiichiro.work/wp-content/uploads/2025/12/5d81015708b5d32611509f055cb39014-768x99.png 768w" sizes="(max-width: 794px) 100vw, 794px" /></figure>



<p>アクションボタンをクリックして「Create VPC environment」を選択します。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="762" height="776" src="https://wptech.kiichiro.work/wp-content/uploads/2025/12/e8bc3a4fe2023a4fb77ba783140918b1.png" alt="Create VPC environment が赤枠で示されている" class="wp-image-4106" srcset="https://wptech.kiichiro.work/wp-content/uploads/2025/12/e8bc3a4fe2023a4fb77ba783140918b1.png 762w, https://wptech.kiichiro.work/wp-content/uploads/2025/12/e8bc3a4fe2023a4fb77ba783140918b1-295x300.png 295w" sizes="(max-width: 762px) 100vw, 762px" /></figure>



<p>VPC, Subnet, Security group は事前に作成したものを選択します。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="1024" height="1010" src="https://wptech.kiichiro.work/wp-content/uploads/2025/12/ce7d1ce86ae4ff8121c58300ed140112.png" alt="Create a VPC environment の設定画面" class="wp-image-4109" srcset="https://wptech.kiichiro.work/wp-content/uploads/2025/12/ce7d1ce86ae4ff8121c58300ed140112.png 1024w, https://wptech.kiichiro.work/wp-content/uploads/2025/12/ce7d1ce86ae4ff8121c58300ed140112-300x296.png 300w, https://wptech.kiichiro.work/wp-content/uploads/2025/12/ce7d1ce86ae4ff8121c58300ed140112-768x758.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading"><span id="toc9">dump ファイルのダウンロード</span></h3>



<p>S3 にアップロードした dump ファイルをダウンロードしてきます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-file="CloudShell" data-lang="Bash"><code>~ $ aws --version aws-cli/2.32.3 Python/3.13.9 Linux/6.1.156-177.286.amzn2023.x86_64 exec-env/CloudShell exe/x86_64.amzn.2023

# S3 への疎通確認
~ $ aws s3 ls

# dump ファイルのダウンロード 
~ $ aws s3 cp s3://{bucket-name}/world.sql ./world.sql
download: s3://{bucket-name}/world.sql to ./world.sql
~ $ ls world.sql
world.sql</code></pre></div>



<p>このとき、S3 への疎通が取れない場合は S3 ゲートウェイエンドポイントの作成に失敗しているかルートテーブルにアタッチしていないことが考えられます。</p>



<h3 class="wp-block-heading"><span id="toc10">dump データのインポート</span></h3>



<p>念の為、インポートの前に mysql コマンドで RDS と疎通を取ると良いでしょう。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-file="CloudShell" data-lang="Bash"><code>~ $ mysql -h {database-endpoint} -u {user} -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.43 Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type &#39;help;&#39; or &#39;\h&#39; for help. Type &#39;\c&#39; to clear the current input statement.

MySQL [(none)]&gt;</code></pre></div>



<p>うまくログイン出来ない場合は RDS が停止しているか、RDS のセキュリティグループのインバウンドルールが漏れている可能性があります。</p>



<p>mysql コマンドを使って dump データを RDS に流し込みます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-file="CloudShell" data-lang="Bash"><code>~ $ mysql -h {database-endpoint} -u {user} -p &lt; ./world.sql
Enter password: </code></pre></div>



<p>インポートしたデータを確認します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-file="CloudShell" data-lang="Bash"><code>~ $ mysql -h {database-endpoint} -u {user} -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 8.0.43 Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type &#39;help;&#39; or &#39;\h&#39; for help. Type &#39;\c&#39; to clear the current input statement.

MySQL [(none)]&gt; show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| world              |
+--------------------+
5 rows in set (0.005 sec)

MySQL [(none)]&gt; use world
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MySQL [world]&gt; show tables;
+-----------------+
| Tables_in_world |
+-----------------+
| city            |
| country         |
| countrylanguage |
+-----------------+
3 rows in set (0.001 sec)

MySQL [world]&gt; select * from city limit 10;
+----+----------------+-------------+---------------+------------+
| ID | Name           | CountryCode | District      | Population |
+----+----------------+-------------+---------------+------------+
|  1 | Kabul          | AFG         | Kabol         |    1780000 |
|  2 | Qandahar       | AFG         | Qandahar      |     237500 |
|  3 | Herat          | AFG         | Herat         |     186800 |
|  4 | Mazar-e-Sharif | AFG         | Balkh         |     127800 |
|  5 | Amsterdam      | NLD         | Noord-Holland |     731200 |
|  6 | Rotterdam      | NLD         | Zuid-Holland  |     593321 |
|  7 | Haag           | NLD         | Zuid-Holland  |     440900 |
|  8 | Utrecht        | NLD         | Utrecht       |     234323 |
|  9 | Eindhoven      | NLD         | Noord-Brabant |     201843 |
| 10 | Tilburg        | NLD         | Noord-Brabant |     193238 |
+----+----------------+-------------+---------------+------------+
10 rows in set (0.001 sec)

MySQL [world]&gt; </code></pre></div>



<p>問題なくインポートされていることが確認出来ました。</p>



<h2 class="wp-block-heading"><span id="toc11">おわりに</span></h2>



<p>CloudShell であればすぐに起動することが出来ますし、Bastion のように使用していない時間帯に停止する必要も無いので、今回のような用途であれば手軽に始められそうです。欠点としては、操作ログが標準では残らないので、ログを取得する仕組みを自前で用意する必要があることぐらいでしょうか。</p>



<p>最近は簡単な作業であれば CLI で、インフラの構築は CDK を利用することが多く、マネジメントコンソールを開いて CloudShell を使う機会がほとんどありませんでしたが、今後は使う頻度が増えそうです。</p>



<p>ちなみにスマホからも使えれば良いと思ったのですが、現在はモバイルアプリでは使えないようでした。</p>




<a rel="noopener" href="https://docs.aws.amazon.com/ja_jp/cloudshell/latest/userguide/working-with-aws-cloudshell.html#working-with-cloudshell-in-console-mobile-application" title="AWS CloudShell &#27010;&#24565; - AWS CloudShell" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fdocs.aws.amazon.com%2Fja_jp%2Fcloudshell%2Flatest%2Fuserguide%2Fworking-with-aws-cloudshell.html%23working-with-cloudshell-in-console-mobile-application?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">AWS CloudShell &#27010;&#24565; - AWS CloudShell</div><div class="blogcard-snippet external-blogcard-snippet">AWS CloudShell インターフェイスのナビゲーションを示します。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://docs.aws.amazon.com/ja_jp/cloudshell/latest/userguide/working-with-aws-cloudshell.html#working-with-cloudshell-in-console-mobile-application" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">docs.aws.amazon.com</div></div></div></div></a>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>AWS CDK と Bref を用いた Laravel サーバーレス構成 ― Lambda + EFS + SQLite</title>
		<link>https://wptech.kiichiro.work/94slab74qm/</link>
		
		<dc:creator><![CDATA[むらおか]]></dc:creator>
		<pubDate>Wed, 30 Apr 2025 06:26:38 +0000</pubDate>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[Lambda]]></category>
		<category><![CDATA[Laravel]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[TypeScript]]></category>
		<guid isPermaLink="false">https://wptech.kiichiro.work/?p=3700</guid>

					<description><![CDATA[目次 はじめにプロジェクトの概要コンセプト成果物システム構成準備LaravelCDKCDKの実装ネットワークデータストレージアプリケーションWebアプリケーションConsoleアプリケーションデプロイ・動作確認まとめと感 [&#8230;]]]></description>
										<content:encoded><![CDATA[

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4" checked><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">はじめに</a></li><li><a href="#toc2" tabindex="0">プロジェクトの概要</a><ol><li><a href="#toc3" tabindex="0">コンセプト</a></li><li><a href="#toc4" tabindex="0">成果物</a></li><li><a href="#toc5" tabindex="0">システム構成</a></li></ol></li><li><a href="#toc6" tabindex="0">準備</a><ol><li><a href="#toc7" tabindex="0">Laravel</a></li><li><a href="#toc8" tabindex="0">CDK</a></li></ol></li><li><a href="#toc9" tabindex="0">CDKの実装</a><ol><li><a href="#toc10" tabindex="0">ネットワーク</a></li><li><a href="#toc11" tabindex="0">データストレージ</a></li><li><a href="#toc12" tabindex="0">アプリケーション</a><ol><li><a href="#toc13" tabindex="0">Webアプリケーション</a></li><li><a href="#toc14" tabindex="0">Consoleアプリケーション</a></li></ol></li></ol></li><li><a href="#toc15" tabindex="0">デプロイ・動作確認</a></li><li><a href="#toc16" tabindex="0">まとめと感想</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">はじめに</span></h2>



<p>PHPでAWS Lambdaを利用したアプリケーションを構築するには、カスタムランタイムが必要になります。BrefはLambdaでPHPを実行するためのランタイムとLaravel、SymfonyなどのPHPフレームワークとの統合を提供しています。</p>




<a rel="noopener" href="https://bref.sh" title="Bref – Simple and scalable PHP with serverless" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://bref.sh/social-card.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Bref – Simple and scalable PHP with serverless</div><div class="blogcard-snippet external-blogcard-snippet">Bref is a framework to write and deploy serverless PHP applications on AWS Lambda.</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://bref.sh" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">bref.sh</div></div></div></div></a>



<p>本記事では、このBrefを使ったLaravelアプリケーションの環境構築方法を解説していきます。</p>



<h2 class="wp-block-heading"><span id="toc2">プロジェクトの概要</span></h2>



<h3 class="wp-block-heading"><span id="toc3">コンセプト</span></h3>



<p>基本的にBrefはServerless Frameworkを介して利用しますが、今回はAWS CDKにBref用の専用Constructが用意されているので、CDKを利用することにしました。コードベースでのインフラ管理や拡張の容易性もCDKを選定した理由になります。</p>



<p>また、個人のテスト環境として比較的低コストで構築できるように最小構成で実装していきます。</p>



<h3 class="wp-block-heading"><span id="toc4">成果物</span></h3>



<p>完成品は以下に配置してあります。</p>




<a rel="noopener" href="https://github.com/ShotaroMuraoka/cdk-serverless-laravel" title="GitHub - ShotaroMuraoka/cdk-serverless-laravel: Laravel アプリケーションを Bref でサーバーレス化した CDK" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://opengraph.githubassets.com/9e5f1f036341ca90ff4e35999daa9468a3cfc0b7532da531ce456db400428a22/ShotaroMuraoka/cdk-serverless-laravel" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">GitHub - ShotaroMuraoka/cdk-serverless-laravel: Laravel アプリケーションを Bref でサーバーレス化した CDK</div><div class="blogcard-snippet external-blogcard-snippet">Laravel アプリケーションを Bref でサーバーレス化した CDK. Contribute to ShotaroMuraoka/cdk-serverless-laravel development by creating an ac...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://github.com/ShotaroMuraoka/cdk-serverless-laravel" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">github.com</div></div></div></div></a>



<h3 class="wp-block-heading"><span id="toc5">システム構成</span></h3>



<p>システム構成は以下の通りです。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="901" height="461" src="https://wptech.kiichiro.work/wp-content/uploads/2025/04/bref-cdk.png" alt="AWSの構成図。クライアントからはHTTPとaws lambda invokeの線が出ており、それぞれAPI Gateway, Lambda ConsoleFunctionと接続している。API GatewayはApiFunctionと接続している。ApiFunctionとConsoleFunctionはEFSに接続している。API GatewayはAWS Cloudの中、Lambda ApiFunctionとConsoleFunction, EFSはAWS Cloudの中のVPCの中のPrivate subnetの中に配置されている。" class="wp-image-3719" srcset="https://wptech.kiichiro.work/wp-content/uploads/2025/04/bref-cdk.png 901w, https://wptech.kiichiro.work/wp-content/uploads/2025/04/bref-cdk-300x153.png 300w, https://wptech.kiichiro.work/wp-content/uploads/2025/04/bref-cdk-768x393.png 768w" sizes="(max-width: 901px) 100vw, 901px" /></figure>



<p>Lambda関数が2つデプロイされているのは、API Gatewayに統合されているWebアプリケーションと <code>php artisan migrate</code> などを実行するConsoleアプリケーションを分けているためです。EFSは後述しますが、データストレージの役割を担っています。</p>



<h2 class="wp-block-heading"><span id="toc6">準備</span></h2>



<h3 class="wp-block-heading"><span id="toc7">Laravel</span></h3>



<p>Laravel側の作業はBrefに必要なライブラリをインストールするだけです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>% composer require bref/bref bref/laravel-bridge --update-with-dependencies</code></pre></div>



<h3 class="wp-block-heading"><span id="toc8">CDK</span></h3>



<p>CDK側では、BrefのConstructパッケージをインストールします。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>% npm install @bref.sh/constructs</code></pre></div>



<h2 class="wp-block-heading"><span id="toc9">CDKの実装</span></h2>



<p>CDK側の実装を見ていきます。</p>



<h3 class="wp-block-heading"><span id="toc10">ネットワーク</span></h3>



<p>EFSをマウントさせる都合上、VPC Lambdaである必要があります。コスト高になりがちなNAT Gatewayに関しては、今回はLambdaからインターネットに出ていく必要は無いので、作成をしない設定にしています。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-ts" data-file="lib/construct/networking.ts" data-lang="TypeScript"><code>const vpc = new ec2.Vpc(this, &quot;BrefVpc&quot;, {
  maxAzs: 1,
  natGateways: 0,
  restrictDefaultSecurityGroup: true,
  subnetConfiguration: [
    {
      name: &quot;BrefPrivate&quot;,
      subnetType: ec2.SubnetType.PRIVATE_ISOLATED,
    },
  ],
});</code></pre></div>



<h3 class="wp-block-heading"><span id="toc11">データストレージ</span></h3>



<p>RDBのマネージドサービスは高価ですので、Laravelの初期状態で使えるSQLiteを選定し、EFSに <code>database.sqlite</code> ファイルを配置するようにします。冗長化も不要なのでOneZoneを選択しています。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-ts" data-file="lib/construct/datastore.ts" data-lang="TypeScript"><code>const fileSystem = new efs.FileSystem(this, &quot;BrefEfs&quot;, {
  vpc: vpc,
  removalPolicy: cdk.RemovalPolicy.DESTROY,
  performanceMode: efs.PerformanceMode.GENERAL_PURPOSE,
  throughputMode: efs.ThroughputMode.BURSTING,
  oneZone: true,
});

const accessPoint = this.fileSystem.addAccessPoint(&quot;BrefAccessPoint&quot;, {
  path: &quot;/bref&quot;
  createAcl: {
    ownerUid: &quot;1001&quot;,
    ownerGid: &quot;1001&quot;,
    permissions: &quot;750&quot;,
  },
  posixUser: {
    uid: &quot;1001&quot;,
    gid: &quot;1001&quot;,
  },
});</code></pre></div>



<h3 class="wp-block-heading"><span id="toc12">アプリケーション</span></h3>



<p>システム構成の項で紹介した通り、WebアプリケーションとConsoleアプリケーションの2つを用意しています。</p>



<h4 class="wp-block-heading"><span id="toc13">Webアプリケーション</span></h4>



<p>Webアプリケーションでは、Lambda関数とHTTPからのアクセス用にAPI Gatewayを統合します。Lambda関数は <code>@bref.sh/constructs</code> に <code>PhpFpmFunction</code> というBrefのレイヤーを追加したConstructがあるので、これを使用します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-ts" data-file="lib/construct/backend.ts" data-lang="TypeScript"><code>const backendFn = new PhpFpmFunction(this, &quot;BrefApiFunction&quot;, {
  functionName: &quot;ApiFunction&quot;,
  handler: &quot;public/index.php&quot;,
  code: packagePhpCode(&quot;../laravel/&quot;, {
    exclude: [&quot;tests/**&quot;, &quot;var/**&quot;],
  }),
  timeout: cdk.Duration.seconds(28),
  memorySize: 1024,
  vpc: vpc,
  filesystem: lambda.FileSystem.fromEfsAccessPoint(
    accessPoint,
    &quot;/mnt/efs&quot;,
  ),
  environment: {
    APP_ENV: &quot;production&quot;,
    LOG_CHANNEL: &quot;stderr&quot;,
    DB_CONNECTION: &quot;sqlite&quot;,
    DB_DATABASE: &quot;/mnt/efs/database.sqlite&quot;,
  },
  phpVersion: &quot;8.4&quot;,
});

const api = new apigwv2.HttpApi(this, &quot;BrefHttpApi&quot;, {
  defaultIntegration: new integrations.HttpLambdaIntegration(
    &quot;Integration&quot;,
    backendFn,
  ),
});

new cdk.CfnOutput(this, &quot;ApiUrl&quot;, {
  value: api.url!,
});</code></pre></div>



<div class="wp-block-cocoon-blocks-tab-box-1 blank-box bb-tab bb-check block-box">
<p>URLを <code>CfnOutput</code> で出力するとデプロイ後のアクセスが楽になります。</p>
</div>



<h4 class="wp-block-heading"><span id="toc14">Consoleアプリケーション</span></h4>



<p>Brefには、<code>ConsoleFunction</code> というConstructがあります。これは、artisanコマンドを実行するエンドポイントになります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-ts" data-file="lib/construct/artisan.ts" data-lang="TypeScript"><code>new ConsoleFunction(this, &quot;BrefConsoleFunction&quot;, {
  functionName: &quot;ConsoleFunction&quot;,
  handler: &quot;artisan&quot;,
  code: packagePhpCode(&quot;../laravel/&quot;, {
    exclude: [&quot;tests/**&quot;, &quot;var/**&quot;],
  }),
  timeout: cdk.Duration.seconds(28),
  memorySize: 512,
  vpc: vpc,
  filesystem: lambda.FileSystem.fromEfsAccessPoint(
    accessPoint,
    &quot;/mnt/efs&quot;,
  ),
  environment: {
    APP_ENV: &quot;production&quot;,
    LOG_CHANNEL: &quot;stderr&quot;,
    DB_CONNECTION: &quot;sqlite&quot;,
    DB_DATABASE: &quot;/mnt/efs/database.sqlite&quot;,
  },
  phpVersion: &quot;8.4&quot;,
});</code></pre></div>



<div class="wp-block-cocoon-blocks-tab-box-1 blank-box bb-tab bb-check block-box">
<p>artisanコマンドはaws cli経由で実行しますので、<code>functionName</code> を定義しておくと後々便利です。</p>
</div>



<h2 class="wp-block-heading"><span id="toc15">デプロイ・動作確認</span></h2>



<p>デプロイして動作確認してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>% cdk deploy

(略)

Outputs:
BrefStack.ApiUrl = https://example.execute-api.ap-northeast-1.amazonaws.com/
</code></pre></div>



<p>出力されたURLにアクセスしてみます。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="537" src="https://wptech.kiichiro.work/wp-content/uploads/2025/04/e6f5d404fcf83bb886fcbff5cd5339e9-1024x537.png" alt="Internal Server Error のタイトルで、Database file at path [/mnt/efs/database.sqlite] does not exist. のメッセージが出ている。" class="wp-image-3787" srcset="https://wptech.kiichiro.work/wp-content/uploads/2025/04/e6f5d404fcf83bb886fcbff5cd5339e9-1024x537.png 1024w, https://wptech.kiichiro.work/wp-content/uploads/2025/04/e6f5d404fcf83bb886fcbff5cd5339e9-300x157.png 300w, https://wptech.kiichiro.work/wp-content/uploads/2025/04/e6f5d404fcf83bb886fcbff5cd5339e9-768x403.png 768w, https://wptech.kiichiro.work/wp-content/uploads/2025/04/e6f5d404fcf83bb886fcbff5cd5339e9-1536x805.png 1536w, https://wptech.kiichiro.work/wp-content/uploads/2025/04/e6f5d404fcf83bb886fcbff5cd5339e9.png 1618w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>当然、migrationが終わっていないのでエラーが表示されます。ConsoleFunctionを直接実行してmigrationします。aws cliを利用して以下を実行します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>% aws lambda invoke \
     --function-name ConsoleFunction \
     --region ap-northeast-1 \
     --cli-binary-format raw-in-base64-out \
     --payload &#39;&quot;migrate --force&quot;&#39; \
     response.json</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>{
    &quot;StatusCode&quot;: 200,
    &quot;ExecutedVersion&quot;: &quot;$LATEST&quot;
}
</code></pre></div>



<p>Lambdaの実行に問題がなければLaravelの画面が見られるようになるはずです。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="483" src="https://wptech.kiichiro.work/wp-content/uploads/2025/04/deca5a578e8813d0057e8e4cd7a16ea4-1024x483.png" alt="Laravel 12 の初期画面。" class="wp-image-3790" srcset="https://wptech.kiichiro.work/wp-content/uploads/2025/04/deca5a578e8813d0057e8e4cd7a16ea4-1024x483.png 1024w, https://wptech.kiichiro.work/wp-content/uploads/2025/04/deca5a578e8813d0057e8e4cd7a16ea4-300x141.png 300w, https://wptech.kiichiro.work/wp-content/uploads/2025/04/deca5a578e8813d0057e8e4cd7a16ea4-768x362.png 768w, https://wptech.kiichiro.work/wp-content/uploads/2025/04/deca5a578e8813d0057e8e4cd7a16ea4-1536x724.png 1536w, https://wptech.kiichiro.work/wp-content/uploads/2025/04/deca5a578e8813d0057e8e4cd7a16ea4.png 1934w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading"><span id="toc16">まとめと感想</span></h2>



<p>本記事では、BrefをCDKで利用してAWS Lambda上でLaravelを動かしてみました。また、低コストでの構築を目指し、最小構成の形を取りました。</p>



<p>BrefはLaravelアプリケーション側で意識することが少ないですので、かなり手軽にできるんじゃないかと思いました。デプロイパイプラインを整えれば、本番環境にも適用できると思います。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>AWS Certified SysOps Administrator Associate合格までの勉強時間とやったことを振り返る</title>
		<link>https://wptech.kiichiro.work/92q6rj32xh/</link>
		
		<dc:creator><![CDATA[むらおか]]></dc:creator>
		<pubDate>Wed, 02 Apr 2025 05:33:17 +0000</pubDate>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[AWS]]></category>
		<guid isPermaLink="false">https://wptech.kiichiro.work/?p=3666</guid>

					<description><![CDATA[DVA の有効期限が来年に迫っていたので、さっさと SOA を取ってしまおうと重い腰をあげてようやく受験してきました。今回も振り返りをしてみます。 目次 どのような勉強をしたかテキスト公式Skill Builderまとめ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>DVA の有効期限が来年に迫っていたので、さっさと SOA を取ってしまおうと重い腰をあげてようやく受験してきました。今回も振り返りをしてみます。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-6" checked><label class="toc-title" for="toc-checkbox-6">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">どのような勉強をしたか</a><ol><li><a href="#toc2" tabindex="0">テキスト</a></li><li><a href="#toc3" tabindex="0">公式</a><ol><li><a href="#toc4" tabindex="0">Skill Builder</a></li></ol></li></ol></li><li><a href="#toc5" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">どのような勉強をしたか</span></h2>



<p>今回もテキストと公式資料のみを使用するという方法をとりました。</p>



<p>受験を決めてから受験当日まで日が無かったので、今までの試験と比較して勉強時間は極小になっています。</p>



<h3 class="wp-block-heading"><span id="toc2">テキスト</span></h3>



<p><strong>AWS認定資格試験テキスト AWS認定SysOpsアドミニストレーター &#8211; アソシエイト AWS認定資格試験テキスト</strong></p>



<figure class="wp-block-embed is-type-rich is-provider-amazon wp-block-embed-amazon"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="AWS認定資格試験テキスト AWS認定SysOpsアドミニストレーター - アソシエイト AWS認定資格試験テキスト" type="text/html" width="1320" height="550" frameborder="0" allowfullscreen style="max-width:100%" src="https://read.amazon.com.au/kp/card?preview=inline&#038;linkCode=df0&#038;ref_=k4w_oembed_ssB8YP1DkFbtOo&#038;asin=481560908X&#038;tag=jpgo-22"></iframe>
</div></figure>



<p>昨年 SAP の前に受験する前に購入していたものですが、試験内容は当時から変更が無いようなのでそのまま利用しました。このシリーズは鉄板だと思います。</p>



<p>メインで利用するというより、後述の模擬試験実施後に知識が不足している分野を読み込むという使い方をしました。</p>



<h3 class="wp-block-heading"><span id="toc3">公式</span></h3>



<h4 class="wp-block-heading"><span id="toc4">Skill Builder</span></h4>



<p>Skill Builder では、以下の2コース (無料) を実施しました。</p>



<p><strong>AWS Certified SysOps Administrator &#8211; Associate Official Practice Question Set (SOA-C02 &#8211; 日本語)</strong></p>




<a rel="noopener" href="https://explore.skillbuilder.aws/learn/courses/12555/aws-certified-sysops-administrator-associate-official-practice-question-set-soa-c02-ri-ben-yu" title="Self-paced digital training on AWS - AWS Skill Builder" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fexplore.skillbuilder.aws%2Flearn%2Fcourses%2F12555%2Faws-certified-sysops-administrator-associate-official-practice-question-set-soa-c02-ri-ben-yu?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Self-paced digital training on AWS - AWS Skill Builder</div><div class="blogcard-snippet external-blogcard-snippet">Your learning center to build in-demand cloud skills.</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://explore.skillbuilder.aws/learn/courses/12555/aws-certified-sysops-administrator-associate-official-practice-question-set-soa-c02-ri-ben-yu" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">explore.skillbuilder.aws</div></div></div></div></a>



<p><strong>Exam Prep Standard Course: AWS Certified SysOps Administrator &#8211; Associate (SOA-C02) (日本語実写版)</strong></p>




<a rel="noopener" href="https://explore.skillbuilder.aws/learn/courses/14901/exam-prep-standard-course-aws-certified-sysops-administrator-associate-soa-c02-ri-ben-yu-shi-xie-ban" title="Self-paced digital training on AWS - AWS Skill Builder" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fexplore.skillbuilder.aws%2Flearn%2Fcourses%2F14901%2Fexam-prep-standard-course-aws-certified-sysops-administrator-associate-soa-c02-ri-ben-yu-shi-xie-ban?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Self-paced digital training on AWS - AWS Skill Builder</div><div class="blogcard-snippet external-blogcard-snippet">Your learning center to build in-demand cloud skills.</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://explore.skillbuilder.aws/learn/courses/14901/exam-prep-standard-course-aws-certified-sysops-administrator-associate-soa-c02-ri-ben-yu-shi-xie-ban" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">explore.skillbuilder.aws</div></div></div></div></a>



<p>まずはこれらを実施し、不明瞭な分野をテキストや公式ドキュメントで補完するという方法を取りました。</p>



<h2 class="wp-block-heading"><span id="toc5">まとめ</span></h2>



<p>なんとか合格しましたが、準備不足だったなという感がありました。特に選択肢の絞り込みでは、最後の2択を選び切れないというケースが多々あり、もう一回受けて合格できる自信はないです。</p>



<p>順序的に DOP を次に計画しているのですが、3ヶ月くらいはしっかり準備をしたいと思います。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Lambda Web AdapterでRemixアプリケーションをサーバーレス化してCDKでデプロイする</title>
		<link>https://wptech.kiichiro.work/617bivwxur/</link>
		
		<dc:creator><![CDATA[むらおか]]></dc:creator>
		<pubDate>Thu, 11 Jul 2024 09:08:50 +0000</pubDate>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Lambda]]></category>
		<category><![CDATA[React]]></category>
		<category><![CDATA[Remix]]></category>
		<guid isPermaLink="false">https://wptech.kiichiro.work/?p=3178</guid>

					<description><![CDATA[既存の Web フレームワークを Lambda に組み込む方法として Lambda Web Adapter というのがあります。 Lambda Web Adapter でウェブアプリを (ほぼ) そのままサーバーレス化す [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>既存の Web フレームワークを Lambda に組み込む方法として Lambda Web Adapter というのがあります。</p>




<a rel="noopener" href="https://aws.amazon.com/jp/builders-flash/202301/lambda-web-adapter" title="Lambda Web Adapter でウェブアプリを (ほぼ) そのままサーバーレス化する (2025 年改訂版)  - 変化を求めるデベロッパーを応援するウェブマガジン | AWS" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://d1.awsstatic.com/Developer%20Marketing/jp/magazine/2025/202504/thumb_lambda-web-adapter_2025.eaa3dee4029c2885d864b4da103ab18cd6b2b4f9.jpg" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Lambda Web Adapter でウェブアプリを (ほぼ) そのままサーバーレス化する (2025 年改訂版)  - 変化を求めるデベロッパーを応援するウェブマガジン | AWS</div><div class="blogcard-snippet external-blogcard-snippet">VM やコンテナ用に実装されたウェブアプリを、ほとんどそのまま Lambda でも動かせる AWS Lambda Web Adapter について、新しい実装パターンを含めた使い方、仕組みや対応する Web フレームワーク、性能をご紹介しま...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://aws.amazon.com/jp/builders-flash/202301/lambda-web-adapter/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">aws.amazon.com</div></div></div></div></a>




<a rel="noopener" href="https://github.com/awslabs/aws-lambda-web-adapter" title="GitHub - awslabs/aws-lambda-web-adapter: Run web applications on AWS Lambda" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://opengraph.githubassets.com/d477a0d6d3e245d785d915f1b8b645c121d6d8cd3e618243358d4ae6e1b114cb/awslabs/aws-lambda-web-adapter" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">GitHub - awslabs/aws-lambda-web-adapter: Run web applications on AWS Lambda</div><div class="blogcard-snippet external-blogcard-snippet">Run web applications on AWS Lambda. Contribute to awslabs/aws-lambda-web-adapter development by creating an account on G...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://github.com/awslabs/aws-lambda-web-adapter" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">github.com</div></div></div></div></a>



<p>その仕組みですが、API Gateway などの統合先から受信したイベントをフレームワークの手前にある Lambda Web Adapter のエントリポイントが HTTP リクエストに変換して、フレームワークに渡してくれる、というイメージで良さそうです。</p>



<p>公式の実装例では、Node.js であれば Next.js と Express.js が対応していますが、HTTP であればどのようなフレームワークも動作するはずです。</p>



<p>今回はこれを使って Remix アプリをサーバーレス化してみました。既に作ったものは GitHub にあげてあります。</p>




<a rel="noopener" href="https://github.com/ShotaroMuraoka/cdk-serverless-remix" title="GitHub - ShotaroMuraoka/cdk-serverless-remix: Remix アプリケーションを Lambda Web Adapter でサーバーレス化した CDK" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://opengraph.githubassets.com/7e2f8909af7deb175a15b54c16dbbb4c74009bec87bc2f528dea48788888602f/ShotaroMuraoka/cdk-serverless-remix" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">GitHub - ShotaroMuraoka/cdk-serverless-remix: Remix アプリケーションを Lambda Web Adapter でサーバーレス化した CDK</div><div class="blogcard-snippet external-blogcard-snippet">Remix アプリケーションを Lambda Web Adapter でサーバーレス化した CDK. Contribute to ShotaroMuraoka/cdk-serverless-remix development by crea...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://github.com/ShotaroMuraoka/cdk-serverless-remix" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">github.com</div></div></div></div></a>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-8" checked><label class="toc-title" for="toc-checkbox-8">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">CDKの準備</a></li><li><a href="#toc2" tabindex="0">Remixアプリケーションの作成</a></li><li><a href="#toc3" tabindex="0">デプロイ</a></li><li><a href="#toc4" tabindex="0">参考資料</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">CDKの準備</span></h2>



<p>デプロイの方法は CDK にしました。init で新しいプロジェクトを作成しておきます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>$ cdk --version
2.148.0 (build e5740c0)

$ cdk init app --language typescript</code></pre></div>



<p>今回は HTTP リクエストを受け付けるので、API Gateway と統合します。Stack は以下からお借りしました。</p>



<figure class="wp-block-embed is-type-rich is-provider-hatena-blog wp-block-embed-hatena-blog"><div class="wp-block-embed__wrapper">
<iframe title="AWS Lambda Web AdapterでServerless Next.jsを実現する  - Activ8 Tech Blog" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fsynamon.hatenablog.com%2Fentry%2F2023%2F07%2F18%2F080000" class="embed-card embed-blogcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;"></iframe>
</div></figure>



<div class="hcb_wrap"><pre class="prism line-numbers lang-ts" data-file="my-lambda-stack.ts" data-lang="TypeScript"><code>import * as cdk from &#39;aws-cdk-lib&#39;;
import { Construct } from &#39;constructs&#39;;
import * as lambda from &#39;aws-cdk-lib/aws-lambda&#39;;
import { Platform } from &#39;aws-cdk-lib/aws-ecr-assets&#39;;
import * as apigw from &#39;aws-cdk-lib/aws-apigatewayv2&#39;;
import { HttpLambdaIntegration } from &#39;aws-cdk-lib/aws-apigatewayv2-integrations&#39;;

export class MyLambdaStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);
    const handler = new lambda.DockerImageFunction(this, &#39;Handler&#39;, {
      code: lambda.DockerImageCode.fromImageAsset(&#39;./my-remix&#39;, { // Remix アプリケーションのディレクトリ名とする
        platform: Platform.LINUX_AMD64,
      }),
      memorySize: 256,
      timeout: cdk.Duration.seconds(30),
    });

    new apigw.HttpApi(this, &#39;Api&#39;, {
      apiName: &#39;MyLambdaRemix&#39;,
      defaultIntegration: new HttpLambdaIntegration(&#39;Integration&#39;, handler),
    });
  }
}
</code></pre></div>



<h2 class="wp-block-heading"><span id="toc2">Remixアプリケーションの作成</span></h2>



<p>CDK のプロジェクトルートで Remix アプリを作成します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>$ npx create-remix@latest</code></pre></div>



<p>Remix アプリのルートに Dockerfile を作成します。Remix に対応した Dockerfile を作成したことがなかったので、以下を参考にそれっぽく書いてみました。</p>




<a rel="noopener" href="https://github.com/clintonwoo/hackernews-remix-react/blob/main/Dockerfile" title="hackernews-remix-react/Dockerfile at main · clintonwoo/hackernews-remix-react" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://opengraph.githubassets.com/9f4b585a4145808d862d74acfde120c24aa19eb58f0d39f34c2549a48ecc5e13/clintonwoo/hackernews-remix-react" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">hackernews-remix-react/Dockerfile at main · clintonwoo/hackernews-remix-react</div><div class="blogcard-snippet external-blogcard-snippet">Hacker News clone written with universal TypeScript, using React and Remix. - clintonwoo/hackernews-remix-react</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://github.com/clintonwoo/hackernews-remix-react/blob/main/Dockerfile" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">github.com</div></div></div></div></a>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash" data-line="23, 40"><code>FROM node:22-bookworm-slim AS base

FROM base AS deps
RUN mkdir /app
WORKDIR /app

COPY package.json package-lock.json ./
RUN npm ci

FROM base AS builder

RUN mkdir /app
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .

ENV NODE_ENV production
RUN npm run build

FROM base AS runner

# lambda-web-adapter
COPY --from=public.ecr.aws/awsguru/aws-lambda-adapter:0.5.0 /lambda-adapter /opt/extensions/lambda-adapter

RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 remix

RUN mkdir /app
WORKDIR /app

RUN chown remix:nodejs ./
USER remix

COPY --from=builder --chown=remix:nodejs /app/node_modules ./node_modules
COPY --from=builder --chown=remix:nodejs /app/build ./build
COPY --from=builder --chown=remix:nodejs /app/public ./public
COPY --from=builder --chown=remix:nodejs /app/package.json /app/package-lock.json ./

ENV NODE_ENV production
ENV PORT 3000
EXPOSE 3000

CMD [&quot;npm&quot;, &quot;run&quot;, &quot;start&quot;]</code></pre></div>



<p>ここでは Lambda Web Adapter のために難しい記述をする必要はありません。ローカルでも ECS でも動くコンテナイメージであれば、Lambda Web Adapter で動作するようです。</p>



<p>追記が必要なのは Lambda の extension を追加するというところのみです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>COPY --from=public.ecr.aws/awsguru/aws-lambda-adapter:0.5.0 /lambda-adapter /opt/extensions/lambda-adapter</code></pre></div>



<p>また、デフォルトでは 8080 でポートを Listen しているので、変更する場合は PORT を指定します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>ENV PORT 3000</code></pre></div>



<h2 class="wp-block-heading"><span id="toc3">デプロイ</span></h2>



<p>CDK のルートディレクトリでデプロイを実行します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>$ cdk deploy</code></pre></div>



<p>管理コンソールから API Gateway の画面を確認すると、作成した API Gateway のエンドポイントが作成されています。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="384" src="https://wptech.kiichiro.work/wp-content/uploads/2024/07/24ba3ff1ffab27bfd8a591fc1c9770c3-1024x384.png" alt="AWS の管理コンソールで API Gateway &gt; API &gt; MyLambdaRemixの画面を開いている。エンドポイントが有効になっており、リンクが表示されている" class="wp-image-3225" srcset="https://wptech.kiichiro.work/wp-content/uploads/2024/07/24ba3ff1ffab27bfd8a591fc1c9770c3-1024x384.png 1024w, https://wptech.kiichiro.work/wp-content/uploads/2024/07/24ba3ff1ffab27bfd8a591fc1c9770c3-300x112.png 300w, https://wptech.kiichiro.work/wp-content/uploads/2024/07/24ba3ff1ffab27bfd8a591fc1c9770c3-768x288.png 768w, https://wptech.kiichiro.work/wp-content/uploads/2024/07/24ba3ff1ffab27bfd8a591fc1c9770c3-1536x576.png 1536w, https://wptech.kiichiro.work/wp-content/uploads/2024/07/24ba3ff1ffab27bfd8a591fc1c9770c3-2048x768.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>デフォルトのエンドポイントの URL をクリックして Remix アプリの画面が表示されていれば OK です。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="952" height="502" src="https://wptech.kiichiro.work/wp-content/uploads/2024/07/5a7c608aaf71c8c8671576d79db1798d.png" alt="Remix の初期の画面で、Welcome to Remix と表示されている" class="wp-image-3228" srcset="https://wptech.kiichiro.work/wp-content/uploads/2024/07/5a7c608aaf71c8c8671576d79db1798d.png 952w, https://wptech.kiichiro.work/wp-content/uploads/2024/07/5a7c608aaf71c8c8671576d79db1798d-300x158.png 300w, https://wptech.kiichiro.work/wp-content/uploads/2024/07/5a7c608aaf71c8c8671576d79db1798d-768x405.png 768w" sizes="(max-width: 952px) 100vw, 952px" /></figure>



<h2 class="wp-block-heading"><span id="toc4">参考資料</span></h2>




<a rel="noopener" href="https://serverless.co.jp/blog/g30vzpio0ww" title="Dockerを使わない、Remix / Next.js 14 など最新ウェブフレームワークのAWS完全サーバーレス構成と環境構築方法 | ブログ | Serverless Operations" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://images.microcms-assets.io/assets/7c0b324145eb4ee6bd26d44022795cf4/219c94fc1d5b45038289ecdb40b09463/overview.png?w=1200&#038;fm=webp&#038;q=80" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Dockerを使わない、Remix / Next.js 14 など最新ウェブフレームワークのAWS完全サーバーレス構成と環境構築方法 | ブログ | Serverless Operations</div><div class="blogcard-snippet external-blogcard-snippet">（※ 2025/01/31 追記）この記事の後続編として、React Router v7 と Next.js 15 を利用する構成の詳細な構築手順について、こちらの記事（</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://serverless.co.jp/blog/g30vzpio0ww" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">serverless.co.jp</div></div></div></div></a>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>もっと簡単に AWS CodePipeline でサブモジュールを使う</title>
		<link>https://wptech.kiichiro.work/955bzoic7z/</link>
		
		<dc:creator><![CDATA[むらおか]]></dc:creator>
		<pubDate>Fri, 29 Mar 2024 01:20:23 +0000</pubDate>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[AWS]]></category>
		<guid isPermaLink="false">https://wptech.kiichiro.work/?p=2966</guid>

					<description><![CDATA[数年前に投稿した AWS CodePipeline でサブモジュールを使う方法を力技ではなくてもっと簡単にできる方法があったので紹介していきます。 何ができるようになったか？ ソースステージで git リポジトリのメタデ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>数年前に投稿した AWS CodePipeline でサブモジュールを使う方法を力技ではなくてもっと簡単にできる方法があったので紹介していきます。</p>



<figure class="wp-block-embed is-type-wp-embed"><div class="wp-block-embed__wrapper">

<a href="https://wptech.kiichiro.work/post-56" title="AWS CodePipelineでサブモジュールを使う" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="75" height="90" src="https://wptech.kiichiro.work/wp-content/uploads/2020/11/CodeBuild.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">AWS CodePipelineでサブモジュールを使う</div><div class="blogcard-snippet internal-blogcard-snippet">本投稿は数年前に書かれたものですので、情報が古いです。以下の投稿はもっと新しい情報で書かれていますので、併せてご参照ください。過去のプロジェクトでCodePipelineでサブモジュール入りのリポジトリをcloneしようと思ったときに一日頭...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://wptech.kiichiro.work" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">wptech.kiichiro.work</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2020.11.09</div></div></div></div></a>
</div></figure>



<h2 class="wp-block-heading">何ができるようになったか？</h2>



<p>ソースステージで git リポジトリのメタデータを取得することができるようになっていたようです。</p>





<a rel="noopener" href="https://aws.amazon.com/jp/about-aws/whats-new/2020/11/aws-codepipeline-source-action-aws-codecommit-supports-git-clone" title="AWS CodeCommit の AWS CodePipeline ソースアクションで git クローンのサポートを開始 " class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://a0.awsstatic.com/libra-css/images/logos/aws_logo_smile_1200x630.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">AWS CodeCommit の AWS CodePipeline ソースアクションで git クローンのサポートを開始 </div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://aws.amazon.com/jp/about-aws/whats-new/2020/11/aws-codepipeline-source-action-aws-codecommit-supports-git-clone/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">aws.amazon.com</div></div></div></div></a>






<a rel="noopener" href="https://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/tutorials-codecommit-gitclone.html" title="&#12481;&#12517;&#12540;&#12488;&#12522;&#12450;&#12523;: CodeCommit &#12497;&#12452;&#12503;&#12521;&#12452;&#12531;&#12477;&#12540;&#12473;&#12391;&#12501;&#12523;&#12463;&#12525;&#12540;&#12531;&#12434;&#20351;&#29992;&#12377;&#12427; - AWS CodePipeline" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fdocs.aws.amazon.com%2Fja_jp%2Fcodepipeline%2Flatest%2Fuserguide%2Ftutorials-codecommit-gitclone.html?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">&#12481;&#12517;&#12540;&#12488;&#12522;&#12450;&#12523;: CodeCommit &#12497;&#12452;&#12503;&#12521;&#12452;&#12531;&#12477;&#12540;&#12473;&#12391;&#12501;&#12523;&#12463;&#12525;&#12540;&#12531;&#12434;&#20351;&#29992;&#12377;&#12427; - AWS CodePipeline</div><div class="blogcard-snippet external-blogcard-snippet">CodePipeline に CodeCommit ソースアクションを追加して、CodeBuild がパイプライン構築アクションで Git メタデータにアクセスできるようにします。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/tutorials-codecommit-gitclone.html" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">docs.aws.amazon.com</div></div></div></div></a>




<p>CodePipeline の [出力アーティファクト形式] で [完全クローン] を選択するだけで利用できます。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="170" src="https://wptech.kiichiro.work/wp-content/uploads/2024/03/artifact-type-1024x170.png" alt="出力アーティファクト形式で完全クローンを選択している" class="wp-image-2973" srcset="https://wptech.kiichiro.work/wp-content/uploads/2024/03/artifact-type-1024x170.png 1024w, https://wptech.kiichiro.work/wp-content/uploads/2024/03/artifact-type-300x50.png 300w, https://wptech.kiichiro.work/wp-content/uploads/2024/03/artifact-type-768x127.png 768w, https://wptech.kiichiro.work/wp-content/uploads/2024/03/artifact-type-1536x255.png 1536w, https://wptech.kiichiro.work/wp-content/uploads/2024/03/artifact-type.png 1870w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>これにより、submodule を sync するためだけにメインのリポジトリを clone し直す必要がなくなったのです。</p>



<p>CodeBuild で利用する場合の Buildspec は以下です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>version: 0.2

phases:
  pre_build:
    commands:
      - git config --global credential.helper &#39;!aws codecommit credential-helper $@&#39;
      - git config --global credential.UseHttpPath true
      - git submodule sync
      - git submodule update --init
artifacts:
  files:
    - &#39;**/*&#39;</code></pre></div>



<p>前回のものと比べると短くなってスッキリしました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>AWS Solutions Architect Professional合格までの勉強時間とやったことを振り返る</title>
		<link>https://wptech.kiichiro.work/12zu3qqo7s/</link>
		
		<dc:creator><![CDATA[むらおか]]></dc:creator>
		<pubDate>Tue, 26 Mar 2024 14:19:20 +0000</pubDate>
				<category><![CDATA[その他]]></category>
		<category><![CDATA[AWS]]></category>
		<guid isPermaLink="false">https://wptech.kiichiro.work/?p=2930</guid>

					<description><![CDATA[昨年中に SOA を受験して先に Associate を取り切ろうと思ったのですが、都合により受験ができず、今年が SAA の有効期限だったので勢いで SAP を受験しました。 更に「落ちたら2回目は無料」という再受験キ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>昨年中に SOA を受験して先に Associate を取り切ろうと思ったのですが、都合により受験ができず、今年が SAA の有効期限だったので勢いで SAP を受験しました。</p>



<p>更に「落ちたら2回目は無料」という再受験キャンペーンなるものがやっていたので、1回目は記念受験のつもりでいったら合格できてしまいました。2回も受けなくて良かったと安堵しています。</p>



<p>今回も受験までの取り組みを振り返ってみようと思います。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-12" checked><label class="toc-title" for="toc-checkbox-12">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">どのような勉強をしたか</a><ol><li><a href="#toc2" tabindex="0">テキスト</a></li><li><a href="#toc3" tabindex="0">公式</a></li></ol></li><li><a href="#toc4" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">どのような勉強をしたか</span></h2>



<p>SAA, DVA で散々お世話になった Udemy ですが、SAP の日本語教材が見当たらなかったので今回は使用しませんでした。それ以外はテキストをメインに公式資料を補助的に使うという方法を取りました。</p>



<h3 class="wp-block-heading"><span id="toc2">テキスト</span></h3>



<p><strong>AWS認定資格試験テキスト＆問題集　AWS認定ソリューションアーキテクト &#8211; プロフェッショナル　改訂第2版 (ＡＷＳ認定資格試験テキスト)&nbsp;</strong></p>



<figure class="wp-block-embed aligncenter is-type-rich is-provider-amazon wp-block-embed-amazon"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="AWS認定資格試験テキスト＆問題集　AWS認定ソリューションアーキテクト - プロフェッショナル　改訂第2版 (ＡＷＳ認定資格試験テキスト)" type="text/html" width="1320" height="550" frameborder="0" allowfullscreen style="max-width:100%" src="https://read.amazon.com.au/kp/card?preview=inline&#038;linkCode=kpd&#038;ref_=k4w_oembed_e0wWFnnx2LgIcF&#038;asin=4815617929&#038;tag=kpembed-20"></iframe>
</div></figure>



<p>前回の DVA のテキストが網羅性が高く自分に合っていたので、今回も同じ著者 (山下 光洋氏) のものを購入しました。メインのテキストはこれ1冊で十分です。サービス単体の解説だけでなく、よくある複数サービスの組み合わせの例示があったので、記憶に残りやすかったかなと思います。</p>



<p>とにかく SAP の試験範囲は広かったので、最初にこのテキストを読み込んで対象範囲を浅く理解するところから始めたのが良かったかと思います。</p>



<p><strong>Amazon Web Services基礎からのネットワーク＆サーバー構築改訂４版</strong></p>



<figure class="wp-block-embed aligncenter is-type-rich is-provider-amazon wp-block-embed-amazon"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Amazon Web Services基礎からのネットワーク＆サーバー構築改訂４版" type="text/html" width="1320" height="550" frameborder="0" allowfullscreen style="max-width:100%" src="https://read.amazon.com.au/kp/card?preview=inline&#038;linkCode=kpd&#038;ref_=k4w_oembed_Ikjur1cE9wiCuQ&#038;asin=4296202049&#038;tag=kpembed-20"></iframe>
</div></figure>



<p>正確には試験対策で読んでいた本ではなく、なんとなくでやっていたネットワーク周りの理解を改めるために読んでいたのですが、SAP の試験範囲にネットワーク接続戦略があったので読んでおいて良かったです。</p>



<p><strong>AWSコスト最適化ガイドブック</strong></p>



<figure class="wp-block-embed aligncenter is-type-rich is-provider-amazon wp-block-embed-amazon"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="AWSコスト最適化ガイドブック" type="text/html" width="1320" height="550" frameborder="0" allowfullscreen style="max-width:100%" src="https://read.amazon.com.au/kp/card?preview=inline&#038;linkCode=kpd&#038;ref_=k4w_oembed_Ost4Mg7nVscVgd&#038;asin=B0BYC5H9G8&#038;tag=kpembed-20"></iframe>
</div></figure>



<p>こちらも試験対策本ではありません。ただ積読を解消するために読んでいました。</p>



<p>SAP の試験ガイドを見ると、各分野でコスト管理の知識を求めていますので、コスト関連を広く理解するのに良かったです。前半のコスト可視化のところだけでも読んでおいて損はないでしょう。</p>



<h3 class="wp-block-heading"><span id="toc3">公式</span></h3>



<p>公式のコンテンツは DVA 受験時と同様で以下を利用していました。</p>



<ul class="wp-block-list">
<li>Black Belt オンラインセミナー</li>



<li>Whitepapers</li>



<li>Skill Builder の公式問題集</li>
</ul>



<p>それらに加えて今回は re:post を活用してみました。</p>




<a rel="noopener" href="https://repost.aws/ja" title="AWSの専門家による解決策と信頼性の高い情報へのアクセス - AWS re:Post" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://wptech.kiichiro.work/wp-content/uploads/cocoon-resources/blog-card-cache/c94cb44bac0b155cad9e923137017c79.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">AWSの専門家による解決策と信頼性の高い情報へのアクセス - AWS re:Post</div><div class="blogcard-snippet external-blogcard-snippet">専門家が評価した回答と信頼性の高いAWS技術コンテンツにアクセスできます。 AWS re:PostですべてのAWSクラウドサービスに関する検証済みソリューション、AWS 公式情報、信頼できる技術ガイダンスを検索できます</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://repost.aws/ja" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">repost.aws</div></div></div></div></a>



<p>re:post は質問集で構成されていて、サービスを利用した際の困りごとと解消方法が記載されています。特に AWS 公式が回答しているものは、解決に至るまでの詳細な手順が書いてあります。</p>



<p>今回の試験対策としては、あまり利用したことのないサービスがテキストや問題集で出てきた際に検索する、という使い方をしていました。</p>



<h2 class="wp-block-heading"><span id="toc4">まとめ</span></h2>



<p>合格はしたものの流石に Professional レベルは難しかったです。何より問題文と選択肢の文章が長く、試験時間も180分で長時間集中するのが大変でした。時間配分としては、1周回答するのに120分弱、見直しに40分程度で20分残しという感じです。</p>



<p>冒頭にも書きましたが、今回は受かるつもりで勉強を進めておらず、試験対策をした感じはあまりありませんでした。一応、試験対策テキストを1周は読み込みましたが、上記に上げた他の2冊は対策として読んでいたわけではないですし、公式コンテンツをうろうろしている時間が結構長かった気がします。逆にそれが良かったのかもしれません。</p>



<p>次は SOA にするか、Speciality に手を出すか悩み中です。。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>JetBrains GatewayでAmazon CodeCatalystに接続してリモート開発する方法</title>
		<link>https://wptech.kiichiro.work/32v7pgvsjx/</link>
		
		<dc:creator><![CDATA[むらおか]]></dc:creator>
		<pubDate>Fri, 09 Jun 2023 08:09:45 +0000</pubDate>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[JetBrains]]></category>
		<guid isPermaLink="false">https://wptech.kiichiro.work/?p=1646</guid>

					<description><![CDATA[目次 概要手順JetBrains GatewayのインストールAWS Builder IDでログインする開発環境を作成する開発環境を削除する 概要 Amazon CodeCatalyst(以下、CodeCatalyst) [&#8230;]]]></description>
										<content:encoded><![CDATA[

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-14" checked><label class="toc-title" for="toc-checkbox-14">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">概要</a></li><li><a href="#toc2" tabindex="0">手順</a><ol><li><a href="#toc3" tabindex="0">JetBrains Gatewayのインストール</a></li><li><a href="#toc4" tabindex="0">AWS Builder IDでログインする</a></li><li><a href="#toc5" tabindex="0">開発環境を作成する</a></li><li><a href="#toc6" tabindex="0">開発環境を削除する</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">概要</span></h2>



<p>Amazon CodeCatalyst(以下、CodeCatalyst)は、AWS re:invent 2022にて発表された開発にまつわる様々な管理ツールを統合したサービスです。現在はパブリックプレビュー版とのことで、us-west-2のみで使用できます。</p>



<p>JetBrains Gatewayはクラウド上に構成された開発環境に接続して、プロジェクト管理、開発、実行などをサポートするツールです。標準のプロバイダーとしてCodeCatalystが選択できるようになっています。また、ローカルでPhpStormなどのJetBrains製IDEを使用するのに比べて、JetBrains Gatewayでリモート環境で開発すると、かなりPCのメモリ使用量の削減が期待できます。</p>



<p>本稿では、JetBrains Gatewayを使ってCodeCatalystと連携した開発環境を構築する方法を記載していきます。</p>



<h2 class="wp-block-heading"><span id="toc2">手順</span></h2>



<p>JetBrains GatewayでCodeCatalystと連携するには、あらかじめCodeCatalystでリポジトリまで用意しておく必要があります (詳細な説明はここでは省略します)。</p>



<p>また、AWS Builder IDも必要となりますので、こちらもあらかじめ作成しておきましょう。</p>




<a rel="noopener" href="https://docs.aws.amazon.com/ja_jp/signin/latest/userguide/sign-in-aws_builder_id.html" title="&#12391;&#12469;&#12452;&#12531;&#12452;&#12531;&#12377;&#12427; AWS &#12499;&#12523;&#12480;&#12540; ID - AWS &#12469;&#12452;&#12531;&#12452;&#12531;" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fdocs.aws.amazon.com%2Fja_jp%2Fsignin%2Flatest%2Fuserguide%2Fsign-in-aws_builder_id.html?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">&#12391;&#12469;&#12452;&#12531;&#12452;&#12531;&#12377;&#12427; AWS &#12499;&#12523;&#12480;&#12540; ID - AWS &#12469;&#12452;&#12531;&#12452;&#12531;</div><div class="blogcard-snippet external-blogcard-snippet">の概要 AWS ビルダー ID と使用方法を説明します。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://docs.aws.amazon.com/ja_jp/signin/latest/userguide/sign-in-aws_builder_id.html" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">docs.aws.amazon.com</div></div></div></div></a>



<h3 class="wp-block-heading"><span id="toc3">JetBrains Gatewayのインストール</span></h3>



<p>以下より、インストーラをダウンロードしてインストールします。</p>




<a rel="noopener" href="https://www.jetbrains.com/remote-development/gateway/#version20223" title="JetBrains Gateway - Remote Development for JetBrains IDEs" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://resources.jetbrains.com/storage/products/remote-development/img/meta/preview_gateway.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">JetBrains Gateway - Remote Development for JetBrains IDEs</div><div class="blogcard-snippet external-blogcard-snippet">Get started with remote development workflows from your favorite IDE in no time.</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.jetbrains.com/remote-development/gateway/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">www.jetbrains.com</div></div></div></div></a>



<p>現在はベータ版のようでBETAの表記があります。</p>



<p>インストールが完了したらJetBrains Gatewayを起動しましょう。</p>



<h3 class="wp-block-heading"><span id="toc4">AWS Builder IDでログインする</span></h3>



<p>JetBrains Gatewayを起動すると、ConnectionsにAmazon CodeCatalystが表示されているのを確認できます。</p>



<p>「Login to AWS Builder ID」ボタンが表示されていますが、CodeCatalystへは、AWS Toolkit for JetBrainsを使用して接続するようですので、AWS Builder IDで認証する必要があります。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="856" src="https://wptech.kiichiro.work/wp-content/uploads/2023/06/4cf3ac70d31296bfc55d6a5bc683be06-1024x856.png" alt="" class="wp-image-1706" srcset="https://wptech.kiichiro.work/wp-content/uploads/2023/06/4cf3ac70d31296bfc55d6a5bc683be06-1024x856.png 1024w, https://wptech.kiichiro.work/wp-content/uploads/2023/06/4cf3ac70d31296bfc55d6a5bc683be06-300x251.png 300w, https://wptech.kiichiro.work/wp-content/uploads/2023/06/4cf3ac70d31296bfc55d6a5bc683be06-768x642.png 768w, https://wptech.kiichiro.work/wp-content/uploads/2023/06/4cf3ac70d31296bfc55d6a5bc683be06-1536x1283.png 1536w, https://wptech.kiichiro.work/wp-content/uploads/2023/06/4cf3ac70d31296bfc55d6a5bc683be06.png 1824w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>ボタンを押下してBuilder IDでログインしましょう。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="856" src="https://wptech.kiichiro.work/wp-content/uploads/2023/06/234eb29f6be12611f6a3b46e36243b37-1024x856.png" alt="" class="wp-image-1705" srcset="https://wptech.kiichiro.work/wp-content/uploads/2023/06/234eb29f6be12611f6a3b46e36243b37-1024x856.png 1024w, https://wptech.kiichiro.work/wp-content/uploads/2023/06/234eb29f6be12611f6a3b46e36243b37-300x251.png 300w, https://wptech.kiichiro.work/wp-content/uploads/2023/06/234eb29f6be12611f6a3b46e36243b37-768x642.png 768w, https://wptech.kiichiro.work/wp-content/uploads/2023/06/234eb29f6be12611f6a3b46e36243b37-1536x1283.png 1536w, https://wptech.kiichiro.work/wp-content/uploads/2023/06/234eb29f6be12611f6a3b46e36243b37.png 1824w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>ログインに成功すると、あらかじめCodeCatalystで作成しておいたProjectsが表示されます。</p>



<h3 class="wp-block-heading"><span id="toc5">開発環境を作成する</span></h3>



<p>次に、開発環境となるコンピューティングリソースを用意します。<br>「Create Dev Environment」を押下すると、開発環境のスペックなどの設定を行うことができます。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="796" src="https://wptech.kiichiro.work/wp-content/uploads/2023/06/69f62b1e9a88b6f4e63b8158f3636ef0-1024x796.png" alt="開発環境として構築するコンピューティングリソースのスペックを選択できる" class="wp-image-1679" srcset="https://wptech.kiichiro.work/wp-content/uploads/2023/06/69f62b1e9a88b6f4e63b8158f3636ef0-1024x796.png 1024w, https://wptech.kiichiro.work/wp-content/uploads/2023/06/69f62b1e9a88b6f4e63b8158f3636ef0-300x233.png 300w, https://wptech.kiichiro.work/wp-content/uploads/2023/06/69f62b1e9a88b6f4e63b8158f3636ef0-768x597.png 768w, https://wptech.kiichiro.work/wp-content/uploads/2023/06/69f62b1e9a88b6f4e63b8158f3636ef0-1536x1194.png 1536w, https://wptech.kiichiro.work/wp-content/uploads/2023/06/69f62b1e9a88b6f4e63b8158f3636ef0.png 1598w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>JetBrains製IDEは現時点ではIntelliJ IDEA, GoLand, PyCharmのみのようです。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="892" height="346" src="https://wptech.kiichiro.work/wp-content/uploads/2023/06/2ef8294ad8187fba7eb991eb82cb5087.png" alt="CodeCatalystで使用できるJetBrains製品はIntelliJ IDEA, GoLand, PyCharmの3つ" class="wp-image-1677" srcset="https://wptech.kiichiro.work/wp-content/uploads/2023/06/2ef8294ad8187fba7eb991eb82cb5087.png 892w, https://wptech.kiichiro.work/wp-content/uploads/2023/06/2ef8294ad8187fba7eb991eb82cb5087-300x116.png 300w, https://wptech.kiichiro.work/wp-content/uploads/2023/06/2ef8294ad8187fba7eb991eb82cb5087-768x298.png 768w" sizes="(max-width: 892px) 100vw, 892px" /></figure>



<p>今回はすべて初期値のまま、「Create Dev Environment」を押下します。<br>しばらく時間を置くとIntelliJ IDEAがダウンロードされ、JetBrains Clientが起動します。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="514" src="https://wptech.kiichiro.work/wp-content/uploads/2023/06/8a358764d217f2ed78531728cd7dc235-1024x514.png" alt="JetBrains Clientが起動する" class="wp-image-1689" srcset="https://wptech.kiichiro.work/wp-content/uploads/2023/06/8a358764d217f2ed78531728cd7dc235-1024x514.png 1024w, https://wptech.kiichiro.work/wp-content/uploads/2023/06/8a358764d217f2ed78531728cd7dc235-300x150.png 300w, https://wptech.kiichiro.work/wp-content/uploads/2023/06/8a358764d217f2ed78531728cd7dc235-768x385.png 768w, https://wptech.kiichiro.work/wp-content/uploads/2023/06/8a358764d217f2ed78531728cd7dc235-1536x770.png 1536w, https://wptech.kiichiro.work/wp-content/uploads/2023/06/8a358764d217f2ed78531728cd7dc235.png 2034w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>あらかじめ用意しておいたリポジトリからクローンできていることが確認できました。</p>



<h3 class="wp-block-heading"><span id="toc6">開発環境を削除する</span></h3>



<p>作成したリソースを削除します。<br>JetBrains Gatewayを開くと、先程作成したリソースが表示されています。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="856" src="https://wptech.kiichiro.work/wp-content/uploads/2023/06/771aa1e54059338423446397436ad66d-1024x856.png" alt="" class="wp-image-1700" srcset="https://wptech.kiichiro.work/wp-content/uploads/2023/06/771aa1e54059338423446397436ad66d-1024x856.png 1024w, https://wptech.kiichiro.work/wp-content/uploads/2023/06/771aa1e54059338423446397436ad66d-300x251.png 300w, https://wptech.kiichiro.work/wp-content/uploads/2023/06/771aa1e54059338423446397436ad66d-768x642.png 768w, https://wptech.kiichiro.work/wp-content/uploads/2023/06/771aa1e54059338423446397436ad66d-1536x1283.png 1536w, https://wptech.kiichiro.work/wp-content/uploads/2023/06/771aa1e54059338423446397436ad66d.png 1824w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>削除したいリソースの横にある「×」をクリックします。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="856" src="https://wptech.kiichiro.work/wp-content/uploads/2023/06/b784a2e4e434f1659e4d401153bff37b-1024x856.png" alt="" class="wp-image-1703" srcset="https://wptech.kiichiro.work/wp-content/uploads/2023/06/b784a2e4e434f1659e4d401153bff37b-1024x856.png 1024w, https://wptech.kiichiro.work/wp-content/uploads/2023/06/b784a2e4e434f1659e4d401153bff37b-300x251.png 300w, https://wptech.kiichiro.work/wp-content/uploads/2023/06/b784a2e4e434f1659e4d401153bff37b-768x642.png 768w, https://wptech.kiichiro.work/wp-content/uploads/2023/06/b784a2e4e434f1659e4d401153bff37b-1536x1283.png 1536w, https://wptech.kiichiro.work/wp-content/uploads/2023/06/b784a2e4e434f1659e4d401153bff37b.png 1824w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>一覧から開発環境が無くなったことが確認できました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>AWS Developer Associate合格までの勉強時間とやったことを振り返る</title>
		<link>https://wptech.kiichiro.work/214sqtp4d3/</link>
		
		<dc:creator><![CDATA[むらおか]]></dc:creator>
		<pubDate>Tue, 16 May 2023 15:19:04 +0000</pubDate>
				<category><![CDATA[その他]]></category>
		<category><![CDATA[AWS]]></category>
		<guid isPermaLink="false">https://wptech.kiichiro.work/?p=1588</guid>

					<description><![CDATA[SAAに合格した翌日くらいに「とりあえずAssociate3冠だな」と意気込んでUdemyでDVAの講座を購入したものの、転職などもあってモチベーションが上がらず結構な期間が空いてしまいました。ようやく重い腰を上げて受験 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>SAAに合格した翌日くらいに「とりあえずAssociate3冠だな」と意気込んでUdemyでDVAの講座を購入したものの、転職などもあってモチベーションが上がらず結構な期間が空いてしまいました。<br>ようやく重い腰を上げて受験することができたので、前回同様振り返りをしてみます。</p>



<figure class="wp-block-embed is-type-wp-embed"><div class="wp-block-embed__wrapper">

<a href="https://wptech.kiichiro.work/40a2u2w7rv" title="AWS Solutions Architect Associate合格までの勉強時間とやったことを振り返る" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://wptech.kiichiro.work/wp-content/uploads/2022/03/aws-certified-solutions-architect-associate-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://wptech.kiichiro.work/wp-content/uploads/2022/03/aws-certified-solutions-architect-associate-160x90.png 160w, https://wptech.kiichiro.work/wp-content/uploads/2022/03/aws-certified-solutions-architect-associate-120x68.png 120w, https://wptech.kiichiro.work/wp-content/uploads/2022/03/aws-certified-solutions-architect-associate-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">AWS Solutions Architect Associate合格までの勉強時間とやったことを振り返る</div><div class="blogcard-snippet internal-blogcard-snippet">昨年末合格した AWS認定 Solutions Architect - Associate (以下SAA) について、受験を思い立ってから受験するまでを振り返ってみようと思います。誰が受験したか会社員エンジニア(普段はバックエンドの人)AW...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://wptech.kiichiro.work" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">wptech.kiichiro.work</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2022.03.04</div></div></div></div></a>
</div></figure>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-16" checked><label class="toc-title" for="toc-checkbox-16">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">どのような勉強をしたか</a><ol><li><a href="#toc2" tabindex="0">テキスト</a></li><li><a href="#toc3" tabindex="0">Udemy</a></li><li><a href="#toc4" tabindex="0">公式</a><ol><li><a href="#toc5" tabindex="0">Black Belt</a></li><li><a href="#toc6" tabindex="0">Whitepapers</a></li><li><a href="#toc7" tabindex="0">よくある質問</a></li></ol></li></ol></li><li><a href="#toc8" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">どのような勉強をしたか</span></h2>



<p>教材は前回とほぼ変わらずテキストとUdemyですが、前回の反省を生かしてWhitepapersとBlack Beltを見る時間を増やしました。</p>



<h3 class="wp-block-heading"><span id="toc2">テキスト</span></h3>



<p><strong>ポケットスタディ AWS認定 デベロッパーアソシエイト (アソシエイト試験ポケットスタディ)</strong></p>



<figure class="wp-block-embed is-type-rich is-provider-amazon wp-block-embed-amazon"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="ポケットスタディ AWS認定 デベロッパーアソシエイト (アソシエイト試験ポケットスタディ)" type="text/html" width="1320" height="550" frameborder="0" allowfullscreen style="max-width:100%" src="https://read.amazon.com.au/kp/card?preview=inline&#038;linkCode=kpd&#038;ref_=k4w_oembed_o83EbtEixLhjw1&#038;asin=4798063401&#038;tag=kpembed-20"></iframe>
</div></figure>



<p>DVAに特化したテキストはあまり多くなかったので、その中でも評価の高いものを購入しました。試験範囲はこの一冊だけで網羅できたと思います。<br>とりあえず一周やってみて、弱い分野は公式ドキュメントや<a href="https://dev.classmethod.jp/">DevelopersIO</a>などを参照して知識を深めていきました。</p>



<h3 class="wp-block-heading"><span id="toc3">Udemy</span></h3>



<p><a href="https://www.udemy.com/share/101XFi3@sXUgXon5ScfaYYYrhsGFB_kWBMQHn0hh1KkkGxNDukbcdKGpp-GMCionPTg9ylZjHg==/"><strong>Ultimate AWS Certified Developer Associate 2023 NEW DVA-C02</strong></a></p>



<p>日本語の講座もいくつかあったのですが、前回のSAA受験時に日本語だと正しい意味をなさない問題文がいくつかあったので、英語の問題文に慣れておこうぐらいのモチベーションで本講座を購入しました。<br>情報量が多く評価も高かったので勉強用には良かったですが、理解するのに時間がかかりました。時間をかけて受講する分には良いと思います。</p>



<h3 class="wp-block-heading"><span id="toc4">公式</span></h3>



<p>DVAの試験ガイドにも案内がありますが、試験に役立つ様々なコンテンツが揃ってます。</p>




<a rel="noopener" href="https://aws.amazon.com/jp/certification/certified-developer-associate/" title="AWS 認定デベロッパー - アソシエイト認定" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://a0.awsstatic.com/libra-css/images/logos/aws_logo_smile_1200x630.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">AWS 認定デベロッパー - アソシエイト認定</div><div class="blogcard-snippet external-blogcard-snippet">AWS 認定デベロッパー - アソシエイト認定を獲得してください。トレーニングコース、試験ガイド、サンプルテスト質問、模擬試験をご用意しています。詳細はこちら。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://aws.amazon.com/jp/certification/certified-developer-associate/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">aws.amazon.com</div></div></div></div></a>



<h4 class="wp-block-heading"><span id="toc5">Black Belt</span></h4>



<p>よく理解していないサービスについては、なるべくYouTubeで公開されているBlack Beltを見るようにしました。サービスの概要とユースケースがわかりやすく紹介されているため、普段あまり利用しないようなサービスでも理解することができました。</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Amazon ElastiCache【AWS Black Belt】" width="1320" height="743" src="https://www.youtube.com/embed/-NU1U8_fxo4?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
</div></figure>



<p>DVAの範囲ではないと思いますが、AWS Systems Managerの動画はわかりやすかったです。</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="AWS Systems Manager Overview 【AWS Black Belt】" width="1320" height="743" src="https://www.youtube.com/embed/g5ndLFklyb4?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
</div></figure>



<h4 class="wp-block-heading"><span id="toc6">Whitepapers</span></h4>



<p>AWSのベストプラクティスが詰まったドキュメントです。サーバーレスあたりは良く読んでいました。</p>




<a rel="noopener" href="https://docs.aws.amazon.com/ja_jp/wellarchitected/latest/serverless-applications-lens/welcome.html" title="Serverless Applications Lens - AWS Well-Architected Framework - Serverless Applications Lens" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fdocs.aws.amazon.com%2Fja_jp%2Fwellarchitected%2Flatest%2Fserverless-applications-lens%2Fwelcome.html?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Serverless Applications Lens - AWS Well-Architected Framework - Serverless Applications Lens</div><div class="blogcard-snippet external-blogcard-snippet">This document describes the Serverless Applications Lens for the AWS Well-Architected Framework. The document covers com...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://docs.aws.amazon.com/ja_jp/wellarchitected/latest/serverless-applications-lens/welcome.html" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">docs.aws.amazon.com</div></div></div></div></a>



<h4 class="wp-block-heading"><span id="toc7">よくある質問</span></h4>



<p>知識の確認のために補助的に使っていました。主要なサービスは結構文量が多いです。</p>




<a rel="noopener" href="https://aws.amazon.com/jp/sqs/faqs/?da=sec&#038;sec=prep" title="よくある質問 - Amazon SQS | AWS" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://a0.awsstatic.com/libra-css/images/logos/aws_logo_smile_1200x630.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">よくある質問 - Amazon SQS | AWS</div><div class="blogcard-snippet external-blogcard-snippet">FIFO キュー、メッセージ識別子、ロングおよびショートポーリング、セキュリティなどについては、Amazon SQS のよくある質問への回答をご覧ください。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://aws.amazon.com/jp/sqs/faqs/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">aws.amazon.com</div></div></div></div></a>



<h2 class="wp-block-heading"><span id="toc8">まとめ</span></h2>



<p>今回は勉強の仕方がある程度わかっていたので、SAAのときより楽に感じました。難易度的にもSAAより若干易しいと感じました。とはいえ点数は合格ラインぎりぎりでしたが。。</p>



<p>一方で、受験までモチベーションを保つことが前回より大変でした。受験のタイミングが良くなかったという話に尽きるのですが、ちょうど仕事も私生活もバタバタしていて、勉強が後回しになっていました。<br>そういったときには先人たちの合格記を読んでテンションを維持するように努めました。人の合格記見てるとやる気出ますよね。</p>



<p>Associateは残すところSOAのみなので、今年中には受けようと思います。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>CDKでやる Lambda Function URLs</title>
		<link>https://wptech.kiichiro.work/8at84s0zgd/</link>
		
		<dc:creator><![CDATA[むらおか]]></dc:creator>
		<pubDate>Tue, 13 Dec 2022 14:51:12 +0000</pubDate>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[Lambda]]></category>
		<category><![CDATA[TypeScript]]></category>
		<guid isPermaLink="false">http://13.115.157.198/?p=944</guid>

					<description><![CDATA[最近、CDKいじってなかったのでリハビリを兼ねて前からやってみたかったネタを。 Lambda Function URLs AWS LambdaはAPIエンドポイントとして利用するケースも多いと思いますが、Lambda F [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>最近、CDKいじってなかったのでリハビリを兼ねて前からやってみたかったネタを。</p>



<h1 class="wp-block-heading">Lambda Function URLs</h1>



<p>AWS LambdaはAPIエンドポイントとして利用するケースも多いと思いますが、Lambda Function URLsを利用することでAPI Gatewayを追加することなくHTTPSエンドポイントを設定することができます。API Gatewayの機能を必要としないAPIエンドポイントであればこれ使っておけばOKというものらしいです。</p>




<a rel="noopener" href="https://aws.amazon.com/jp/blogs/aws/announcing-aws-lambda-function-urls-built-in-https-endpoints-for-single-function-microservices/" title="Announcing AWS Lambda Function URLs: Built-in HTTPS Endpoints for Single-Function Microservices | Amazon Web Services" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Faws.amazon.com%2Fjp%2Fblogs%2Faws%2Fannouncing-aws-lambda-function-urls-built-in-https-endpoints-for-single-function-microservices%2F?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Announcing AWS Lambda Function URLs: Built-in HTTPS Endpoints for Single-Function Microservices | Amazon Web Services</div><div class="blogcard-snippet external-blogcard-snippet">Organizations are adopting microservices architectures to build resilient and scalable applications using AWS Lambda. Th...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://aws.amazon.com/jp/blogs/aws/announcing-aws-lambda-function-urls-built-in-https-endpoints-for-single-function-microservices/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">aws.amazon.com</div></div></div></div></a>



<h1 class="wp-block-heading">CDKでやる</h1>



<p>CDKのバージョンは以下。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>cdk --version
2.54.0 (build 9f41881)</code></pre></div>



<p>CDKでは、FunctionUrlが用意されているのでそれを使用します。</p>




<a rel="noopener" href="https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda.FunctionUrl.html" title="class FunctionUrl (construct) · AWS CDK" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fdocs.aws.amazon.com%2Fcdk%2Fapi%2Fv2%2Fdocs%2Faws-cdk-lib.aws_lambda.FunctionUrl.html?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">class FunctionUrl (construct) · AWS CDK</div><div class="blogcard-snippet external-blogcard-snippet"># class FunctionUrl (construct)</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda.FunctionUrl.html" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">docs.aws.amazon.com</div></div></div></div></a>



<div class="hcb_wrap"><pre class="prism line-numbers lang-ts" data-file="lambda-function-urls-stack.ts" data-lang="TypeScript"><code>import * as cdk from &#39;aws-cdk-lib&#39;;
import { Construct } from &#39;constructs&#39;;
import * as lambda from &#39;aws-cdk-lib/aws-lambda&#39;;

export class LambdaFunctionUrlsStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    const fn =  new lambda.Function(this, &#39;LambdaFunction&#39;, {
      runtime: lambda.Runtime.PYTHON_3_9,
      handler: &#39;app.lambda_handler&#39;,
      code: lambda.Code.fromAsset(&#39;./lambda&#39;),
    });

    const fnUrl = fn.addFunctionUrl({
      authType: lambda.FunctionUrlAuthType.NONE,
    });
    new cdk.CfnOutput(this, &#39;TheUrl&#39;, {
      value: fnUrl.url,
    });
  }
}</code></pre></div>



<p>Pythonは適当に。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="lambda/app.py" data-lang="Python"><code>def lambda_handler(event, context):
    return &quot;Hello  world!!&quot;</code></pre></div>



<p>build後、<code>cdk deploy</code> を行うとURLが出力されます。curl実行でFunctionが実行されていることが確認できます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>Outputs:
LambdaFunctionUrlsStack.TheUrl = https://xxxxxxxxxx.lambda-url.ap-northeast-1.on.aws/

curl https://xxxxxxxxxx.lambda-url.ap-northeast-1.on.aws/
Hello  world!!%</code></pre></div>



<h1 class="wp-block-heading">IAM認証する場合</h1>



<p>APIエンドポイントを公開する必要がない場合はIAM認証として設定することができます。以下の通り <code>authType</code> をAWS_IAMに変更するだけでOKです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-ts" data-lang="TypeScript"><code>const fnUrl = fn.addFunctionUrl({
  authType: lambda.FunctionUrlAuthType.AWS_IAM,
});</code></pre></div>



<p>ポリシーは <code>lambda:InvokeFunctionUrl</code> への許可があればOKだそうです。</p>




<a rel="noopener" href="https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/urls-invocation.html" title="Lambda &#38306;&#25968; URL &#12398;&#21628;&#12403;&#20986;&#12375; - AWS Lambda" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fdocs.aws.amazon.com%2Fja_jp%2Flambda%2Flatest%2Fdg%2Furls-invocation.html?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Lambda &#38306;&#25968; URL &#12398;&#21628;&#12403;&#20986;&#12375; - AWS Lambda</div><div class="blogcard-snippet external-blogcard-snippet">ウェブブラウザ、curl、Postman、または任意の HTTP クライアントを使用して、専用の HTTP エンドポイントを介して Lambda 関数を呼び出します。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/urls-invocation.html" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">docs.aws.amazon.com</div></div></div></div></a>




<a rel="noopener" href="https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/urls-auth.html" title="Lambda &#38306;&#25968; URL &#12408;&#12398;&#12450;&#12463;&#12475;&#12473;&#12398;&#21046;&#24481; - AWS Lambda" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fdocs.aws.amazon.com%2Fja_jp%2Flambda%2Flatest%2Fdg%2Furls-auth.html?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Lambda &#38306;&#25968; URL &#12408;&#12398;&#12450;&#12463;&#12475;&#12473;&#12398;&#21046;&#24481; - AWS Lambda</div><div class="blogcard-snippet external-blogcard-snippet">リソースベースのポリシーに加え AuthType パラメータを使用して、Lambda 関数 URL へのアクセスを保護および制限します。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/urls-auth.html" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">docs.aws.amazon.com</div></div></div></div></a>



<div class="hcb_wrap"><pre class="prism line-numbers lang-json" data-lang="JSON"><code>{
    &quot;Version&quot;: &quot;2012-10-17&quot;,
    &quot;Statement&quot;: [
        {
            &quot;Effect&quot;: &quot;Allow&quot;,
            &quot;Action&quot;: &quot;lambda:InvokeFunctionUrl&quot;,
            &quot;Resource&quot;: &quot;*&quot;
        }
    ]
}</code></pre></div>



<p>署名付きAPIへのアクセスが必要になるのですが、今回はPostmanでやってみました。<br>適当なIAMユーザーを作ってAccessKey, SecretAccessKeyを作成し、入力していきます。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="732" src="https://wptech.kiichiro.work/wp-content/uploads/2022/12/e922b113fca42efba5b0865752f799fd-1024x732.png" alt="Postmanでの実行結果" class="wp-image-1005" srcset="https://wptech.kiichiro.work/wp-content/uploads/2022/12/e922b113fca42efba5b0865752f799fd-1024x732.png 1024w, https://wptech.kiichiro.work/wp-content/uploads/2022/12/e922b113fca42efba5b0865752f799fd-300x214.png 300w, https://wptech.kiichiro.work/wp-content/uploads/2022/12/e922b113fca42efba5b0865752f799fd-768x549.png 768w, https://wptech.kiichiro.work/wp-content/uploads/2022/12/e922b113fca42efba5b0865752f799fd-1536x1098.png 1536w, https://wptech.kiichiro.work/wp-content/uploads/2022/12/e922b113fca42efba5b0865752f799fd.png 1726w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>リクエストを投げると無事レスポンスが返ってきました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>AWS CDKを使ってTypeScriptで書いたLambdaをデプロイする + SAM Localで動かす</title>
		<link>https://wptech.kiichiro.work/26ru99uao0/</link>
		
		<dc:creator><![CDATA[むらおか]]></dc:creator>
		<pubDate>Sat, 12 Mar 2022 15:20:42 +0000</pubDate>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[Lambda]]></category>
		<category><![CDATA[TypeScript]]></category>
		<guid isPermaLink="false">http://13.115.157.198/?p=313</guid>

					<description><![CDATA[LambdaのコードをTypeScriptで書いてCDKでデプロイしようとすると、CDKによるデプロイの外でトランスパイルしなければいかんよなぁ。。と思っていたんですが、今はそんなことしなくても良くなってるんですね。 前 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>LambdaのコードをTypeScriptで書いてCDKでデプロイしようとすると、CDKによるデプロイの外でトランスパイルしなければいかんよなぁ。。と思っていたんですが、今はそんなことしなくても良くなってるんですね。</p>



<span id="more-313"></span>



<h1 class="wp-block-heading">前提</h1>



<p>CDKとSAMがインストールされていること。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>cdk --version
2.2.0 (build 4f5c27c)

sam --version
SAM CLI, version 1.40.1</code></pre></div>



<h1 class="wp-block-heading">やりたいこと</h1>



<p><a rel="noopener" href="https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-cdk-getting-started.html" target="_blank">Getting started with AWS SAM and the AWS CDK</a> でやってる内容を、デプロイするLambdaのコードをTypeScriptに変更して書く。</p>



<h1 class="wp-block-heading">やったこと</h1>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-20" checked><label class="toc-title" for="toc-checkbox-20">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"></li><li><a href="#toc1" tabindex="0">プロジェクトの作成</a></li><li><a href="#toc2" tabindex="0">リソースの作成</a></li><li><a href="#toc3" tabindex="0">CloudFormation templateの出力 &amp; SAMでローカル実行</a></li></ol>
    </div>
  </div>

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



<p>まずプロジェクトを作っておきます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>mkdir lambda-local-sam
cd lambda-local-sam
cdk init app --language typescript</code></pre></div>



<h2 class="wp-block-heading"><span id="toc2">リソースの作成</span></h2>



<p>あとはStackを書いて行きます。</p>



<p>Lambda Functionは、 <code>aws-lambda</code> モジュールを使用し、実行環境とコードのエントリーポイント、ハンドラを設定して作成します。Pythonの場合は以下。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-ts" data-file="lambda-local-sam-stack.ts" data-lang="TypeScript"><code>import { Stack, StackProps } from &#39;aws-cdk-lib&#39;
import { Construct } from &#39;constructs&#39;
import * as path from &quot;path&quot;
import * as lambda from &#39;aws-cdk-lib/aws-lambda&#39;

export class LambdaLocalSamStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props)

    new lambda.Function(this, &#39;MyFunction&#39;, {
      runtime: lambda.Runtime.PYTHON_3_7,
      handler: &#39;app.lambda_handler&#39;,
      code: lambda.Code.fromAsset(&#39;./lambda&#39;),
    })
  }
}</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="lambda/app.py" data-lang="Python"><code>def lambda_handler(event, context):
    return &quot;Hello from SAM and the CDK!&quot;</code></pre></div>



<p>これに対してTypeScriptの場合は、実行環境をNode.jsにすることに加え、冒頭にも書きましたが、TypeScript -&gt; JavaScript にトランスパイルする必要があります。<br>愚直にスクリプトを組むという方法もありますが、<strong>言語固有モジュール</strong>を利用するとそれらの処理を暗黙的に行ってくれます。Node.jsの言語固有モジュールは <code>aws-lambda-nodejs</code> です。</p>



<p>実際のコードは以下の通りです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-ts" data-file="lambda-local-sam-stack.ts" data-lang="TypeScript"><code>import { Stack, StackProps } from &#39;aws-cdk-lib&#39;
import { Construct } from &#39;constructs&#39;
import * as path from &quot;path&quot;;
import * as nodeLambda from &#39;aws-cdk-lib/aws-lambda-nodejs&#39;

export class LambdaLocalSamStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props)

    new nodeLambda.NodejsFunction(this, &#39;MyFunction&#39;, {
      entry: path.join(__dirname, &#39;../lambda/index.ts&#39;),
      handler: &#39;handler&#39;,
    })
  }
}</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-ts" data-file="lambda/index.ts" data-lang="TypeScript"><code>import { Handler } from &#39;aws-cdk-lib/aws-lambda&#39;

export const handler: Handler = async function () {
    return &quot;Hello from SAM and the CDK!&quot;;
}</code></pre></div>



<h2 class="wp-block-heading"><span id="toc3">CloudFormation templateの出力 &amp; SAMでローカル実行</span></h2>



<p>cdk synthコマンドでCloudFormationのtemplateを出力します (出力先は <code>cdk.out</code>)。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-bash" data-lang="Bash"><code>cdk synth --no-staging</code></pre></div>



<p>出力されたtemplateを参照するようにsam localコマンドを実行します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-js" data-lang="JavaScript"><code>sam local invoke MyFunction --no-event -t ./cdk.out/LambdaLocalSamStack.template.json
(略)
&quot;Hello from SAM and the CDK!&quot;</code></pre></div>



<p>Lambdaが実行されたことが確認出来ました。</p>



<h1 class="wp-block-heading">参考</h1>



<p>AWS CDK による AWS Lambda コードの管理<br><a href="https://aws.amazon.com/jp/blogs/news/lambda-managed-by-cdk/">https://aws.amazon.com/jp/blogs/news/lambda-managed-by-cdk/</a></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
