<?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>画像認識 - CayTech Lab</title>
	<atom:link href="https://caymezon.com/tag/%e7%94%bb%e5%83%8f%e8%aa%8d%e8%ad%98/feed/" rel="self" type="application/rss+xml" />
	<link>https://caymezon.com</link>
	<description></description>
	<lastBuildDate>Sun, 08 Mar 2026 02:58:28 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://caymezon.com/wp-content/uploads/2026/01/cropped-CayTechLab-32x32.jpg</url>
	<title>画像認識 - CayTech Lab</title>
	<link>https://caymezon.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<atom:link rel='hub' href='https://caymezon.com/?pushpress=hub'/>
	<item>
		<title>AWS SAM で画像認識パイプライン（S3 + Lambda + Rekognition）を構築しよう【コンソール版との比較付き】</title>
		<link>https://caymezon.com/aws-handson-rekognition-image-pipeline/</link>
					<comments>https://caymezon.com/aws-handson-rekognition-image-pipeline/#respond</comments>
		
		<dc:creator><![CDATA[caymezon]]></dc:creator>
		<pubDate>Sun, 08 Mar 2026 02:58:28 +0000</pubDate>
				<category><![CDATA[AWS Basic]]></category>
		<category><![CDATA[Cloud & Infra]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[IaC]]></category>
		<category><![CDATA[Lambda]]></category>
		<category><![CDATA[ML]]></category>
		<category><![CDATA[Rekognition]]></category>
		<category><![CDATA[S3]]></category>
		<category><![CDATA[SAM]]></category>
		<category><![CDATA[サーバーレス]]></category>
		<category><![CDATA[ハンズオン]]></category>
		<category><![CDATA[初心者]]></category>
		<category><![CDATA[画像認識]]></category>
		<category><![CDATA[画像認識パイプライン]]></category>
		<guid isPermaLink="false">https://caymezon.com/?p=20251</guid>

					<description><![CDATA[<p>目次 はじめにSAM vs コンソール：どれだけ違うかキーワード解説前提条件使用するAWSサービスStep 1: プロジェクトフォルダを開くフォルダ構造Step 2: SAMテンプレートの確認（template.yaml [&#8230;]</p>
<p>The post <a href="https://caymezon.com/aws-handson-rekognition-image-pipeline/">AWS SAM で画像認識パイプライン（S3 + Lambda + Rekognition）を構築しよう【コンソール版との比較付き】</a> first appeared on <a href="https://caymezon.com">CayTech Lab</a>.</p>]]></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">SAM vs コンソール：どれだけ違うか</a></li><li><a href="#toc3" tabindex="0">キーワード解説</a></li><li><a href="#toc4" tabindex="0">前提条件</a></li><li><a href="#toc5" tabindex="0">使用するAWSサービス</a></li><li><a href="#toc6" tabindex="0">Step 1: プロジェクトフォルダを開く</a><ol><li><a href="#toc7" tabindex="0">フォルダ構造</a></li></ol></li><li><a href="#toc8" tabindex="0">Step 2: SAMテンプレートの確認（template.yaml）</a></li><li><a href="#toc9" tabindex="0">Step 3: Lambda コードの確認（src/app.py）</a></li><li><a href="#toc10" tabindex="0">Step 4: samconfig.toml を作成する</a></li><li><a href="#toc11" tabindex="0">Step 5: sam build（ビルド）</a></li><li><a href="#toc12" tabindex="0">Step 6: sam deploy（デプロイ）</a><ol><li><a href="#toc13" tabindex="0">デプロイ完了の確認</a></li><li><a href="#toc14" tabindex="0">デプロイされるリソース一覧</a></li></ol></li><li><a href="#toc15" tabindex="0">Step 7: 動作テスト</a><ol><li><a href="#toc16" tabindex="0">事前準備: バケット名を変数に設定する</a></li><li><a href="#toc17" tabindex="0">テスト1: 画像をアップロードしてラベルを確認する</a></li><li><a href="#toc18" tabindex="0">テスト2: 複数枚アップロードして無料枠を確認する</a></li></ol></li><li><a href="#toc19" tabindex="0">Step 8: AWSコンソールで確認（任意）</a></li><li><a href="#toc20" tabindex="0">Step 9: リソースの削除</a></li><li><a href="#toc21" tabindex="0">トラブルシューティング</a></li><li><a href="#toc22" tabindex="0">まとめ</a><ol><li><a href="#toc23" tabindex="0">SAMのメリットを実感できたポイント</a></li></ol></li><li><a href="#toc24" tabindex="0">コンソール版と比較してみる</a></li><li><a href="#toc25" tabindex="0">関連記事</a></li></ol>
    </div>
  </div>

<h2><span id="toc1">はじめに</span></h2>
<p>「画像認識の仕組みをコードで管理して、いつでも同じ環境を再現できるようにしたい」という要件に、<strong>AWS SAM（Serverless Application Model）</strong> は最適な選択肢のひとつです。</p>
<p>この記事では、<strong>AWS SAM</strong> を使って、S3 + Lambda + Rekognition による画像認識パイプラインをゼロから構築するハンズオンを紹介します。</p>
<pre><code class="language-plaintext">ユーザー
  ↓ aws s3 cp image.jpg s3://bucket/
S3 バケット（STACK-upload-ACCOUNT_ID）
  ↓ ObjectCreated イベント（自動）
Lambda（DetectFunction / Python 3.12）
  ↓ boto3 rekognition.detect_labels(S3Object={...})
Amazon Rekognition
  ↓ Labels: [{Name, Confidence}, ...]
Lambda
  ↓ print(json.dumps(result))
CloudWatch Logs</code></pre>
<p><strong>このハンズオンで体験できること：</strong></p>
<ul>
<li><code>AWS::S3::Bucket</code> / <code>AWS::Serverless::Function</code> の SAM 定義</li>
<li><code>S3ReadPolicy</code> / <code>RekognitionDetectOnlyPolicy</code> — SAM 組み込みポリシーによる1行での権限付与</li>
<li><code>Events: Type: S3</code>（ObjectCreated）— Lambda の S3 トリガーをコードで定義する方法</li>
<li>コンソール版との権限設定の違いを体感</li>
</ul>
<p><strong>このハンズオンの特徴：</strong></p>
<ul>
<li><code>sam build</code> + <code>sam deploy</code> の <strong>2コマンドで全リソースをデプロイ</strong></li>
<li>S3 バケット + Lambda + IAM ロールを <code>template.yaml</code> 1ファイルで管理</li>
<li><code>sam delete</code> で<strong>全リソースを一括削除</strong>（コンソール版では S3 / Lambda / IAM / ロググループを個別に削除）</li>
</ul>
<hr>
<p><a rel="nofollow" href="//af.moshimo.com/af/c/click?a_id=1384942&p_id=170&pc_id=185&pl_id=4062&url=https%3A%2F%2Fwww.amazon.co.jp%2Fs%3Fk%3D%25E6%259C%25AC%2BAWS%2B%25E9%2596%258B%25E7%2599%25BA%26__mk_ja_JP%3D%25E3%2582%25AB%25E3%2582%25BF%25E3%2582%25AB%25E3%2583%258A%26crid%3D1DE63UBHFOR4K%26sprefix%3D%25E6%259C%25AC%2Baws%2B%25E9%2596%258B%25E7%2599%25BA%252Caps%252C167%26ref%3Dnb_sb_noss" referrerpolicy="no-referrer-when-downgrade" attributionsrc>Amazon検索[本 AWS 開発]</a><img decoding="async" src="//i.moshimo.com/af/i/impression?a_id=1384942&p_id=170&pc_id=185&pl_id=4062" width="1" height="1" style="border:none;" alt="" loading="lazy"></p>
<p><!-- START MoshimoAffiliateEasyLink --><script type="text/javascript">(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;b[a]=b[a]||function(){arguments.currentScript=c.currentScript||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};c.getElementById(a)||(d=c.createElement(f),d.src=g,d.id=a,e=c.getElementsByTagName("body")[0],e.appendChild(d))})(window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js?20220329","msmaflink");msmaflink({"n":"AWSの基本・仕組み・重要用語が全部わかる教科書 (見るだけ図解)","b":"SBクリエイティブ","t":"","d":"https:\/\/m.media-amazon.com","c_p":"\/images\/I","p":["\/51DEDQXj6oL._SL500_.jpg","\/41F589smNwL._SL500_.jpg","\/41R6f9yyCWL._SL500_.jpg","\/41HqWQ9BvmL._SL500_.jpg","\/41p8p0ZU79L._SL500_.jpg","\/41qLC-fndBL._SL500_.jpg","\/41fcLv9VT5L._SL500_.jpg","\/51lRvCsvHqL._SL500_.jpg"],"u":{"u":"https:\/\/www.amazon.co.jp\/dp\/4815607850","t":"amazon","r_v":""},"v":"2.1","b_l":[{"id":1,"u_tx":"Amazonで見る","u_bc":"#f79256","u_url":"https:\/\/www.amazon.co.jp\/dp\/4815607850","a_id":1384942,"p_id":170,"pl_id":27060,"pc_id":185,"s_n":"amazon","u_so":1},{"id":2,"u_tx":"楽天市場で見る","u_bc":"#f76956","u_url":"https:\/\/search.rakuten.co.jp\/search\/mall\/AWS%E3%81%AE%E5%9F%BA%E6%9C%AC%E3%83%BB%E4%BB%95%E7%B5%84%E3%81%BF%E3%83%BB%E9%87%8D%E8%A6%81%E7%94%A8%E8%AA%9E%E3%81%8C%E5%85%A8%E9%83%A8%E3%82%8F%E3%81%8B%E3%82%8B%E6%95%99%E7%A7%91%E6%9B%B8%20(%E8%A6%8B%E3%82%8B%E3%81%A0%E3%81%91%E5%9B%B3%E8%A7%A3)\/","a_id":1384917,"p_id":54,"pl_id":27059,"pc_id":54,"s_n":"rakuten","u_so":2},{"id":3,"u_tx":"Yahoo!ショッピングで見る","u_bc":"#66a7ff","u_url":"https:\/\/shopping.yahoo.co.jp\/search?first=1\u0026p=AWS%E3%81%AE%E5%9F%BA%E6%9C%AC%E3%83%BB%E4%BB%95%E7%B5%84%E3%81%BF%E3%83%BB%E9%87%8D%E8%A6%81%E7%94%A8%E8%AA%9E%E3%81%8C%E5%85%A8%E9%83%A8%E3%82%8F%E3%81%8B%E3%82%8B%E6%95%99%E7%A7%91%E6%9B%B8%20(%E8%A6%8B%E3%82%8B%E3%81%A0%E3%81%91%E5%9B%B3%E8%A7%A3)","a_id":1466950,"p_id":1225,"pl_id":27061,"pc_id":1925,"s_n":"yahoo","u_so":3}],"eid":"eaCUB","s":"s"});</script></p>
<div id="msmaflink-eaCUB">リンク</div>
<p><!-- MoshimoAffiliateEasyLink END --></p>
<h2><span id="toc2">SAM vs コンソール：どれだけ違うか</span></h2>
<table>
<thead>
<tr>
<th>比較項目</th>
<th>SAM（コード）</th>
<th>コンソール（手動）</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>S3 トリガー</strong></td>
<td><code>Events: Type: S3</code> で1箇所に定義</td>
<td>Lambda → トリガーを追加（手動クリック）</td>
</tr>
<tr>
<td><strong>Rekognition 権限</strong></td>
<td><code>RekognitionDetectOnlyPolicy: {}</code> の1行</td>
<td>IAM → <code>AmazonRekognitionReadOnlyAccess</code> を手動アタッチ</td>
</tr>
<tr>
<td><strong>S3 GetObject 権限</strong></td>
<td><code>S3ReadPolicy</code> で特定バケットに自動付与</td>
<td>IAM → インラインポリシーを手動作成</td>
</tr>
<tr>
<td><strong>削除</strong></td>
<td><code>sam delete</code> 1コマンド</td>
<td>S3 / Lambda / IAM / ロググループを個別に削除</td>
</tr>
<tr>
<td><strong>再現性</strong></td>
<td>チームで同じ環境を即座に再現できる</td>
<td>手順書が必要</td>
</tr>
</tbody>
</table>
<hr>
<h2><span id="toc3">キーワード解説</span></h2>
<table>
<thead>
<tr>
<th>用語</th>
<th>意味</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>DetectLabels</strong></td>
<td>Rekognition API。画像内の物体・シーンを検出してラベル名と信頼度を返す</td>
</tr>
<tr>
<td><strong>S3Object 参照</strong></td>
<td>画像データを Lambda に転送せず、S3 の場所を Rekognition に渡す方式</td>
</tr>
<tr>
<td><strong>RekognitionDetectOnlyPolicy</strong></td>
<td>SAM 組み込みポリシー。<code>DetectLabels</code> / <code>DetectFaces</code> / <code>DetectText</code> などを付与</td>
</tr>
<tr>
<td><strong>S3ReadPolicy</strong></td>
<td>SAM 組み込みポリシー。特定バケットへの <code>s3:GetObject</code> を付与。コンソール版より スコープが狭くセキュア</td>
</tr>
<tr>
<td><strong>無料枠</strong></td>
<td>最初の12ヶ月 / 月5,000枚まで無料。超過後は $0.001/枚</td>
</tr>
</tbody>
</table>
<hr>
<h2><span id="toc4">前提条件</span></h2>
<table>
<thead>
<tr>
<th>ツール</th>
<th>確認コマンド</th>
<th>最低バージョン目安</th>
</tr>
</thead>
<tbody>
<tr>
<td>AWS CLI v2</td>
<td><code>aws --version</code></td>
<td>2.x</td>
</tr>
<tr>
<td>AWS SAM CLI</td>
<td><code>sam --version</code></td>
<td>1.x</td>
</tr>
<tr>
<td>Python 3.12</td>
<td><code>python --version</code></td>
<td>3.12</td>
</tr>
</tbody>
</table>
<p>AWS認証確認:</p>
<pre><code class="language-cmd">aws sts get-caller-identity</code></pre>
<p>アカウントIDが表示されれば認証設定済みです。</p>
<hr>
<h2><span id="toc5">使用するAWSサービス</span></h2>
<table>
<thead>
<tr>
<th>サービス</th>
<th>役割</th>
<th>料金</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>S3</strong></td>
<td>画像のアップロード先バケット</td>
<td>月5GBまで無料</td>
</tr>
<tr>
<td><strong>Lambda</strong></td>
<td>S3 イベントを受けて Rekognition を呼び出す</td>
<td>月100万リクエスト・400,000 GB-秒まで無料</td>
</tr>
<tr>
<td><strong>Rekognition</strong></td>
<td>画像ラベル検出（DetectLabels）</td>
<td>最初の12ヶ月 / 月5,000枚まで無料</td>
</tr>
<tr>
<td><strong>IAM</strong></td>
<td>Lambda の実行権限管理</td>
<td>無料</td>
</tr>
<tr>
<td><strong>S3（SAMデプロイ用）</strong></td>
<td>SAM デプロイパッケージ置き場</td>
<td>少量のため実質無料</td>
</tr>
<tr>
<td><strong>CloudWatch Logs</strong></td>
<td>Lambda の実行ログ</td>
<td>月5GBまで無料</td>
</tr>
</tbody>
</table>
<hr>
<h2><span id="toc6">Step 1: プロジェクトフォルダを開く</span></h2>
<pre><code class="language-cmd">cd C:\my-aws\aws-learning-projects\rekognition-image-pipeline</code></pre>
<h3><span id="toc7">フォルダ構造</span></h3>
<pre><code class="language-plaintext">rekognition-image-pipeline/
├── template.yaml       # SAMテンプレート（S3 + Lambda + Rekognition 定義）
├── samconfig.toml      # デプロイ設定（gitignore 対象・毎回手動作成が必要）
├── docs/
│   ├── 1_console.md    # AWSコンソール版手順
│   └── 2_sam.md        # SAM版手順
└── src/
    └── app.py          # Lambda 関数（detect_labels + ログ出力）</code></pre>
<hr>
<h2><span id="toc8">Step 2: SAMテンプレートの確認（template.yaml）</span></h2>
<p><code>template.yaml</code> は全 AWSリソースの設計図です。コンソール版との違いに注目しながらポイントを確認します。</p>
<pre><code class="language-yaml">Resources:
  UploadBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: !Sub "${AWS::StackName}-upload-${AWS::AccountId}"

  # Lambda 関数
  DetectFunction:
    Type: AWS::Serverless::Function
    Properties:
      Policies:
        # SAM 組み込みポリシー: 特定バケットへの s3:GetObject を付与
        - S3ReadPolicy:
            BucketName: !Sub "${AWS::StackName}-upload-${AWS::AccountId}"
        # SAM 組み込みポリシー: DetectLabels / DetectFaces / DetectText などを付与
        - RekognitionDetectOnlyPolicy: {}
      Events:
        S3UploadEvent:
          Type: S3
          Properties:
            Bucket: !Ref UploadBucket
            Events: s3:ObjectCreated:*</code></pre>
<p><strong>template.yaml のポイント:</strong></p>
<table>
<thead>
<tr>
<th>ポイント</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>RekognitionDetectOnlyPolicy: {}</code></td>
<td>SAM 組み込みポリシー。コンソール版では <code>AmazonRekognitionReadOnlyAccess</code> を手動アタッチ</td>
</tr>
<tr>
<td><code>S3ReadPolicy</code></td>
<td>特定バケットのみに <code>s3:GetObject</code> を付与。コンソール版よりスコープが狭くセキュア</td>
</tr>
<tr>
<td><code>BucketName: !Sub &quot;${AWS::StackName}-upload-${AWS::AccountId}&quot;</code></td>
<td>アカウントIDを含めることでグローバルユニークを保証</td>
</tr>
<tr>
<td><code>Events: Type: S3</code>（ObjectCreated）</td>
<td>Lambda に S3 トリガーをコードで定義。コンソール版では手動でトリガーを追加</td>
</tr>
</tbody>
</table>
<hr>
<h2><span id="toc9">Step 3: Lambda コードの確認（src/app.py）</span></h2>
<p>コードはすでに作成済みです。構造を把握しておきます。</p>
<pre><code class="language-python">import json
import urllib.parse
import boto3

rekognition = boto3.client("rekognition")   # Lambda 起動時に1回だけ初期化


def lambda_handler(event, context):
    for record in event["Records"]:
        bucket = record["s3"]["bucket"]["name"]
        key = urllib.parse.unquote_plus(record["s3"]["object"]["key"])  # 日本語対応

        response = rekognition.detect_labels(
            Image={"S3Object": {"Bucket": bucket, "Name": key}},
            MaxLabels=10,      # 最大10ラベル
            MinConfidence=70,  # 70%以上のラベルのみ返す
        )

        labels = [{"name": l["Name"], "confidence": round(l["Confidence"], 1)}
                  for l in response["Labels"]]

        print(json.dumps({"key": key, "label_count": len(labels), "labels": labels},
                         ensure_ascii=False))

    return {"processedCount": len(event["Records"])}</code></pre>
<p><strong>app.py のポイント:</strong></p>
<ul>
<li><code>S3Object</code> 参照: 画像データを Lambda のメモリに転送せず S3 の場所を Rekognition に渡す。メモリ効率が良い</li>
<li><code>urllib.parse.unquote_plus(key)</code>: 日本語や空白を含むファイル名は S3 イベントで URL エンコードされる</li>
<li><code>boto3.client(&quot;rekognition&quot;)</code> をグローバルスコープに置く: Lambda のコールドスタート時に1回だけ初期化され、ウォームスタート時は再利用される（パフォーマンス向上）</li>
</ul>
<hr>
<h2><span id="toc10">Step 4: samconfig.toml を作成する</span></h2>
<p><code>samconfig.toml</code> は <code>.gitignore</code> で管理外のため、<strong>毎回手動で作成</strong>する必要があります。</p>
<p><code>rekognition-image-pipeline/samconfig.toml</code> を新規作成して以下を貼り付けます。</p>
<pre><code class="language-toml">version = 0.1

[default.deploy.parameters]
stack_name = "rekognition-image-pipeline-stack"
resolve_s3 = true
s3_prefix = "rekognition-image-pipeline-stack"
region = "ap-northeast-1"
confirm_changeset = true
capabilities = "CAPABILITY_IAM"
disable_rollback = true
image_repositories = []

[default.global.parameters]
region = "ap-northeast-1"</code></pre>
<blockquote>
<p><strong><code>samconfig.toml</code> の置き場所：</strong><br /><code>rekognition-image-pipeline/</code> フォルダの<strong>直下</strong>に置く必要があります。</p>
</blockquote>
<hr>
<h2><span id="toc11">Step 5: sam build（ビルド）</span></h2>
<pre><code class="language-cmd">cd C:\my-aws\aws-learning-projects\rekognition-image-pipeline
sam build</code></pre>
<p>成功すると以下のように表示されます。</p>
<pre><code class="language-plaintext">Build Succeeded

Built Artifacts  : .aws-sam/build
Built Template   : .aws-sam/build/template.yaml</code></pre>
<blockquote>
<p><strong><code>sam build</code> が行っていること：</strong><br /><code>src/</code> フォルダを ZIP パッケージ化して <code>.aws-sam/build/</code> に配置し、Lambda デプロイの準備を整えます。</p>
</blockquote>
<hr>
<h2><span id="toc12">Step 6: sam deploy（デプロイ）</span></h2>
<pre><code class="language-cmd">sam deploy</code></pre>
<p>変更内容が表示されて確認を求められます。</p>
<pre><code class="language-plaintext">Deploy this changeset? [y/N]: y</code></pre>
<p><code>y</code> を入力して進めます。数分でデプロイが完了します。</p>
<h3><span id="toc13">デプロイ完了の確認</span></h3>
<p>ターミナルに <strong>Outputs</strong> が表示されます。</p>
<pre><code class="language-plaintext">Outputs
----------------------------------------------------------------------
Key    BucketName
Value  rekognition-image-pipeline-stack-upload-123456789012

Key    DetectFunctionArn
Value  arn:aws:lambda:ap-northeast-1:123456789012:function:rekognition-image-pipeline-stack-DetectFunction-XXXX
----------------------------------------------------------------------</code></pre>
<p><strong><code>BucketName</code> を控えておきます。</strong></p>
<h3><span id="toc14">デプロイされるリソース一覧</span></h3>
<pre><code class="language-plaintext">S3 バケット × 1        : rekognition-image-pipeline-stack-upload-ACCOUNT_ID
Lambda 関数 × 1        : rekognition-image-pipeline-stack-DetectFunction-XXXX
IAM ロール × 1         : Lambda 用（S3 GetObject + Rekognition DetectLabels 権限付き）
S3（SAM用）            : デプロイパッケージ
CloudWatch Logs        : Lambda 自動生成ログ</code></pre>
<hr>
<h2><span id="toc15">Step 7: 動作テスト</span></h2>
<h3><span id="toc16">事前準備: バケット名を変数に設定する</span></h3>
<pre><code class="language-cmd">set BUCKET=rekognition-image-pipeline-stack-upload-123456789012</code></pre>
<blockquote>
<p><code>123456789012</code> を自分のアカウントIDに置き換える（Outputs の値をそのままコピー）。</p>
</blockquote>
<hr>
<h3><span id="toc17">テスト1: 画像をアップロードしてラベルを確認する</span></h3>
<p>任意の JPEG または PNG 画像（15MB 以下）を用意してアップロードする。</p>
<pre><code class="language-cmd">aws s3 cp "C:\Users\yourname\Pictures\dog.jpg" s3://%BUCKET%/ --region ap-northeast-1</code></pre>
<p>アップロード直後（数秒以内）に Lambda が自動起動する。</p>
<p><strong>CloudWatch Logs でラベル検出結果を確認:</strong></p>
<pre><code class="language-cmd">aws logs tail /aws/lambda/rekognition-image-pipeline-stack-DetectFunction-XXXX --follow</code></pre>
<p>期待するログ出力:</p>
<pre><code class="language-json">{"status": "start", "bucket": "rekognition-image-pipeline-stack-upload-...", "key": "dog.jpg"}
{
  "key": "dog.jpg",
  "label_count": 8,
  "labels": [
    {"name": "Dog", "confidence": 98.5},
    {"name": "Pet", "confidence": 98.5},
    {"name": "Animal", "confidence": 98.5},
    {"name": "Canine", "confidence": 98.5},
    {"name": "Mammal", "confidence": 97.2},
    {"name": "Golden Retriever", "confidence": 85.3},
    {"name": "Grass", "confidence": 76.1},
    {"name": "Outdoors", "confidence": 71.4}
  ]
}
{"processedCount": 1}</code></pre>
<p><!-- ![CloudWatch Logsのラベル検出結果：SAM版で犬の写真から8つのラベルが検出された様子](images/cloudwatch-detect-result-sam.jpg) --></p>
<hr>
<h3><span id="toc18">テスト2: 複数枚アップロードして無料枠を確認する</span></h3>
<pre><code class="language-cmd">aws s3 cp "C:\Users\yourname\Pictures\cat.jpg"  s3://%BUCKET%/ --region ap-northeast-1
aws s3 cp "C:\Users\yourname\Pictures\city.jpg" s3://%BUCKET%/ --region ap-northeast-1</code></pre>
<p>各ファイルのアップロードごとに Lambda が起動し、それぞれのラベル検出結果がログに記録される。</p>
<blockquote>
<p><strong>無料枠の管理：</strong><br />AWS コンソール → Billing → 無料利用枠 → 「Amazon Rekognition」で当月の使用枚数を確認できます。</p>
</blockquote>
<hr>
<h2><span id="toc19">Step 8: AWSコンソールで確認（任意）</span></h2>
<p>SAMでデプロイしたリソースはコンソールでも確認できます。</p>
<ul>
<li><strong>S3</strong>: S3 → <code>rekognition-image-pipeline-stack-upload-...</code> → アップロードしたファイルを確認</li>
<li><strong>Lambda</strong>: Lambda → 関数 → <code>DetectFunction-XXXX</code> → 「設定」→「トリガー」で S3 トリガーを確認</li>
<li><strong>IAM</strong>: IAM → ロール → Lambda のロールに <code>S3ReadPolicy</code> / <code>RekognitionDetectOnlyPolicy</code> が適用されていることを確認</li>
<li><strong>CloudWatch Logs</strong>: Lambda → 「モニタリング」→「CloudWatch Logs を表示」でログ詳細を確認</li>
</ul>
<hr>
<h2><span id="toc20">Step 9: リソースの削除</span></h2>
<p><strong>課金を止めるために、ハンズオン完了後は必ず削除してください。</strong></p>
<blockquote>
<p><strong>【注意】</strong> S3 バケットにオブジェクトが残っていると <code>sam delete</code> が失敗します。<br />先にバケットを空にしてから実行してください。</p>
</blockquote>
<pre><code class="language-cmd">rem Step 1: バケットを空にする
aws s3 rm s3://%BUCKET% --recursive --region ap-northeast-1

rem Step 2: スタック削除
sam delete --stack-name rekognition-image-pipeline-stack --region ap-northeast-1</code></pre>
<pre><code class="language-plaintext">Are you sure you want to delete the stack rekognition-image-pipeline-stack? [y/N]: y
Are you sure you want to delete the folder rekognition-image-pipeline-stack in S3? [y/N]: y</code></pre>
<p>削除完了の確認:</p>
<pre><code class="language-cmd">aws cloudformation describe-stacks --stack-name rekognition-image-pipeline-stack --region ap-northeast-1</code></pre>
<p><code>Stack with id rekognition-image-pipeline-stack does not exist</code> が表示されれば削除完了。</p>
<blockquote>
<p><strong>削除されるリソース一覧:</strong></p>
<ul>
<li>S3 バケット（事前に空にした場合）</li>
<li>Lambda 関数</li>
<li>IAM ロール</li>
<li>CloudWatch Logs ロググループ</li>
</ul>
<p>Rekognition はサービス自体（バケット・コレクション等）を作成しないため、削除作業は不要です。</p>
</blockquote>
<hr>
<h2><span id="toc21">トラブルシューティング</span></h2>
<table>
<thead>
<tr>
<th>症状</th>
<th>原因</th>
<th>対処</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>sam deploy</code> で <code>BucketAlreadyOwnedByYou</code></td>
<td>バケット名が既存と重複</td>
<td><code>stack_name</code> を変更して <code>samconfig.toml</code> を更新する</td>
</tr>
<tr>
<td>画像アップロード後 Lambda が動作しない</td>
<td>S3 トリガーが未設定（デプロイエラー）</td>
<td><code>sam deploy</code> が正常完了しているか確認。CloudFormation スタックイベントを確認</td>
</tr>
<tr>
<td><code>AccessDeniedException</code> (Rekognition)</td>
<td><code>RekognitionDetectOnlyPolicy</code> が適用されていない</td>
<td><code>sam deploy</code> を再実行</td>
</tr>
<tr>
<td><code>AccessDenied</code> (S3)</td>
<td><code>S3ReadPolicy</code> が適用されていない</td>
<td>Lambda と S3 が同一リージョンかを確認。<code>sam deploy</code> を再実行</td>
</tr>
<tr>
<td><code>InvalidImageFormatException</code></td>
<td>JPEG/PNG 以外のファイルをアップロードした</td>
<td>JPEG または PNG 形式の画像を使用する</td>
</tr>
<tr>
<td><code>ImageTooLargeException</code></td>
<td>15MB を超える画像をアップロードした</td>
<td>15MB 以下の画像を使用する</td>
</tr>
<tr>
<td><code>sam delete</code> で <code>BucketNotEmpty</code> エラー</td>
<td>S3 バケットにオブジェクトが残っている</td>
<td><code>aws s3 rm s3://%BUCKET% --recursive</code> で先に空にする</td>
</tr>
<tr>
<td>ラベルが 0 件または少ない</td>
<td><code>MinConfidence</code> が高い、または被写体が不明瞭</td>
<td><code>MinConfidence=70</code> を下げて再デプロイ。または別の画像を試す</td>
</tr>
</tbody>
</table>
<hr>
<h2><span id="toc22">まとめ</span></h2>
<p>今回のハンズオンで実現したこと：</p>
<table>
<thead>
<tr>
<th>確認項目</th>
<th>内容</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>S3 + Lambda の連携</strong></td>
<td>画像アップロードを契機に Lambda が自動起動する仕組みをコードで定義</td>
</tr>
<tr>
<td><strong>Rekognition DetectLabels</strong></td>
<td>画像に写った物体・動物・シーンが自動でラベル付けされる様子を確認</td>
</tr>
<tr>
<td><strong>SAM 組み込みポリシー</strong></td>
<td><code>S3ReadPolicy</code> / <code>RekognitionDetectOnlyPolicy</code> で権限設定が1行で完結</td>
</tr>
<tr>
<td><strong>一括削除</strong></td>
<td><code>sam delete</code> でS3 / Lambda / IAM を一括クリーンアップ</td>
</tr>
</tbody>
</table>
<h3><span id="toc23">SAMのメリットを実感できたポイント</span></h3>
<ul>
<li><code>RekognitionDetectOnlyPolicy: {}</code> と <code>S3ReadPolicy</code> により IAM 権限設定がワンライナーで完結</li>
<li>S3 バケット名に <code>!Sub &quot;${AWS::StackName}-upload-${AWS::AccountId}&quot;</code> を使うことでグローバルユニークを自動保証</li>
<li><code>sam delete</code> で S3 / Lambda / IAM を一括削除。コンソール版のような個別削除が不要</li>
</ul>
<hr>
<h2><span id="toc24">コンソール版と比較してみる</span></h2>
<p>SAMが裏で何をやっているか、同じ構成をAWSコンソールのみで構築する手順をまとめました。コンソール版では IAM の権限追加を S3 用・Rekognition 用と2回行う必要があるなど、SAMの組み込みポリシーがどれだけ手間を削減しているかが明確に分かります。</p>
<p><!-- TODO: コンソール版記事へのリンクを追加 --></p>
<hr>
<h2><span id="toc25">関連記事</span></h2>
<p><a rel="nofollow" href="//af.moshimo.com/af/c/click?a_id=1384942&p_id=170&pc_id=185&pl_id=4062&url=https%3A%2F%2Fwww.amazon.co.jp%2Fs%3Fk%3D%25E6%259C%25AC%2BAWS%2B%25E9%2596%258B%25E7%2599%25BA%26__mk_ja_JP%3D%25E3%2582%25AB%25E3%2582%25BF%25E3%2582%25AB%25E3%2583%258A%26crid%3D1DE63UBHFOR4K%26sprefix%3D%25E6%259C%25AC%2Baws%2B%25E9%2596%258B%25E7%2599%25BA%252Caps%252C167%26ref%3Dnb_sb_noss" referrerpolicy="no-referrer-when-downgrade" attributionsrc>Amazon検索[本 AWS 開発]</a><img decoding="async" src="//i.moshimo.com/af/i/impression?a_id=1384942&p_id=170&pc_id=185&pl_id=4062" width="1" height="1" style="border:none;" alt="" loading="lazy"></p>
<p><!-- START MoshimoAffiliateEasyLink --><script type="text/javascript">(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;b[a]=b[a]||function(){arguments.currentScript=c.currentScript||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};c.getElementById(a)||(d=c.createElement(f),d.src=g,d.id=a,e=c.getElementsByTagName("body")[0],e.appendChild(d))})(window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js?20220329","msmaflink");msmaflink({"n":"AWS運用入門 改訂第2版 押さえておきたいAWSの基本と運用ノウハウ [AWS深掘りガイド]","b":"SBクリエイティブ","t":"","d":"https:\/\/m.media-amazon.com","c_p":"\/images\/I","p":["\/51AAOubymTL._SL500_.jpg","\/51VMG6YKHdL._SL500_.jpg","\/41EdPB8azAL._SL500_.jpg","\/41v2JFE-9jL._SL500_.jpg","\/41FEEqR-yDL._SL500_.jpg","\/41JfZAdnTPL._SL500_.jpg","\/41vGK0czQrL._SL500_.jpg","\/41-SnYtz2aL._SL500_.jpg","\/41sPrV5fi3L._SL500_.jpg","\/41p7JtvYJ1L._SL500_.jpg","\/4169GVNTs8L._SL500_.jpg","\/41BPI5HP3zL._SL500_.jpg","\/41QOyk60CYL._SL500_.jpg","\/41APjk6FphL._SL500_.jpg","\/41ezKUu7VRL._SL500_.jpg","\/41A1n3K+r5L._SL500_.jpg","\/41aY2T8lEOL._SL500_.jpg","\/419Ca1V6HZL._SL500_.jpg","\/41zQkYyLPzL._SL500_.jpg","\/41YpHcyxiTL._SL500_.jpg","\/41-tKN5mt6L._SL500_.jpg","\/419Mv6m55IL._SL500_.jpg"],"u":{"u":"https:\/\/www.amazon.co.jp\/dp\/4815631085","t":"amazon","r_v":""},"v":"2.1","b_l":[{"id":1,"u_tx":"Amazonで見る","u_bc":"#f79256","u_url":"https:\/\/www.amazon.co.jp\/dp\/4815631085","a_id":1384942,"p_id":170,"pl_id":27060,"pc_id":185,"s_n":"amazon","u_so":1},{"id":2,"u_tx":"楽天市場で見る","u_bc":"#f76956","u_url":"https:\/\/search.rakuten.co.jp\/search\/mall\/AWS%E9%81%8B%E7%94%A8%E5%85%A5%E9%96%80%20%E6%94%B9%E8%A8%82%E7%AC%AC2%E7%89%88%20%E6%8A%BC%E3%81%95%E3%81%88%E3%81%A6%E3%81%8A%E3%81%8D%E3%81%9F%E3%81%84AWS%E3%81%AE%E5%9F%BA%E6%9C%AC%E3%81%A8%E9%81%8B%E7%94%A8%E3%83%8E%E3%82%A6%E3%83%8F%E3%82%A6%20%5BAWS%E6%B7%B1%E6%8E%98%E3%82%8A%E3%82%AC%E3%82%A4%E3%83%89%5D\/","a_id":1384917,"p_id":54,"pl_id":27059,"pc_id":54,"s_n":"rakuten","u_so":2},{"id":3,"u_tx":"Yahoo!ショッピングで見る","u_bc":"#66a7ff","u_url":"https:\/\/shopping.yahoo.co.jp\/search?first=1\u0026p=AWS%E9%81%8B%E7%94%A8%E5%85%A5%E9%96%80%20%E6%94%B9%E8%A8%82%E7%AC%AC2%E7%89%88%20%E6%8A%BC%E3%81%95%E3%81%88%E3%81%A6%E3%81%8A%E3%81%8D%E3%81%9F%E3%81%84AWS%E3%81%AE%E5%9F%BA%E6%9C%AC%E3%81%A8%E9%81%8B%E7%94%A8%E3%83%8E%E3%82%A6%E3%83%8F%E3%82%A6%20%5BAWS%E6%B7%B1%E6%8E%98%E3%82%8A%E3%82%AC%E3%82%A4%E3%83%89%5D","a_id":1466950,"p_id":1225,"pl_id":27061,"pc_id":1925,"s_n":"yahoo","u_so":3}],"eid":"E8MM1","s":"s"});</script></p>
<div id="msmaflink-E8MM1">リンク</div>
<p><!-- MoshimoAffiliateEasyLink END --></p><p>The post <a href="https://caymezon.com/aws-handson-rekognition-image-pipeline/">AWS SAM で画像認識パイプライン（S3 + Lambda + Rekognition）を構築しよう【コンソール版との比較付き】</a> first appeared on <a href="https://caymezon.com">CayTech Lab</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://caymezon.com/aws-handson-rekognition-image-pipeline/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>AWSコンソールだけで画像認識パイプラインを構築する手順【S3 + Lambda + Rekognition / SAM版との比較付き】</title>
		<link>https://caymezon.com/aws-handson-console-rekognition-image-pipeline/</link>
					<comments>https://caymezon.com/aws-handson-console-rekognition-image-pipeline/#respond</comments>
		
		<dc:creator><![CDATA[caymezon]]></dc:creator>
		<pubDate>Sun, 08 Mar 2026 02:58:22 +0000</pubDate>
				<category><![CDATA[AWS Basic]]></category>
		<category><![CDATA[Cloud & Infra]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[AWSコンソール]]></category>
		<category><![CDATA[Lambda]]></category>
		<category><![CDATA[ML]]></category>
		<category><![CDATA[Rekognition]]></category>
		<category><![CDATA[S3]]></category>
		<category><![CDATA[SAM比較]]></category>
		<category><![CDATA[サーバーレス]]></category>
		<category><![CDATA[ハンズオン]]></category>
		<category><![CDATA[初心者]]></category>
		<category><![CDATA[画像認識]]></category>
		<category><![CDATA[画像認識パイプライン]]></category>
		<guid isPermaLink="false">https://caymezon.com/?p=20249</guid>

					<description><![CDATA[<p>目次 はじめにキーワード解説使用するAWSサービス全体の作業順序① S3 バケットを作成する② Lambda 関数を作成するタイムアウトの設定コードの入力③ Lambda の実行ロールに権限を追加する3-1. Rekog [&#8230;]</p>
<p>The post <a href="https://caymezon.com/aws-handson-console-rekognition-image-pipeline/">AWSコンソールだけで画像認識パイプラインを構築する手順【S3 + Lambda + Rekognition / SAM版との比較付き】</a> first appeared on <a href="https://caymezon.com">CayTech Lab</a>.</p>]]></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></li><li><a href="#toc3" tabindex="0">使用するAWSサービス</a></li><li><a href="#toc4" tabindex="0">全体の作業順序</a></li><li><a href="#toc5" tabindex="0">① S3 バケットを作成する</a></li><li><a href="#toc6" tabindex="0">② Lambda 関数を作成する</a><ol><li><a href="#toc7" tabindex="0">タイムアウトの設定</a></li><li><a href="#toc8" tabindex="0">コードの入力</a></li></ol></li><li><a href="#toc9" tabindex="0">③ Lambda の実行ロールに権限を追加する</a><ol><li><a href="#toc10" tabindex="0">3-1. Rekognition 権限を追加する</a></li><li><a href="#toc11" tabindex="0">3-2. S3 GetObject 権限を追加する</a></li></ol></li><li><a href="#toc12" tabindex="0">④ Lambda に S3 トリガーを追加する</a></li><li><a href="#toc13" tabindex="0">⑤ 動作テスト</a><ol><li><a href="#toc14" tabindex="0">テスト用画像の準備</a></li><li><a href="#toc15" tabindex="0">画像をアップロードする</a></li><li><a href="#toc16" tabindex="0">CloudWatch Logs でラベル検出結果を確認する</a></li><li><a href="#toc17" tabindex="0">複数枚でテストする</a></li></ol></li><li><a href="#toc18" tabindex="0">⑥ リソースの削除</a><ol><li><a href="#toc19" tabindex="0">1. S3 バケットのオブジェクトを全て削除する</a></li><li><a href="#toc20" tabindex="0">2. S3 バケットを削除する</a></li><li><a href="#toc21" tabindex="0">3. Lambda のトリガーを削除する</a></li><li><a href="#toc22" tabindex="0">4. Lambda 関数を削除する</a></li><li><a href="#toc23" tabindex="0">5. IAM ロールを削除する（任意）</a></li><li><a href="#toc24" tabindex="0">6. CloudWatch Logs のロググループを削除する（任意）</a></li></ol></li><li><a href="#toc25" tabindex="0">SAMとの対比</a></li><li><a href="#toc26" tabindex="0">トラブルシューティング</a></li><li><a href="#toc27" tabindex="0">まとめ</a><ol><li><a href="#toc28" tabindex="0">コンソール版で実感できたポイント</a></li></ol></li><li><a href="#toc29" tabindex="0">コンソール版と SAM 版を比較してみる</a></li><li><a href="#toc30" tabindex="0">関連記事</a></li></ol>
    </div>
  </div>

<h2><span id="toc1">はじめに</span></h2>
<p>「S3に画像をアップロードしたら、自動で中身を分析してほしい」——そんな仕組みを、<strong>AWSコンソールのみ</strong>でゼロから構築するハンズオンです。</p>
<p>Amazon Rekognition の <code>DetectLabels</code> API を使うと、画像に写っている物体・シーン・動物などを自動で検出できます。犬の写真をアップロードすれば「Dog（信頼度98%）」「Animal（97%）」といったラベルが返ってきます。</p>
<pre><code class="language-plaintext">ユーザー
  ↓ JPEG / PNG をアップロード
S3 バケット（UploadBucket）
  ↓ ObjectCreated イベント（自動）
Lambda（DetectFunction）
  ↓ rekognition:DetectLabels（S3Object を指定）
Amazon Rekognition
  ↓ [{"name": "Dog", "confidence": 98.5}, ...] を返す
Lambda
  ↓ print（JSON）
CloudWatch Logs</code></pre>
<p><strong>このハンズオンで体験できること：</strong></p>
<ul>
<li><strong>S3 トリガー</strong> — S3 へのアップロードを契機に Lambda を自動起動する仕組み</li>
<li><strong>Rekognition DetectLabels</strong> — 画像内の物体・シーン・動物を検出してラベルと信頼度を返す API</li>
<li><strong>IAM 権限管理</strong> — Lambda から S3・Rekognition を呼び出すために必要な権限の追加手順</li>
<li><strong>S3Object 参照</strong> — 画像データを Lambda に転送せず S3 の場所を直接 Rekognition に渡す効率的な方法</li>
</ul>
<hr>
<blockquote>
<p><strong>この記事は <a href="#">SAM版ハンズオン</a> の比較記事です。</strong><br />コンソール操作で S3・Lambda・Rekognition の連携を視覚的に学び、SAM と何が違うのかを比較したい方向けです。</p>
</blockquote>
<hr>
<p><a rel="nofollow" href="//af.moshimo.com/af/c/click?a_id=1384942&p_id=170&pc_id=185&pl_id=4062&url=https%3A%2F%2Fwww.amazon.co.jp%2Fs%3Fk%3D%25E6%259C%25AC%2BAWS%2B%25E9%2596%258B%25E7%2599%25BA%26__mk_ja_JP%3D%25E3%2582%25AB%25E3%2582%25BF%25E3%2582%25AB%25E3%2583%258A%26crid%3D1DE63UBHFOR4K%26sprefix%3D%25E6%259C%25AC%2Baws%2B%25E9%2596%258B%25E7%2599%25BA%252Caps%252C167%26ref%3Dnb_sb_noss" referrerpolicy="no-referrer-when-downgrade" attributionsrc>Amazon検索[本 AWS 開発]</a><img decoding="async" src="//i.moshimo.com/af/i/impression?a_id=1384942&p_id=170&pc_id=185&pl_id=4062" width="1" height="1" style="border:none;" alt="" loading="lazy"></p>
<p><!-- START MoshimoAffiliateEasyLink --><script type="text/javascript">(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;b[a]=b[a]||function(){arguments.currentScript=c.currentScript||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};c.getElementById(a)||(d=c.createElement(f),d.src=g,d.id=a,e=c.getElementsByTagName("body")[0],e.appendChild(d))})(window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js?20220329","msmaflink");msmaflink({"n":"AWSの基本・仕組み・重要用語が全部わかる教科書 (見るだけ図解)","b":"SBクリエイティブ","t":"","d":"https:\/\/m.media-amazon.com","c_p":"\/images\/I","p":["\/51DEDQXj6oL._SL500_.jpg","\/41F589smNwL._SL500_.jpg","\/41R6f9yyCWL._SL500_.jpg","\/41HqWQ9BvmL._SL500_.jpg","\/41p8p0ZU79L._SL500_.jpg","\/41qLC-fndBL._SL500_.jpg","\/41fcLv9VT5L._SL500_.jpg","\/51lRvCsvHqL._SL500_.jpg"],"u":{"u":"https:\/\/www.amazon.co.jp\/dp\/4815607850","t":"amazon","r_v":""},"v":"2.1","b_l":[{"id":1,"u_tx":"Amazonで見る","u_bc":"#f79256","u_url":"https:\/\/www.amazon.co.jp\/dp\/4815607850","a_id":1384942,"p_id":170,"pl_id":27060,"pc_id":185,"s_n":"amazon","u_so":1},{"id":2,"u_tx":"楽天市場で見る","u_bc":"#f76956","u_url":"https:\/\/search.rakuten.co.jp\/search\/mall\/AWS%E3%81%AE%E5%9F%BA%E6%9C%AC%E3%83%BB%E4%BB%95%E7%B5%84%E3%81%BF%E3%83%BB%E9%87%8D%E8%A6%81%E7%94%A8%E8%AA%9E%E3%81%8C%E5%85%A8%E9%83%A8%E3%82%8F%E3%81%8B%E3%82%8B%E6%95%99%E7%A7%91%E6%9B%B8%20(%E8%A6%8B%E3%82%8B%E3%81%A0%E3%81%91%E5%9B%B3%E8%A7%A3)\/","a_id":1384917,"p_id":54,"pl_id":27059,"pc_id":54,"s_n":"rakuten","u_so":2},{"id":3,"u_tx":"Yahoo!ショッピングで見る","u_bc":"#66a7ff","u_url":"https:\/\/shopping.yahoo.co.jp\/search?first=1\u0026p=AWS%E3%81%AE%E5%9F%BA%E6%9C%AC%E3%83%BB%E4%BB%95%E7%B5%84%E3%81%BF%E3%83%BB%E9%87%8D%E8%A6%81%E7%94%A8%E8%AA%9E%E3%81%8C%E5%85%A8%E9%83%A8%E3%82%8F%E3%81%8B%E3%82%8B%E6%95%99%E7%A7%91%E6%9B%B8%20(%E8%A6%8B%E3%82%8B%E3%81%A0%E3%81%91%E5%9B%B3%E8%A7%A3)","a_id":1466950,"p_id":1225,"pl_id":27061,"pc_id":1925,"s_n":"yahoo","u_so":3}],"eid":"eaCUB","s":"s"});</script></p>
<div id="msmaflink-eaCUB">リンク</div>
<p><!-- MoshimoAffiliateEasyLink END --></p>
<h2><span id="toc2">キーワード解説</span></h2>
<table>
<thead>
<tr>
<th>用語</th>
<th>意味</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>DetectLabels</strong></td>
<td>Rekognition API。画像内の物体・シーンを検出してラベル名と信頼度を返す</td>
</tr>
<tr>
<td><strong>信頼度（Confidence）</strong></td>
<td>ラベルが正確であるかどうかの確度（0〜100%）。今回は70%以上のみ返す</td>
</tr>
<tr>
<td><strong>S3Object 参照</strong></td>
<td>画像データを Lambda に転送せず、S3 の場所を Rekognition に渡す方式</td>
</tr>
<tr>
<td><strong>S3 イベント通知</strong></td>
<td>S3 バケットへのオブジェクト作成・削除などをトリガーに Lambda を呼び出す仕組み</td>
</tr>
<tr>
<td><strong>実行ロール</strong></td>
<td>Lambda が他の AWS サービスを操作するために使う IAM ロール</td>
</tr>
<tr>
<td><strong>無料枠</strong></td>
<td>最初の12ヶ月 / 月5,000枚まで無料。超過後は $0.001/枚</td>
</tr>
</tbody>
</table>
<hr>
<h2><span id="toc3">使用するAWSサービス</span></h2>
<table>
<thead>
<tr>
<th>サービス</th>
<th>役割</th>
<th>料金</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>S3</strong></td>
<td>画像のアップロード先バケット</td>
<td>月5GBまで無料</td>
</tr>
<tr>
<td><strong>Lambda</strong></td>
<td>S3 イベントを受けて Rekognition を呼び出す</td>
<td>月100万リクエスト・400,000 GB-秒まで無料</td>
</tr>
<tr>
<td><strong>Rekognition</strong></td>
<td>画像ラベル検出（DetectLabels）</td>
<td>最初の12ヶ月 / 月5,000枚まで無料</td>
</tr>
<tr>
<td><strong>IAM</strong></td>
<td>Lambda の実行権限管理</td>
<td>無料</td>
</tr>
<tr>
<td><strong>CloudWatch Logs</strong></td>
<td>Lambda の実行ログ（ラベル検出結果）</td>
<td>月5GBまで無料</td>
</tr>
</tbody>
</table>
<hr>
<h2><span id="toc4">全体の作業順序</span></h2>
<pre><code class="language-plaintext">① S3 バケットを作成する
      ↓
② Lambda 関数を作成する（コード入力・タイムアウト設定）
      ↓
③ Lambda の実行ロールに権限を追加する
  （S3: GetObject / Rekognition: DetectLabels）
      ↓
④ Lambda に S3 トリガーを追加する
      ↓
⑤ 動作テスト（画像をアップロード → ログを確認）
      ↓
⑥ リソースの削除</code></pre>
<hr>
<h2><span id="toc5">① S3 バケットを作成する</span></h2>
<p><strong>AWSコンソール → S3 → 「バケットを作成」</strong></p>
<table>
<thead>
<tr>
<th>設定項目</th>
<th>値</th>
</tr>
</thead>
<tbody>
<tr>
<td>バケット名</td>
<td><code>my-rekognition-upload</code>（グローバルユニークな名前）</td>
</tr>
<tr>
<td>リージョン</td>
<td><strong>アジアパシフィック（東京）ap-northeast-1</strong></td>
</tr>
<tr>
<td>その他</td>
<td>デフォルトのまま</td>
</tr>
</tbody>
</table>
<p>「バケットを作成」をクリック。</p>
<p><strong>控えておく情報:</strong></p>
<ul>
<li><strong>バケット名</strong>（削除時・IAMポリシー設定時に使用）</li>
</ul>
<blockquote>
<p><strong>バケット名のグローバルユニークについて：</strong><br />S3 のバケット名は全 AWS アカウントで一意である必要があります。<code>my-rekognition-upload-</code> に自分のアカウントIDや日付を追加すると重複を避けられます。</p>
</blockquote>
<hr>
<h2><span id="toc6">② Lambda 関数を作成する</span></h2>
<p><strong>AWSコンソール → Lambda → 「関数の作成」</strong></p>
<table>
<thead>
<tr>
<th>設定項目</th>
<th>値</th>
</tr>
</thead>
<tbody>
<tr>
<td>作成方法</td>
<td>一から作成</td>
</tr>
<tr>
<td>関数名</td>
<td><code>DetectFunction</code></td>
</tr>
<tr>
<td>ランタイム</td>
<td><strong>Python 3.12</strong></td>
</tr>
<tr>
<td>アーキテクチャ</td>
<td>x86_64</td>
</tr>
<tr>
<td>実行ロール</td>
<td>「基本的な Lambda アクセス権限で新しいロールを作成」（デフォルト）</td>
</tr>
</tbody>
</table>
<p>「関数の作成」をクリック。</p>
<h3><span id="toc7">タイムアウトの設定</span></h3>
<p><strong>「設定」タブ → 「一般設定」→「編集」</strong></p>
<table>
<thead>
<tr>
<th>設定項目</th>
<th>値</th>
</tr>
</thead>
<tbody>
<tr>
<td>タイムアウト</td>
<td><strong>30</strong> 秒</td>
</tr>
</tbody>
</table>
<p>「保存」をクリック。</p>
<blockquote>
<p><strong>タイムアウトを 30 秒にする理由：</strong><br />Rekognition API の呼び出しには数秒かかることがあります。デフォルト（3秒）では Rekognition のレスポンスを待ちきれずタイムアウトするため、余裕を持って 30 秒に設定します。</p>
</blockquote>
<h3><span id="toc8">コードの入力</span></h3>
<p>「コード」タブ → <code>lambda_function.py</code> を開いて既存の内容を全て置き換える。</p>
<pre><code class="language-python">import json
import urllib.parse
import boto3

rekognition = boto3.client("rekognition")


def lambda_handler(event, context):
    for record in event["Records"]:
        bucket = record["s3"]["bucket"]["name"]
        key = urllib.parse.unquote_plus(record["s3"]["object"]["key"])

        print(json.dumps({"status": "start", "bucket": bucket, "key": key}))

        response = rekognition.detect_labels(
            Image={
                "S3Object": {
                    "Bucket": bucket,
                    "Name": key,
                }
            },
            MaxLabels=10,
            MinConfidence=70,
        )

        labels = [
            {
                "name": label["Name"],
                "confidence": round(label["Confidence"], 1),
            }
            for label in response["Labels"]
        ]

        result = {
            "bucket": bucket,
            "key": key,
            "label_count": len(labels),
            "labels": labels,
        }
        print(json.dumps(result, ensure_ascii=False))

    return {"processedCount": len(event["Records"])}</code></pre>
<p>「Deploy」ボタンをクリックしてコードを保存する。</p>
<p><strong>コードのポイント:</strong></p>
<table>
<thead>
<tr>
<th>ポイント</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>rekognition = boto3.client(&quot;rekognition&quot;)</code> をグローバルに置く</td>
<td>Lambda のコールドスタート時に1回だけ初期化。ウォームスタート時は再利用されパフォーマンスが向上する</td>
</tr>
<tr>
<td><code>urllib.parse.unquote_plus(key)</code></td>
<td>日本語や空白を含むファイル名は S3 イベントで URL エンコードされるため、デコードが必要</td>
</tr>
<tr>
<td><code>S3Object</code> 参照</td>
<td>画像データを Lambda のメモリに転送せず S3 の場所を Rekognition に渡す。メモリ効率が良い</td>
</tr>
<tr>
<td><code>MinConfidence=70</code></td>
<td>信頼度 70% 未満のラベルは結果から除外。全件見たい場合は <code>0</code> に変更して Deploy する</td>
</tr>
</tbody>
</table>
<hr>
<h2><span id="toc9">③ Lambda の実行ロールに権限を追加する</span></h2>
<p>デフォルトの実行ロールは CloudWatch Logs への書き込みのみ。<br />S3 からの読み取りと Rekognition の呼び出し権限を追加する。</p>
<p><strong>Lambda → <code>DetectFunction</code> → 「設定」タブ → 「アクセス権限」→ 実行ロール名のリンクをクリック</strong></p>
<p>（例: <code>DetectFunction-role-XXXX</code>）→ IAM コンソールのロール画面が開く。</p>
<h3><span id="toc10">3-1. Rekognition 権限を追加する</span></h3>
<p>「許可を追加」→「ポリシーをアタッチ」</p>
<p>検索ボックスに <code>Rekognition</code> と入力 → <strong><code>AmazonRekognitionReadOnlyAccess</code></strong> にチェック → 「許可を追加」。</p>
<blockquote>
<p><strong>AmazonRekognitionReadOnlyAccess に含まれる主な権限:</strong></p>
<ul>
<li><code>rekognition:DetectLabels</code> — ラベル検出（今回使用）</li>
<li><code>rekognition:DetectFaces</code> — 顔検出</li>
<li><code>rekognition:DetectText</code> — テキスト検出</li>
</ul>
</blockquote>
<h3><span id="toc11">3-2. S3 GetObject 権限を追加する</span></h3>
<p>「許可を追加」→「インラインポリシーを作成」</p>
<p>「JSON」タブを選択して以下を入力する（<code>my-rekognition-upload</code> を ① のバケット名に変更）:</p>
<pre><code class="language-json">{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::my-rekognition-upload/*"
    }
  ]
}</code></pre>
<p>「次へ」→ ポリシー名: <code>S3ReadForRekognition</code> → 「ポリシーを作成」。</p>
<blockquote>
<p><strong>なぜ S3 の権限が必要か:</strong><br />Rekognition に <code>S3Object</code> を指定した場合、Rekognition が Lambda の IAM ロールを借りて<br />S3 からオブジェクトを取得します。Lambda ロールに <code>s3:GetObject</code> がないと 403 エラーになります。</p>
<p>SAM版では <code>S3ReadPolicy</code>（SAM 組み込みポリシー）が特定バケットのみに <code>s3:GetObject</code> を自動付与します。<br />コンソール版では手動でインラインポリシーを作成する必要があります。</p>
</blockquote>
<hr>
<h2><span id="toc12">④ Lambda に S3 トリガーを追加する</span></h2>
<p><strong>Lambda → <code>DetectFunction</code> → 「設定」タブ → 「トリガー」→「トリガーを追加」</strong></p>
<table>
<thead>
<tr>
<th>設定項目</th>
<th>値</th>
</tr>
</thead>
<tbody>
<tr>
<td>ソース</td>
<td><strong>S3</strong></td>
</tr>
<tr>
<td>バケット</td>
<td><code>my-rekognition-upload</code>（① で作成したバケット）</td>
</tr>
<tr>
<td>イベントタイプ</td>
<td><strong>すべてのオブジェクト作成イベント（s3:ObjectCreated:*）</strong></td>
</tr>
<tr>
<td>プレフィックス</td>
<td>空欄（全ファイルを対象）</td>
</tr>
<tr>
<td>サフィックス</td>
<td>空欄（全形式を対象）</td>
</tr>
</tbody>
</table>
<p>「再帰呼び出し」の確認チェックボックスにチェック → 「追加」をクリック。</p>
<blockquote>
<p><strong>再帰呼び出しについて：</strong><br />Lambda の実行結果を同じバケットに書き込む構成にすると、S3 イベントが再発火して無限ループになります。<br />今回は S3 への書き込みを行わないため問題ありません。</p>
</blockquote>
<p><!-- ![S3トリガー追加画面：バケットとイベントタイプの設定](images/s3-trigger-setting.jpg) --></p>
<hr>
<h2><span id="toc13">⑤ 動作テスト</span></h2>
<h3><span id="toc14">テスト用画像の準備</span></h3>
<p>任意の JPEG または PNG 画像を用意する（例: 犬・猫・風景など）。<br />ファイルサイズは <strong>15MB 以下</strong> であることを確認する。</p>
<h3><span id="toc15">画像をアップロードする</span></h3>
<p><strong>方法 A: S3 コンソール</strong></p>
<p>S3 → <code>my-rekognition-upload</code> → 「アップロード」→ ファイルをドラッグ＆ドロップ → 「アップロード」</p>
<p><strong>方法 B: AWS CLI</strong></p>
<pre><code class="language-cmd">aws s3 cp "C:\Users\yourname\Pictures\dog.jpg" s3://my-rekognition-upload/ --region ap-northeast-1</code></pre>
<h3><span id="toc16">CloudWatch Logs でラベル検出結果を確認する</span></h3>
<p><strong>Lambda → <code>DetectFunction</code> → 「モニタリング」タブ → 「CloudWatch Logs を表示」</strong></p>
<p>最新のロットストリームを開いて以下のような出力を確認する。</p>
<pre><code class="language-json">{"status": "start", "bucket": "my-rekognition-upload", "key": "dog.jpg"}
{
  "bucket": "my-rekognition-upload",
  "key": "dog.jpg",
  "label_count": 8,
  "labels": [
    {"name": "Dog", "confidence": 98.5},
    {"name": "Pet", "confidence": 98.5},
    {"name": "Animal", "confidence": 98.5},
    {"name": "Canine", "confidence": 98.5},
    {"name": "Mammal", "confidence": 97.2},
    {"name": "Golden Retriever", "confidence": 85.3},
    {"name": "Grass", "confidence": 76.1},
    {"name": "Outdoors", "confidence": 71.4}
  ]
}
{"processedCount": 1}</code></pre>
<p><!-- ![CloudWatch Logsのラベル検出結果：犬の写真から8つのラベルが検出された様子](images/cloudwatch-detect-result.jpg) --></p>
<blockquote>
<p><strong><code>MinConfidence: 70</code> の効果：</strong><br />信頼度 70% 未満のラベルは結果に含まれません。<br />全ラベルを確認したい場合は <code>MinConfidence=0</code> に変更して「Deploy」する。</p>
</blockquote>
<h3><span id="toc17">複数枚でテストする</span></h3>
<pre><code class="language-cmd">aws s3 cp "C:\Users\yourname\Pictures\cat.jpg"  s3://my-rekognition-upload/ --region ap-northeast-1
aws s3 cp "C:\Users\yourname\Pictures\city.jpg" s3://my-rekognition-upload/ --region ap-northeast-1</code></pre>
<p>各ファイルのアップロードごとに Lambda が起動し、それぞれのラベル検出結果がログに記録される。</p>
<blockquote>
<p><strong>無料枠の管理：</strong><br />AWS コンソール → Billing → 無料利用枠 → 「Amazon Rekognition」で当月の使用枚数を確認できます。<br />月5,000枚まで無料のため、学習目的のハンズオンでは通常課金されません。</p>
</blockquote>
<hr>
<h2><span id="toc18">⑥ リソースの削除</span></h2>
<p><strong>課金を止めるために、ハンズオン完了後は必ず削除してください。</strong></p>
<h3><span id="toc19">1. S3 バケットのオブジェクトを全て削除する</span></h3>
<pre><code class="language-cmd">aws s3 rm s3://my-rekognition-upload --recursive --region ap-northeast-1</code></pre>
<h3><span id="toc20">2. S3 バケットを削除する</span></h3>
<p><strong>S3 → <code>my-rekognition-upload</code> → 「削除」→ バケット名を入力 → 「削除」</strong></p>
<h3><span id="toc21">3. Lambda のトリガーを削除する</span></h3>
<p><strong>Lambda → <code>DetectFunction</code> → 「設定」→「トリガー」→ S3 トリガーを選択 → 「削除」</strong></p>
<h3><span id="toc22">4. Lambda 関数を削除する</span></h3>
<p><strong>Lambda → 関数 → <code>DetectFunction</code> → 「アクション」→「削除」</strong></p>
<h3><span id="toc23">5. IAM ロールを削除する（任意）</span></h3>
<p><strong>IAM → ロール → <code>DetectFunction-role-XXXX</code> を削除</strong></p>
<h3><span id="toc24">6. CloudWatch Logs のロググループを削除する（任意）</span></h3>
<p><strong>CloudWatch → ロググループ → <code>/aws/lambda/DetectFunction</code> → 削除</strong></p>
<blockquote>
<p><strong>SAM版との大きな違い（SAMのメリット）：</strong><br />SAM版では <code>sam delete</code> 1コマンドで上記すべてのリソースを一括削除できます。</p>
</blockquote>
<hr>
<h2><span id="toc25">SAMとの対比</span></h2>
<table>
<thead>
<tr>
<th>SAMの記述</th>
<th>コンソールでやること</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>AWS::S3::Bucket</code></td>
<td>S3 → バケットを作成</td>
</tr>
<tr>
<td><code>S3ReadPolicy</code>（SAM組み込み）</td>
<td>IAM → ロールにインラインポリシーで <code>s3:GetObject</code> を追加</td>
</tr>
<tr>
<td><code>RekognitionDetectOnlyPolicy</code>（SAM組み込み）</td>
<td>IAM → ロールに <code>AmazonRekognitionReadOnlyAccess</code> をアタッチ</td>
</tr>
<tr>
<td><code>Events: Type: S3</code>（ObjectCreated）</td>
<td>Lambda → トリガーを追加（S3・全オブジェクト作成イベント）</td>
</tr>
<tr>
<td><code>sam delete</code></td>
<td>S3を空にしてから削除 + Lambda + IAM + CloudWatch Logs を個別に削除</td>
</tr>
</tbody>
</table>
<blockquote>
<p><strong>コンソール版のつまずきポイント：</strong><br /><code>AccessDeniedException</code> が出た場合、S3 の GetObject 権限（インラインポリシー）と Rekognition の DetectLabels 権限（AmazonRekognitionReadOnlyAccess）の両方が揃っているか確認しましょう。どちらか一方が欠けていてもエラーになります。</p>
</blockquote>
<hr>
<h2><span id="toc26">トラブルシューティング</span></h2>
<table>
<thead>
<tr>
<th>症状</th>
<th>原因</th>
<th>対処</th>
</tr>
</thead>
<tbody>
<tr>
<td>Lambda が動作しない（ログが出ない）</td>
<td>S3 トリガーが設定されていない</td>
<td>④ の手順で S3 トリガーを追加する</td>
</tr>
<tr>
<td><code>AccessDeniedException</code> for Rekognition</td>
<td>Lambda ロールに Rekognition 権限がない</td>
<td>③-1 の手順で <code>AmazonRekognitionReadOnlyAccess</code> をアタッチ</td>
</tr>
<tr>
<td><code>AccessDenied</code> for S3</td>
<td>Lambda ロールに S3 GetObject 権限がない</td>
<td>③-2 の手順でインラインポリシーを追加</td>
</tr>
<tr>
<td><code>InvalidImageFormatException</code></td>
<td>JPEG/PNG 以外のファイルをアップロードした</td>
<td>JPEG または PNG ファイルを使用する</td>
</tr>
<tr>
<td><code>ImageTooLargeException</code></td>
<td>15MB を超える画像をアップロードした</td>
<td>15MB 以下の画像を使用する</td>
</tr>
<tr>
<td>ラベルが 0 件</td>
<td><code>MinConfidence</code> が高すぎる</td>
<td>コードの <code>MinConfidence=70</code> を下げて「Deploy」する</td>
</tr>
<tr>
<td>日本語ファイル名でエラー</td>
<td>URL エンコードが解除されていない</td>
<td>コードに <code>urllib.parse.unquote_plus(key)</code> が含まれているか確認</td>
</tr>
<tr>
<td>Lambda がタイムアウトする</td>
<td>タイムアウトが短い（デフォルト3秒）</td>
<td>② の手順でタイムアウトを 30 秒に変更する</td>
</tr>
</tbody>
</table>
<hr>
<h2><span id="toc27">まとめ</span></h2>
<p>今回のハンズオンで体験できたこと：</p>
<table>
<thead>
<tr>
<th>確認項目</th>
<th>内容</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>S3 トリガー</strong></td>
<td>画像アップロードと同時に Lambda が自動起動する仕組みを体験</td>
</tr>
<tr>
<td><strong>Rekognition DetectLabels</strong></td>
<td>画像に写った物体・動物・シーンが自動でラベル付けされる様子を確認</td>
</tr>
<tr>
<td><strong>S3Object 参照</strong></td>
<td>画像をLambdaに転送せずS3の場所だけを渡す効率的な連携方法</td>
</tr>
<tr>
<td><strong>IAM 権限の設定</strong></td>
<td>S3・Rekognition それぞれに必要な権限を個別に追加する手順</td>
</tr>
</tbody>
</table>
<h3><span id="toc28">コンソール版で実感できたポイント</span></h3>
<ul>
<li>S3 → Lambda → Rekognition という3つのサービスの<strong>データの流れ</strong>が視覚的に理解できる</li>
<li>実行ロールに必要な権限を1つずつ追加することで、IAM の仕組みが身につく</li>
<li>リソースを個別に作成・削除することで、各サービスの独立性と依存関係が明確になる</li>
</ul>
<hr>
<h2><span id="toc29">コンソール版と SAM 版を比較してみる</span></h2>
<p>コンソールで S3・Lambda・Rekognition の連携を理解したら、SAM で同じ構成をコードで定義することで「SAM が何を自動化しているか」が明確になります。<code>S3ReadPolicy</code> や <code>RekognitionDetectOnlyPolicy</code> による1行での権限付与など、コンソールでの手動操作がコードに対応しています。</p>
<p><!-- TODO: SAM版記事へのリンクを追加 --></p>
<hr>
<h2><span id="toc30">関連記事</span></h2>
<p><a rel="nofollow" href="//af.moshimo.com/af/c/click?a_id=1384942&p_id=170&pc_id=185&pl_id=4062&url=https%3A%2F%2Fwww.amazon.co.jp%2Fs%3Fk%3D%25E6%259C%25AC%2BAWS%2B%25E9%2596%258B%25E7%2599%25BA%26__mk_ja_JP%3D%25E3%2582%25AB%25E3%2582%25BF%25E3%2582%25AB%25E3%2583%258A%26crid%3D1DE63UBHFOR4K%26sprefix%3D%25E6%259C%25AC%2Baws%2B%25E9%2596%258B%25E7%2599%25BA%252Caps%252C167%26ref%3Dnb_sb_noss" referrerpolicy="no-referrer-when-downgrade" attributionsrc>Amazon検索[本 AWS 開発]</a><img decoding="async" src="//i.moshimo.com/af/i/impression?a_id=1384942&p_id=170&pc_id=185&pl_id=4062" width="1" height="1" style="border:none;" alt="" loading="lazy"></p>
<p><!-- START MoshimoAffiliateEasyLink --><script type="text/javascript">(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;b[a]=b[a]||function(){arguments.currentScript=c.currentScript||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};c.getElementById(a)||(d=c.createElement(f),d.src=g,d.id=a,e=c.getElementsByTagName("body")[0],e.appendChild(d))})(window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js?20220329","msmaflink");msmaflink({"n":"AWS運用入門 改訂第2版 押さえておきたいAWSの基本と運用ノウハウ [AWS深掘りガイド]","b":"SBクリエイティブ","t":"","d":"https:\/\/m.media-amazon.com","c_p":"\/images\/I","p":["\/51AAOubymTL._SL500_.jpg","\/51VMG6YKHdL._SL500_.jpg","\/41EdPB8azAL._SL500_.jpg","\/41v2JFE-9jL._SL500_.jpg","\/41FEEqR-yDL._SL500_.jpg","\/41JfZAdnTPL._SL500_.jpg","\/41vGK0czQrL._SL500_.jpg","\/41-SnYtz2aL._SL500_.jpg","\/41sPrV5fi3L._SL500_.jpg","\/41p7JtvYJ1L._SL500_.jpg","\/4169GVNTs8L._SL500_.jpg","\/41BPI5HP3zL._SL500_.jpg","\/41QOyk60CYL._SL500_.jpg","\/41APjk6FphL._SL500_.jpg","\/41ezKUu7VRL._SL500_.jpg","\/41A1n3K+r5L._SL500_.jpg","\/41aY2T8lEOL._SL500_.jpg","\/419Ca1V6HZL._SL500_.jpg","\/41zQkYyLPzL._SL500_.jpg","\/41YpHcyxiTL._SL500_.jpg","\/41-tKN5mt6L._SL500_.jpg","\/419Mv6m55IL._SL500_.jpg"],"u":{"u":"https:\/\/www.amazon.co.jp\/dp\/4815631085","t":"amazon","r_v":""},"v":"2.1","b_l":[{"id":1,"u_tx":"Amazonで見る","u_bc":"#f79256","u_url":"https:\/\/www.amazon.co.jp\/dp\/4815631085","a_id":1384942,"p_id":170,"pl_id":27060,"pc_id":185,"s_n":"amazon","u_so":1},{"id":2,"u_tx":"楽天市場で見る","u_bc":"#f76956","u_url":"https:\/\/search.rakuten.co.jp\/search\/mall\/AWS%E9%81%8B%E7%94%A8%E5%85%A5%E9%96%80%20%E6%94%B9%E8%A8%82%E7%AC%AC2%E7%89%88%20%E6%8A%BC%E3%81%95%E3%81%88%E3%81%A6%E3%81%8A%E3%81%8D%E3%81%9F%E3%81%84AWS%E3%81%AE%E5%9F%BA%E6%9C%AC%E3%81%A8%E9%81%8B%E7%94%A8%E3%83%8E%E3%82%A6%E3%83%8F%E3%82%A6%20%5BAWS%E6%B7%B1%E6%8E%98%E3%82%8A%E3%82%AC%E3%82%A4%E3%83%89%5D\/","a_id":1384917,"p_id":54,"pl_id":27059,"pc_id":54,"s_n":"rakuten","u_so":2},{"id":3,"u_tx":"Yahoo!ショッピングで見る","u_bc":"#66a7ff","u_url":"https:\/\/shopping.yahoo.co.jp\/search?first=1\u0026p=AWS%E9%81%8B%E7%94%A8%E5%85%A5%E9%96%80%20%E6%94%B9%E8%A8%82%E7%AC%AC2%E7%89%88%20%E6%8A%BC%E3%81%95%E3%81%88%E3%81%A6%E3%81%8A%E3%81%8D%E3%81%9F%E3%81%84AWS%E3%81%AE%E5%9F%BA%E6%9C%AC%E3%81%A8%E9%81%8B%E7%94%A8%E3%83%8E%E3%82%A6%E3%83%8F%E3%82%A6%20%5BAWS%E6%B7%B1%E6%8E%98%E3%82%8A%E3%82%AC%E3%82%A4%E3%83%89%5D","a_id":1466950,"p_id":1225,"pl_id":27061,"pc_id":1925,"s_n":"yahoo","u_so":3}],"eid":"E8MM1","s":"s"});</script></p>
<div id="msmaflink-E8MM1">リンク</div>
<p><!-- MoshimoAffiliateEasyLink END --></p><p>The post <a href="https://caymezon.com/aws-handson-console-rekognition-image-pipeline/">AWSコンソールだけで画像認識パイプラインを構築する手順【S3 + Lambda + Rekognition / SAM版との比較付き】</a> first appeared on <a href="https://caymezon.com">CayTech Lab</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://caymezon.com/aws-handson-console-rekognition-image-pipeline/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
