<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Amazon on ゲンゾウ用ポストイット</title><link>https://genzouw.com/entry/category/amazon/</link><description>Recent content in Amazon on ゲンゾウ用ポストイット</description><generator>Hugo</generator><language>ja</language><lastBuildDate>Sun, 16 Apr 2023 07:23:20 +0900</lastBuildDate><atom:link href="https://genzouw.com/entry/category/amazon/index.xml" rel="self" type="application/rss+xml"/><item><title>AWS CodeWhispererを使うためにセットアップを進めたがVimから利用できないことがわかり諦める</title><link>https://genzouw.com/entry/2023/04/16/072320/3477/</link><pubDate>Sun, 16 Apr 2023 07:23:20 +0900</pubDate><guid>https://genzouw.com/entry/2023/04/16/072320/3477/</guid><description>&lt;h2 id="はじめに"&gt;はじめに&lt;/h2&gt;&#10;&lt;p&gt;きっかけは以下の記事を見たことです。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;[AWS 版 GitHub Copilot となる「Amazon CodeWhisperer」が正式版に。&#10;個人ユーザーは無料、VSCode に対応 － Publickey] ( &lt;a href="https://www.publickey1.jp/blog/23/awsgithub_copilotamazon_codewhisperervscode.html"&gt;https://www.publickey1.jp/blog/23/awsgithub_copilotamazon_codewhisperervscode.html&lt;/a&gt; )&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;正式版となった上に、個人ユーザーは無料。&#10;OpenAI 様にはそこそこのお金を払っているわけですが、無料のものが利用できるとなれば乗っかりたいところです。&#10;またビジネス版でも $19 とまあまあ許容範囲かと思いました。&#10;Github Copilot との違いも把握しておきたいです。&lt;/p&gt;&#10;&lt;p&gt;となれば早速使ってみなければ。&lt;/p&gt;&#10;&lt;h2 id="作業の流れ--作業ログ-"&gt;作業の流れ ( 作業ログ )&lt;/h2&gt;&#10;&lt;p&gt;いつものように AWS Console にログインし、上部の検索エリアから検索してみました。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;whisper&lt;/strong&gt; と入力しようとしたらすでに候補が上がってきました。&#10;見つかったページをクリックしました。&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://docs.google.com/uc?id=15EztqI9_DRQcmpumJNxXgf8AYQ6qrw-v" alt=""&gt;&lt;/p&gt;&#10;&lt;p&gt;メニューをクリックすると以下のようなページが表示されました。&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://docs.google.com/uc?id=1nKfubSRazSX8j7ppPp5f6t5in-UIjLdP" alt=""&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Get started&lt;/strong&gt; をクリック。&lt;/p&gt;&#10;&lt;p&gt;残念。&#10;利用のためには事前準備が必要とのこと。&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://docs.google.com/uc?id=1lAIap2CRKM97sqXzHKBEOR9tACsCvG-u" alt=""&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;IAM Identity Center&lt;/strong&gt; が有効になっていないので、事前に有効にしなければなりません。&lt;/p&gt;&#10;&lt;h3 id="iam-identity-center-有効化"&gt;IAM Identity Center 有効化&lt;/h3&gt;&#10;&lt;p&gt;以下のページを参考に、 &lt;strong&gt;IAM Identity Center&lt;/strong&gt; を有効にします。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/ja_jp/singlesignon/latest/userguide/getting-started.html"&gt;はじめに - AWS IAM Identity Center ( successor to AWS Single Sign-On )&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Active Directory のような LDAP データベースとつないで ID 管理を容易にするサービスのようです。&#10;自分個人で利用するので当然そんな DB は持ち合わせていませんが、必要だということなので有効化しておきましょう。&lt;/p&gt;</description></item><item><title>「Amazon Cognito」で提供するログインページを自作してみる（`aws-cli`で構築）</title><link>https://genzouw.com/entry/2019/06/06/234117/1594/</link><pubDate>Thu, 06 Jun 2019 23:41:17 +0900</pubDate><guid>https://genzouw.com/entry/2019/06/06/234117/1594/</guid><description>&lt;h2 id="はじめに"&gt;はじめに&lt;/h2&gt;&#10;&lt;p&gt;「Amazon Cognito」を使って既存のWebサービスのログイン認証機能を一部置き直す方法について、何パターンか検討してみました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://genzouw.com/entry/2019/04/21/085627"&gt;「Amazon Cognito」を使ってログイン機能を作成する（SNS認証あり） | ゲンゾウ用ポストイット&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://genzouw.com/entry/2019/05/22/163232"&gt;既存のWebアプリで「Amazon Cognito」認証を利用する（その１:処理フローの整理） | ゲンゾウ用ポストイット&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://genzouw.com/entry/2019/05/24/012926"&gt;既存のWebアプリで「Amazon Cognito」認証を利用する（その２:PHPのサンプルプログラムの実装） | ゲンゾウ用ポストイット&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;今まで検討してみた方法ですが、いずれも「Amazon Cognito」が提供するログインページをそのまま利用する、というものでした。&lt;/p&gt;&#10;&lt;p&gt;どうしてもログインページを既存のWebシステムのデザインに合わせたい、という場合にはログインページも既存のWebページのものを使う方法もあります。&#10;既存のWebページのものを流用する方法についてまとめてみました。&lt;/p&gt;&#10;&lt;h2 id="準備"&gt;準備&lt;/h2&gt;&#10;&lt;p&gt;今回はなるべくAWSの「マネージメントコンソール」からの操作を行わずに「Cognito」を使ったログイン機能を実装してみます。&lt;/p&gt;&#10;&lt;p&gt;そのため、以下のコマンドを利用することを前提としています。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; &lt;a href="https://github.com/aws/aws-cli"&gt;aws&lt;/a&gt; コマンド&lt;/li&gt;&#10;&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; &lt;a href="https://stedolan.github.io/jq/"&gt;jq&lt;/a&gt; コマンド&lt;/li&gt;&#10;&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; &lt;a href="https://www.npmjs.com/"&gt;npm&lt;/a&gt; コマンド&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="検証環境"&gt;検証環境&lt;/h2&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;span class="lnt"&gt;3&#10;&lt;/span&gt;&lt;span class="lnt"&gt;4&#10;&lt;/span&gt;&lt;span class="lnt"&gt;5&#10;&lt;/span&gt;&lt;span class="lnt"&gt;6&#10;&lt;/span&gt;&lt;span class="lnt"&gt;7&#10;&lt;/span&gt;&lt;span class="lnt"&gt;8&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ aws --version&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws-cli/1.16.170 Python/3.7.3 Darwin/18.6.0 botocore/1.12.160&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ jq --version&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;jq-1.6&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ npm --version&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;6.9.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h2 id="作業開始"&gt;作業開始&lt;/h2&gt;&#10;&lt;p&gt;今回作成したプログラムは以下のGithubリポジトリにコミット済みです。&#10;試行錯誤した結果作成されたプログラムを負いながら手順を説明します。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/genzouw/aws-cognito-example-custom-page"&gt;GitHub - genzouw/aws-cognito-example-custom-page&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;圧縮されたソースファイルをダウンロードするか、 &lt;code&gt;git&lt;/code&gt; コマンドで &lt;code&gt;clone&lt;/code&gt; しておいてください。&#10;（Githubリポジトリページのソースコードを見ても良いです。）&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ git clone git@github.com:genzouw/aws-cognito-example-custom-page.git&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;※(2019-06-06) 便宜上、当エントリにGithubリポジトリ上のコードと同じ内容を貼り付けておきますが、メンテナンスはGithubリポジトリの方だけとする予定です。乖離する可能性があることをご了承ください。&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>既存のWebアプリで「Amazon Cognito」認証を利用する（その２:PHPのサンプルプログラムの実装）</title><link>https://genzouw.com/entry/2019/05/24/012926/1532/</link><pubDate>Fri, 24 May 2019 01:29:26 +0900</pubDate><guid>https://genzouw.com/entry/2019/05/24/012926/1532/</guid><description>&lt;h2 id="はじめに"&gt;はじめに&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://genzouw.com/entry/2019/05/22/163232"&gt;既存の Web アプリで「Amazon Cognito」認証を利用する（その１:処理フローの整理） | ゲンゾウ用ポストイット&lt;/a&gt; で「Cognito」の認証の流れを整理しました。&lt;/p&gt;&#10;&lt;p&gt;ここからは、PHP のサンプルプログラムを実装してより具体的に理解を深めていきたいと思います。&lt;/p&gt;&#10;&lt;p&gt;早速進めて行こうと思います。&lt;/p&gt;&#10;&lt;p&gt;ちなみに、 PHPのサンプルプログラムはGithubで公開しているので、参考にしていただければと思います。&lt;/p&gt;&#10;&lt;p&gt;( &lt;em&gt;実行するだけであれば、 &lt;strong&gt;「Docker Compose」&lt;/strong&gt; がインストールされていれば動きます。&lt;/em&gt; )&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/genzouw/aws-cognito-example"&gt;GitHub - genzouw/aws-cognito-example&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="aws-cognito-の作成設定"&gt;AWS Cognito の作成、設定&lt;/h2&gt;&#10;&lt;p&gt;まずは &lt;strong&gt;AWS&lt;/strong&gt; 側の設定を行っていきたいと思います。&lt;/p&gt;&#10;&lt;h3 id="1-cognitoのユーザープールの作成"&gt;1. 「Cognito」のユーザープールの作成&lt;/h3&gt;&#10;&lt;p&gt;初めて &lt;strong&gt;Cognito&lt;/strong&gt; にアクセスした場合、以下のようなページが表示されるはずです。&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://docs.google.com/uc?id=1Uk0iZi5oqj7BNogwtBN256DWOitzcFDr" alt=""&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;ユーザープールの管理&lt;/strong&gt; を選択して先に進みます。&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://docs.google.com/uc?id=1G1Yp-Yf2Bxb8HT5mI6Le-p5uUFqoTWBN" alt=""&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;ユーザープールを作成する&lt;/strong&gt; をクリックします。&lt;/p&gt;&#10;&lt;p&gt;作成するユーザープール名を入力し、次に進みます。&lt;/p&gt;&#10;&lt;p&gt;ここでは &lt;code&gt;g-user-pool&lt;/code&gt; というユーザープール名にしました。&lt;/p&gt;&#10;&lt;p&gt;後は次へ次へと進むだけです。&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://docs.google.com/uc?id=17sDPr_g6SebBCKuNoDTMimLNMx6wNTQR" alt=""&gt;&lt;/p&gt;&#10;&lt;h3 id="2cognitoに新しいアプリクライアントの登録"&gt;2.「Cognito」に新しい「アプリクライアント」の登録&lt;/h3&gt;&#10;&lt;p&gt;「Cognito」のユーザープール設定ページから &lt;strong&gt;アプリクライアントの追加&lt;/strong&gt; をクリックします。&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://docs.google.com/uc?id=157Kc7VEShH-rmvQdFKYF04knfY9mi-Y8" alt=""&gt;&lt;/p&gt;&#10;&lt;p&gt;以下のように設定します。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;アプリクライアント名 : &lt;code&gt;aws-cognito-example&lt;/code&gt; ( ※こちらは好きな名前をつけましょう )&lt;/li&gt;&#10;&lt;li&gt;トークンの有効期限を更新 (日) : &lt;code&gt;1&lt;/code&gt; ( 特にこだわりは有りませんでした。デフォルトの30日のままでも構いません。 )&lt;/li&gt;&#10;&lt;li&gt;クライアントシークレットを生成 : &lt;code&gt;チェックを外す&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;img src="https://docs.google.com/uc?id=1Kd0EKVhO9VjjSVb0fwuLkrkC7etM3On9" alt=""&gt;&lt;/p&gt;&#10;&lt;h3 id="3アプリクライアントの設定"&gt;3.「アプリクライアントの設定」&lt;/h3&gt;&#10;&lt;p&gt;今度は左のタブから「アプリクライアントの設定」を開きます。&#10;以下のように設定します。&lt;/p&gt;</description></item><item><title>既存のWebアプリで「Amazon Cognito」認証を利用する（その１:処理フローの整理）</title><link>https://genzouw.com/entry/2019/05/22/163232/1515/</link><pubDate>Wed, 22 May 2019 16:32:32 +0900</pubDate><guid>https://genzouw.com/entry/2019/05/22/163232/1515/</guid><description>&lt;h2 id="はじめに"&gt;はじめに&lt;/h2&gt;&#10;&lt;p&gt;以前、 &lt;a href="https://genzouw.com/entry/2019/04/21/085627"&gt;「Amazon Cognito」を使ってログイン機能を作成する（SNS 認証あり） | ゲンゾウ用ポストイット&lt;/a&gt; で「Amazon Cognito」のユーザ認証機能を利用してログインページを構築しました。&lt;/p&gt;&#10;&lt;p&gt;しかし、やりたかったことは既存の Web アプリケーションのログイン機能を「Cognito」を利用した仕組みに置き直すということだったため、完全ではありませんでした。&lt;/p&gt;&#10;&lt;p&gt;「Cognito」のユーザ認証が完了した後、既存のアプリケーションでそれを引き継ぐための仕組みを構築すべく、追加で調査をしました。&#10;（今回は整理にとどめて次回のエントリでサンプルコードの実装・公開をしたいと思います。）&lt;/p&gt;&#10;&lt;h2 id="改めて-oauth2-または-openid-connect-の処理フローについて"&gt;改めて OAuth2 または OpenID Connect の処理フローについて&lt;/h2&gt;&#10;&lt;p&gt;「Congito」を使ったユーザ認証は「OpenID Connect」という方式になります。「OAuth2」方式をベースとした後発の認証方式です。したがって「OAuth2」の理解を深めることが「OpenID Connect」の理解を深めることにつながると思いました。&lt;/p&gt;&#10;&lt;p&gt;僕が説明するより以下の記事を読むほうが圧倒的にわかりやすいです。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://qiita.com/TakahikoKawasaki/items/e37caf50776e00e733be"&gt;一番分かりやすい OAuth の説明 - Qiita&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://qiita.com/TakahikoKawasaki/items/498ca08bbfcc341691fe"&gt;一番分かりやすい OpenID Connect の説明 - Qiita&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;とはいえ、自分の頭の中を整理するため、自分なりにまとめてみます。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;めっちゃ汚い&lt;/strong&gt;ですが、手書きの処理フローになります。（一部字が潰れたり上塗りされていたりしていますが（汗））&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://docs.google.com/uc?id=1k54a3o3cKfS9xG2xCHDKZHO-NZZRPBoM" alt=""&gt;&lt;/p&gt;&#10;&lt;h3 id="処理フローを箇条書きで文字起こし"&gt;処理フローを箇条書きで文字起こし&lt;/h3&gt;&#10;&lt;p&gt;登場人物は 3 つ、 &amp;ldquo;Browser&amp;rdquo; / &amp;ldquo;AppServer&amp;rdquo; / &lt;strong&gt;&amp;ldquo;Cognito&amp;rdquo;&lt;/strong&gt; です。（&amp;ldquo;Browser&amp;quot;は人の形で表現しています。）&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&amp;ldquo;Browser&amp;rdquo; は &amp;ldquo;AppServer&amp;rdquo; にアクセス&lt;/li&gt;&#10;&lt;li&gt;&amp;ldquo;AppServer&amp;rdquo; はログイン済みかを判定します。未ログイン状態の場合には &lt;strong&gt;&amp;ldquo;Cognito&amp;rdquo;&lt;/strong&gt; に &amp;ldquo;redirect&amp;rdquo;（&amp;ldquo;redirect&amp;quot;の URL に対して事前に「Cognito」から払い出された「アプリケーション ID」などを付与）&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&amp;ldquo;Cognito&amp;rdquo;&lt;/strong&gt; は &amp;ldquo;login page&amp;rdquo; を返却&lt;/li&gt;&#10;&lt;li&gt;&amp;ldquo;Browser&amp;rdquo; は &amp;ldquo;login&amp;rdquo; を行う&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&amp;ldquo;Cognito&amp;rdquo;&lt;/strong&gt; は受け取った認証情報が正しければ &amp;ldquo;redirect&amp;rdquo; 。 &amp;ldquo;redirect&amp;rdquo; の URL の後方にはクエリ文字列形式で &lt;strong&gt;Authentication code&lt;/strong&gt; と呼ばれるものを付与 （ex: &lt;code&gt;https://hoge.com/callback.html&amp;amp;code=xxxx&lt;/code&gt; ）&lt;/li&gt;&#10;&lt;li&gt;&amp;ldquo;AppServer&amp;rdquo; は受け取った &lt;strong&gt;Authentication code&lt;/strong&gt; を使って &lt;strong&gt;Cognito&lt;/strong&gt; にリクエスト&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;ID Token&lt;/strong&gt; を取得&lt;/li&gt;&#10;&lt;li&gt;JavaScript では、ページの URL からフラグメントを切り出し、(5)で受け取った &lt;strong&gt;ID Token&lt;/strong&gt; を抜き出すロジックが書かれている。&lt;/li&gt;&#10;&lt;li&gt;&amp;ldquo;AppServer&amp;rdquo; は HTML/JavaScript/ &lt;strong&gt;ID Token&lt;/strong&gt; を返却。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;取得できた &lt;strong&gt;「ID Token」&lt;/strong&gt; ですが、「SPA」の場合は &amp;ldquo;Broser&amp;rdquo; の &lt;strong&gt;「LocalStorage」&lt;/strong&gt; 機能を使って保存しておき、以降の通信時に「HTTP Header」に付与して &amp;ldquo;AppServer&amp;rdquo; と通信を行うことで認証済みであることを証明します。&lt;/p&gt;</description></item><item><title>Amazon DynamoDBの構成要素について理解できたことをまとめました</title><link>https://genzouw.com/entry/2019/04/27/231011/1411/</link><pubDate>Sat, 27 Apr 2019 23:10:11 +0900</pubDate><guid>https://genzouw.com/entry/2019/04/27/231011/1411/</guid><description>&lt;h2 id="はじめに"&gt;はじめに&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://genzouw.com/entry/2019/04/27/001837"&gt;AWS-CLIを使ってDynamoDBを操作してみる&lt;/a&gt; で「AWS CLI」から「DynamoDB」を操作してみました。&lt;/p&gt;&#10;&lt;p&gt;ただし、しっかり「DynamoDB」の仕組みについて理解できていなかったので、改めてドキュメントを読み進めて理解できたことを整理したいと思います。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;※誤りが多分にあるかと思いますので指摘を喜んでお待ちしております。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;ちなみに、プライマリーキーについて更に整理した内容は以下のエントリにまとめています。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://genzouw.com/entry/2019/04/28/103524"&gt;Amazon DynamoDBのプライマリーキーの２つのタイプについて理解できたことをまとめました | ゲンゾウ用ポストイット&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="参考資料"&gt;参考資料&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html"&gt;DynamoDB コアコンポーネント - Amazon DynamoDB&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="dynamodbの構成要素"&gt;DynamoDBの構成要素&lt;/h2&gt;&#10;&lt;p&gt;DynamoDBの構成要素は多くの点でリレーショナルデータベース（以下RDB）によく似ています。&#10;RDBを理解していれば理解しやすいと思います。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;概念&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;説明&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;テーブル&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;RDBでいうテーブル。「項目」の集合。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;項目&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;RDBでいうレコード（行）。「属性」の集合。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;属性&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;RDSでいうカラム（列）。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;プライマリーキー&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;RDSでいうプライマリーキー。1つあるいは2つの属性の組み合わせでテーブルの全「項目」で一意でなければならない。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;&lt;img src="https://docs.google.com/uc?id=1TRN33RU-a4K9clRU41uzZGPdlnjj5WB3" alt=""&gt;&lt;/p&gt;&#10;&lt;p&gt;AWSのマニュアルでは、具体例として &lt;code&gt;People&lt;/code&gt; というテーブルとそのデータ構造について触れています。&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://docs.google.com/uc?id=1qecZbi88gjm-cxw9BR0xnKTNoFThZ4SX" alt=""&gt;&lt;/p&gt;&#10;&lt;p&gt;先に触れた構成要素と上記のサンプルデータの対応は以下のようになります。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;概念&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;説明&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;テーブル&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;People&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;項目&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3項目。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;属性&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;PersonId, LastName, FirstName, Phone(1項目目のみ), Address(2項目目のみ), FavoriteColor(3項目目のみ)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;プライマリーキー&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;PersonId だけで構成される単一プライマリーキー&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h2 id="プライマリーキーの属性の特徴制約"&gt;プライマリーキーの「属性」の特徴・制約&lt;/h2&gt;&#10;&lt;h3 id="プライマリーキーは1つ以上の属性で構成しなければならない"&gt;プライマリーキーは1つ以上の「属性」で構成しなければならない&lt;/h3&gt;&#10;&lt;p&gt;先に触れたとおり、プライマリーキーは単一の属性だけで構築しても良いですし、複数の属性で構成することもできます。&lt;/p&gt;&#10;&lt;p&gt;具体的な例を上げると、以下のようになります。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;単一「属性」で構成されるプライマリーキー : 銀行テーブルに対する&lt;strong&gt;銀行コード&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;複数「属性」で構成されるプライマリーキー : 銀行支店テーブルに対する&lt;strong&gt;銀行コード+支店コード&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;「テーブル」にはプライマリーキーは必須となりますので、当然「テーブル」内の「項目」は最低でも1つの「属性」を持つことになります。&lt;/p&gt;&#10;&lt;h3 id="プライマリーキーは一意な値でなければならない"&gt;プライマリーキーは一意な値でなければならない&lt;/h3&gt;&#10;&lt;p&gt;DynamoDBのプライマリーキー属性値は重複を許しません。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;銀行テーブルには&lt;strong&gt;銀行コード&lt;/strong&gt;の重複はありえません&lt;/li&gt;&#10;&lt;li&gt;銀行支店テーブルには&lt;strong&gt;銀行コード+支店コード&lt;/strong&gt;の重複はありえません&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;img src="https://docs.google.com/uc?id=1yOafa096UFAn9s0lO_lYkjnGgzSd7qry" alt=""&gt;&lt;/p&gt;&#10;&lt;h3 id="プライマリーキーはスカラー値でなければならない"&gt;プライマリーキーはスカラー値でなければならない&lt;/h3&gt;&#10;&lt;p&gt;プライマリーキーはスカラー値でなければいけません。&#10;以下のいずれかでなければなりません。&lt;/p&gt;</description></item><item><title>AWS-CLIを使ってDynamoDBを操作してみる</title><link>https://genzouw.com/entry/2019/04/27/001837/1406/</link><pubDate>Sat, 27 Apr 2019 00:18:37 +0900</pubDate><guid>https://genzouw.com/entry/2019/04/27/001837/1406/</guid><description>&lt;p&gt;LambdaからDynamoDBを操作する必要があったのだけれども、&#10;DynamoDBにあまり触れる機会もなく今まで来ました。&lt;/p&gt;&#10;&lt;p&gt;コマンドラインからテーブルの作成やデータ投入を行ってみることにしました。&lt;/p&gt;&#10;&lt;p&gt;操作するためのツールとして &lt;a href="https://aws.amazon.com/jp/cli/"&gt;AWS CLI&lt;/a&gt; を使ってみます。&lt;/p&gt;&#10;&lt;p&gt;ちなみに、DynamoDBの構成要素や概念を整理した内容は以下のエントリにまとめました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://genzouw.com/entry/2019/04/27/231011"&gt;Amazon DynamoDBの構成要素について理解できたことをまとめました | ゲンゾウ用ポストイット&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="検証環境"&gt;検証環境&lt;/h2&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;span class="lnt"&gt;3&#10;&lt;/span&gt;&lt;span class="lnt"&gt;4&#10;&lt;/span&gt;&lt;span class="lnt"&gt;5&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ uname -moi&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;x86_64 MacBookPro10,1 Darwin&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ aws --version&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws-cli/1.16.140 Python/3.7.3 Darwin/18.5.0 botocore/1.12.130&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h2 id="dynamodbの概念コンセプトを整理してみる"&gt;DynamoDBの概念・コンセプトを整理してみる&lt;/h2&gt;&#10;&lt;h3 id="amazon-dynamodbの構成要素コンセプト"&gt;Amazon DynamoDBの構成要素・コンセプト&lt;/h3&gt;&#10;&lt;p&gt;「Amazon DynamoDB」を構成する要素については、別のエントリで整理しておきました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://genzouw.com/entry/2019/04/27/231011"&gt;Amazon DynamoDBの構成要素について理解できたことをまとめました | ゲンゾウ用ポストイット&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;上記エントリでまとめましたが、抑えておく用語は以下の４つです。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;テーブル&lt;/li&gt;&#10;&lt;li&gt;項目&lt;/li&gt;&#10;&lt;li&gt;属性&lt;/li&gt;&#10;&lt;li&gt;プライマリーキー&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="コンセプト"&gt;コンセプト&lt;/h3&gt;&#10;&lt;p&gt;DynamoDBではデータを抽出する方法は大きく２つとなります。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;プライマリーキー&lt;/strong&gt; で検索し項目を受け取る&lt;/li&gt;&#10;&lt;li&gt;全項目を受け取りプログラムで絞り込む&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;データ量が増えた場合は &lt;strong&gt;(2)&lt;/strong&gt; の方法は現実的ではなくなるため、 &lt;strong&gt;(1)&lt;/strong&gt; でデータを取得できるように設計する必要があります。&lt;/p&gt;&#10;&lt;h2 id="検証用のテーブル定義"&gt;検証用のテーブル定義&lt;/h2&gt;&#10;&lt;p&gt;上記の概念やコンセプトを理解した上で、今回検証用に作成したいテーブルの定義を整理しておきます。&lt;/p&gt;&#10;&lt;h3 id="検証用のtable名"&gt;検証用のtable名&lt;/h3&gt;&#10;&lt;p&gt;ユーザ情報を管理する &lt;code&gt;users&lt;/code&gt; というtableを作成します。&lt;/p&gt;&#10;&lt;h3 id="検証用の属性名"&gt;検証用の属性名&lt;/h3&gt;&#10;&lt;p&gt;&lt;code&gt;users&lt;/code&gt; テーブルは以下のような属性（RDSでいうところの列情報）を保持します。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Name&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Type&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;プライマリーキー?&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;email&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;String&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Y&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;first_name&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;String&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;last_name&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;String&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;age&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Number&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;「属性」には型を設定する必要があります。&#10;連想配列や配列などを指定できますが、最もよく利用するのは「文字列」と「数値」となるでしょう。&lt;/p&gt;</description></item><item><title>「Amazon Cognito」を使ってログイン機能を作成する（SNS認証あり）</title><link>https://genzouw.com/entry/2019/04/21/085627/1386/</link><pubDate>Sun, 21 Apr 2019 08:56:27 +0900</pubDate><guid>https://genzouw.com/entry/2019/04/21/085627/1386/</guid><description>&lt;h2 id="はじめに"&gt;はじめに&lt;/h2&gt;&#10;&lt;p&gt;ログイン認証機能を実装するための方法をいくつか調査中。&lt;/p&gt;&#10;&lt;p&gt;候補として上がっているのは大きく２つ。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;&amp;ldquo;Amazon Cognito&amp;rdquo;&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&amp;ldquo;Firebase&amp;rdquo;&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;まずは &lt;strong&gt;Cognito&lt;/strong&gt; の調査からすることにしました。&lt;/p&gt;&#10;&lt;p&gt;マニュアルを読みながら設定を進めて見ましたが、文章が多く初見殺しのイメージがあったので、設定時のスクリーンショットを残しておきました。&#10;そちらを共有したいと思います。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Cognito&lt;/strong&gt; の設定で躓いた方の参考になれば幸いです。&lt;/p&gt;&#10;&lt;h2 id="準備"&gt;準備&lt;/h2&gt;&#10;&lt;p&gt;僕はさっと AWS のマニュアルを読みました。&#10;実際に行った作業も以下のマニュアルを元に進めました。&lt;/p&gt;&#10;&lt;p&gt;( 書かれている内容通りに進められる方は当エントリを参考にする必要はないかと思います。 )&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/cognito-getting-started.html"&gt;Amazon Cognito の使用開始 - Amazon Cognito&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="cognito-アーキテクチャ"&gt;Cognito アーキテクチャ&lt;/h3&gt;&#10;&lt;p&gt;概念として認証・認可情報を管理する &lt;strong&gt;&amp;ldquo;ユーザープール&amp;rdquo;&lt;/strong&gt; と &lt;strong&gt;&amp;ldquo;ID プール&amp;rdquo;&lt;/strong&gt; というものを理解する必要があります。&lt;/p&gt;&#10;&lt;p&gt;いずれの概念もまだ掴みきれていないのですが、 マニュアルを読みつつ、触りつつ理解していこうと思います。&#10;今回触るのは &lt;strong&gt;&amp;ldquo;ユーザープール&amp;rdquo;&lt;/strong&gt; のみになります。&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/images/scenario-cup-cib2.png" alt=""&gt;&lt;/p&gt;&#10;&lt;h2 id="設定方法"&gt;設定方法&lt;/h2&gt;&#10;&lt;p&gt;早速設定を進めていきましょう。&lt;/p&gt;&#10;&lt;p&gt;先にも述べたとおり、 &lt;strong&gt;AWS&lt;/strong&gt; が提供してくれているマニュアル通りに進めていきます。&lt;/p&gt;&#10;&lt;h3 id="ステップ-1ユーザープールを使用してユーザーディレクトリを作成する"&gt;ステップ 1.ユーザープールを使用してユーザーディレクトリを作成する&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html"&gt;ステップ 1.ユーザープールを使用してユーザーディレクトリを作成する - Amazon Cognito&lt;/a&gt; を参考に作業を進めます。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h4 id="amazon-cognito-コンソール-を開きます"&gt;&lt;a href="https://console.aws.amazon.com/cognito/home"&gt;Amazon Cognito コンソール&lt;/a&gt; を開きます。&lt;/h4&gt;&#10;&lt;p&gt;[ユーザープールの管理] を選択します。&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://docs.google.com/uc?id=1yRJq1smof-dvIq_h383e68xRNEQe4HeF" alt=""&gt;&lt;/p&gt;&#10;&lt;h4 id="ページの右上にある-ユーザープールを作成する-を選択します"&gt;ページの右上にある [ユーザープールを作成する] を選択します。&lt;/h4&gt;&#10;&lt;p&gt;&lt;img src="https://docs.google.com/uc?id=1ijIP2QKpgqAw6SRtK1P2pkcFJ9Xdg6pc" alt=""&gt;&lt;/p&gt;&#10;&lt;h4 id="ユーザープールの名前を入力しデフォルトを確認する-を選択して名前を保存します"&gt;ユーザープールの名前を入力し、[デフォルトを確認する] を選択して、名前を保存します。&lt;/h4&gt;&#10;&lt;p&gt;&lt;img src="https://docs.google.com/uc?id=11nz2WuEjZQ5d3QMD7WpohLNXzKiYi6Df" alt=""&gt;&lt;/p&gt;&#10;&lt;h4 id="属性-ページでe-メールアドレスおよび電話番号-および-e-メールアドレスを許可-を選択します"&gt;[属性] ページで、[E メールアドレスおよび電話番号] および [E メールアドレスを許可] を選択します。&lt;/h4&gt;&#10;&lt;p&gt;設定ができたら、ページの下部にある [次のステップ] を選択して属性を保存します。&lt;/p&gt;</description></item><item><title>S3にファイルが作成されたことを検知してLambda関数でファイルを読み込む( `aws-cli` で構築)</title><link>https://genzouw.com/entry/2019/03/23/092512/1224/</link><pubDate>Sat, 23 Mar 2019 09:25:12 +0900</pubDate><guid>https://genzouw.com/entry/2019/03/23/092512/1224/</guid><description>&lt;h2 id="はじめに"&gt;はじめに&lt;/h2&gt;&#10;&lt;p&gt;「&lt;a href="https://genzouw.com/entry/2019/02/28/082940"&gt;S3にファイルがSFTPアップロードされたことを検知してLambdaを起動する（ &lt;code&gt;aws-cli&lt;/code&gt; で構築）&lt;/a&gt;」で、S3にファイルがアップロードされたことをフック条件にしてLambdaファンクションを実行させてみました。&lt;/p&gt;&#10;&lt;p&gt;ただ、上記のエントリではLambdaファンクションがCloudWatchLogにログを出力させるまでの実装にとどまっていました。&#10;フック条件となったS3のファイルを読み込むロジックは作成していません。&lt;/p&gt;&#10;&lt;p&gt;そこで、今回はフック条件となったS3内のファイル読み込みを試してみました。&lt;/p&gt;&#10;&lt;h2 id="ゴールとする構成"&gt;ゴールとする構成&lt;/h2&gt;&#10;&lt;p&gt;&lt;img src="https://docs.google.com/uc?id=13TTO-65zShudTTkcTl3s_zE99L26a7vM" alt=""&gt;&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;ファイルがアップロードされる&lt;/li&gt;&#10;&lt;li&gt;アップロードを検知してLambdaファンクションを呼び出し&lt;/li&gt;&#10;&lt;li&gt;S3のファイルを読み込む&lt;/li&gt;&#10;&lt;li&gt;CloudWatchLogにログ出力&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="必要なもの"&gt;必要なもの&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; &lt;a href="https://github.com/aws/aws-cli"&gt;aws&lt;/a&gt; コマンドが使えること&lt;/li&gt;&#10;&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; &lt;a href="https://stedolan.github.io/jq/"&gt;jq&lt;/a&gt; コマンドが使えること&lt;/li&gt;&#10;&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; &lt;a href="https://www.npmjs.com/"&gt;npm&lt;/a&gt; コマンドが使えること&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="検証環境"&gt;検証環境&lt;/h2&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 2&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 3&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 4&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 5&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 6&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 7&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 8&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 9&#10;&lt;/span&gt;&lt;span class="lnt"&gt;10&#10;&lt;/span&gt;&lt;span class="lnt"&gt;11&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ uname -moi&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;x86_64 MacBookPro10,1 Darwin&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ bash -version&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;GNU bash, バージョン 5.0.3&lt;span class="o"&gt;(&lt;/span&gt;1&lt;span class="o"&gt;)&lt;/span&gt;-release &lt;span class="o"&gt;(&lt;/span&gt;x86_64-apple-darwin18.2.0&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ aws --version&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws-cli/1.16.120 Python/3.7.2 Darwin/18.2.0 botocore/1.12.110&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ npm --version&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;6.7.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h2 id="作業開始"&gt;作業開始&lt;/h2&gt;&#10;&lt;p&gt;以下のエントリから今回必要な部分のみピックアップして検証していきます。&lt;/p&gt;</description></item><item><title>「Amazon API Gateway」から「Lambda」を通さずに「S3」へアクセスできるようにしてみる（ `aws-cli` で構築）</title><link>https://genzouw.com/entry/2019/03/15/165949/1189/</link><pubDate>Fri, 15 Mar 2019 16:59:49 +0900</pubDate><guid>https://genzouw.com/entry/2019/03/15/165949/1189/</guid><description>&lt;h2 id="はじめに"&gt;はじめに&lt;/h2&gt;&#10;&lt;p&gt;AWSを利用したサーバレスな事例が増えてきました。&#10;例えば以下のような構成の事例がWeb上で掲載されています。&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://docs.google.com/uc?id=1pbHEz0suFdiUpRMRYR6k-E-UcSlsfEb_" alt=""&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;「API Gateway」&lt;/strong&gt; から &lt;strong&gt;「Lambda」&lt;/strong&gt; を経由して &lt;strong&gt;「DynamoDB」あるいは「S3」&lt;/strong&gt; にアクセスする例は、様々な方がWeb上に掲載しています。&#10;&lt;strong&gt;「API Gateway」&lt;/strong&gt; から &lt;strong&gt;「S3」&lt;/strong&gt; へ直接アクセスするための例はあまり見つからず、またあったとしても &lt;strong&gt;AWS-CLI&lt;/strong&gt; を使って設定している例が見つからなかったため、整理してみました。&lt;/p&gt;&#10;&lt;p&gt;ちなみに設定した内容はAmazonが提供している以下のドキュメントを参考にしています。こちらのドキュメントは「AWS マネージメントコンソール」からポチポチ操作していく内容となっています。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/integrating-api-with-aws-services-s3.html"&gt;API Gateway で Amazon S3 プロキシとして REST API を作成する - Amazon API Gateway&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="作成するapi概要"&gt;作成する「API」概要&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;S3にアクセスできる。（今回は読み取りのみ）&lt;/li&gt;&#10;&lt;li&gt;アクセス用URLは &lt;code&gt;https://&amp;lt;host&amp;gt;/&amp;lt;S3-BUCKET-NAME&amp;gt;/&amp;lt;S3-OBJECT-KEY&amp;gt;&lt;/code&gt; の形式とする。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="準備"&gt;準備&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; &lt;code&gt;aws-cli&lt;/code&gt; コマンドが利用できる&lt;/li&gt;&#10;&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; &lt;code&gt;jq&lt;/code&gt; コマンドが利用できる&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;em&gt;&lt;code&gt;ja&lt;/code&gt; はなくてもよいのですが、今回各AWS構成要素を作成した際のJSONレスポンスをパースしてできる限りコマンドラインのみの操作としたかったので利用してみました。&lt;/em&gt;&lt;/p&gt;&#10;&lt;h2 id="検証環境"&gt;検証環境&lt;/h2&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;span class="lnt"&gt;3&#10;&lt;/span&gt;&lt;span class="lnt"&gt;4&#10;&lt;/span&gt;&lt;span class="lnt"&gt;5&#10;&lt;/span&gt;&lt;span class="lnt"&gt;6&#10;&lt;/span&gt;&lt;span class="lnt"&gt;7&#10;&lt;/span&gt;&lt;span class="lnt"&gt;8&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ bash -version&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;GNU bash, バージョン 5.0.2&lt;span class="o"&gt;(&lt;/span&gt;1&lt;span class="o"&gt;)&lt;/span&gt;-release &lt;span class="o"&gt;(&lt;/span&gt;x86_64-apple-darwin18.2.0&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ aws --version&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws-cli/1.16.120 Python/3.7.2 Darwin/18.2.0 botocore/1.12.110&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ jq --version&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;jq-1.6&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h2 id="手順"&gt;手順&lt;/h2&gt;&#10;&lt;p&gt;デプロイ直前までの流れは以下の通り。&#10;（デプロイは次回実施してみる。）&lt;/p&gt;</description></item><item><title>AWS-CLIでhelpを入力するのが煩わしい場合の対処としてスクリプトを作ってみた。</title><link>https://genzouw.com/entry/2019/03/14/124024/1182/</link><pubDate>Thu, 14 Mar 2019 12:40:24 +0900</pubDate><guid>https://genzouw.com/entry/2019/03/14/124024/1182/</guid><description>&lt;p&gt;&lt;strong&gt;AWS-CLI&lt;/strong&gt; を叩きながら &lt;strong&gt;AWS&lt;/strong&gt; の各種サービスを構築する上で必要な情報を学習中です。&lt;/p&gt;&#10;&lt;p&gt;僕は画面を見ていくよりもコマンドのヘルプを見ながら試行錯誤していくほうが理解が進めやすいようです。&lt;/p&gt;&#10;&lt;h2 id="aws-cliのヘルプを引くのが面倒"&gt;「AWS-CLI」のヘルプを引くのが面倒&lt;/h2&gt;&#10;&lt;p&gt;ただ、ヘルプを引くのが面倒なのです。&#10;具体的に言うと &lt;code&gt;help&lt;/code&gt; コマンドを入力するのが面倒。&lt;/p&gt;&#10;&lt;p&gt;例えば作業中に以下のような状況になることが多い。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 2&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 3&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 4&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 5&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 6&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 7&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 8&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 9&#10;&lt;/span&gt;&lt;span class="lnt"&gt;10&#10;&lt;/span&gt;&lt;span class="lnt"&gt;11&#10;&lt;/span&gt;&lt;span class="lnt"&gt;12&#10;&lt;/span&gt;&lt;span class="lnt"&gt;13&#10;&lt;/span&gt;&lt;span class="lnt"&gt;14&#10;&lt;/span&gt;&lt;span class="lnt"&gt;15&#10;&lt;/span&gt;&lt;span class="lnt"&gt;16&#10;&lt;/span&gt;&lt;span class="lnt"&gt;17&#10;&lt;/span&gt;&lt;span class="lnt"&gt;18&#10;&lt;/span&gt;&lt;span class="lnt"&gt;19&#10;&lt;/span&gt;&lt;span class="lnt"&gt;20&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# どんなコマンドがあったっけ？&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws --help&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# コマンド間違えた&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws &lt;span class="nb"&gt;help&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 内容を確認したので実行&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws s3&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ヘルプを見るか&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws s3 --help&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# くっ...&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws s3 &lt;span class="nb"&gt;help&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# わかった！実行する！&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws s3 mb my-butket-name&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# なんかエラー出るし！&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws s3 mb &lt;span class="nb"&gt;help&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h2 id="ちょっとした改善としてhelpを打ち込まなくてもhelpが表示されるようにしてみた"&gt;ちょっとした改善として、helpを打ち込まなくてもhelpが表示されるようにしてみた&lt;/h2&gt;&#10;&lt;p&gt;&lt;code&gt;help&lt;/code&gt; と入力する手間だけでも減らそうと思って短いスクリプトを作ってみた。&#10;&lt;code&gt;aws&lt;/code&gt; コマンドは多くのコマンドが &lt;code&gt;aws &amp;lt;サブコマンド&amp;gt; &amp;lt;オプション&amp;gt;&lt;/code&gt; といった構成となるので、2つの引数が必要になります。&#10;引数が1つ以下の場合は、自動的に &lt;code&gt;help&lt;/code&gt; というオプション付きで呼び出すようにしています。&lt;/p&gt;</description></item><item><title>goofysを使ってEC2上のLinuxにS3をマウントする</title><link>https://genzouw.com/entry/2019/03/07/080500/1091/</link><pubDate>Thu, 07 Mar 2019 08:05:00 +0900</pubDate><guid>https://genzouw.com/entry/2019/03/07/080500/1091/</guid><description>&lt;h2 id="はじめに"&gt;はじめに&lt;/h2&gt;&#10;&lt;p&gt;S3をファイルシステムとしてマウントするための方法を整理してみました。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;AWSを利用していて、S3をサーバーマウントする技術として &lt;strong&gt;s3fs&lt;/strong&gt; が有名&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;s3fs&lt;/strong&gt; は遅い&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;代替策として &lt;strong&gt;goofys&lt;/strong&gt; がある&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;goofys&lt;/strong&gt; は速い&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;goofys&lt;/strong&gt; の方が評判が良いようなのでgoofysを検証しました。&lt;/p&gt;&#10;&lt;p&gt;ちなみに &lt;strong&gt;goofys&lt;/strong&gt; のGithubページに&lt;a href="https://github.com/kahing/goofys#benchmark"&gt;ベンチマーク&lt;/a&gt;が掲載されています。&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;(引用)&#10;Using &amp;ndash;stat-cache-ttl 1s &amp;ndash;type-cache-ttl 1s for goofys -ostat_cache_expire=1 for s3fs to simulate cold runs. Detail for the benchmark can be found in bench.sh. Raw data is available as well. The test was run on an EC2 m4.16xlarge in us-west-2a connected to a bucket in us-west-2. Units are seconds.&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;&lt;img src="https://docs.google.com/uc?id=1q-8dXVRCCZ017FGoRzuGI7soy59WsmKj" alt=""&gt;&lt;/p&gt;&#10;&lt;h2 id="今回のゴール"&gt;今回のゴール&lt;/h2&gt;&#10;&lt;p&gt;起動時にS3バケットが所定のディレクトリに自動マウントされるようになるまで設定します。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;※ちなみに、Dockerが利用できる場合にはgoofysを手軽に利用できるDockerイメージを公開していますのでお使いください。&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>`aws-cli` を使ってコマンドラインからAWS EC2とVPCを構築する</title><link>https://genzouw.com/entry/2019/03/04/123533/1077/</link><pubDate>Mon, 04 Mar 2019 12:35:33 +0900</pubDate><guid>https://genzouw.com/entry/2019/03/04/123533/1077/</guid><description>&lt;h2 id="はじめに"&gt;はじめに&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;AWS Transfer for SFTP&lt;/strong&gt; の価格があまりにも高すぎたため、 &lt;strong&gt;EC2&lt;/strong&gt; 上に &lt;strong&gt;SFTP&lt;/strong&gt; サーバを構築することにしました。&lt;/p&gt;&#10;&lt;p&gt;今までは &lt;strong&gt;VPC&lt;/strong&gt; や &lt;strong&gt;インターネットゲートウェイ&lt;/strong&gt; を使わずに &lt;strong&gt;EC2&lt;/strong&gt; 作成をしていたため、これらを導入した場合の手順を整理してみました。&lt;/p&gt;&#10;&lt;h2 id="準備"&gt;準備&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; &lt;code&gt;aws-cli&lt;/code&gt; コマンドが利用できること&lt;/li&gt;&#10;&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; &lt;code&gt;jq&lt;/code&gt; コマンドが利用できること&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;em&gt;&lt;code&gt;ja&lt;/code&gt; はなくてもいいが、今回各AWS構成要素を作成した際のJSONレスポンスをパースしてできる限りコマンドラインのみの操作としたかったので利用しました。&lt;/em&gt;&lt;/p&gt;&#10;&lt;h2 id="検証環境"&gt;検証環境&lt;/h2&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;span class="lnt"&gt;3&#10;&lt;/span&gt;&lt;span class="lnt"&gt;4&#10;&lt;/span&gt;&lt;span class="lnt"&gt;5&#10;&lt;/span&gt;&lt;span class="lnt"&gt;6&#10;&lt;/span&gt;&lt;span class="lnt"&gt;7&#10;&lt;/span&gt;&lt;span class="lnt"&gt;8&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ uname -moi&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;x86_64 MacBookPro10,1 Darwin&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ bash -version&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;GNU bash, バージョン 5.0.2&lt;span class="o"&gt;(&lt;/span&gt;1&lt;span class="o"&gt;)&lt;/span&gt;-release &lt;span class="o"&gt;(&lt;/span&gt;x86_64-apple-darwin18.2.0&lt;span class="o"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ aws --version&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws-cli/1.16.110 Python/3.7.2 Darwin/18.2.0 botocore/1.12.100&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h2 id="ネットワーク周りの設定"&gt;ネットワーク周りの設定&lt;/h2&gt;&#10;&lt;h3 id="vpcの作成"&gt;VPCの作成&lt;/h3&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;span class="lnt"&gt;3&#10;&lt;/span&gt;&lt;span class="lnt"&gt;4&#10;&lt;/span&gt;&lt;span class="lnt"&gt;5&#10;&lt;/span&gt;&lt;span class="lnt"&gt;6&#10;&lt;/span&gt;&lt;span class="lnt"&gt;7&#10;&lt;/span&gt;&lt;span class="lnt"&gt;8&#10;&lt;/span&gt;&lt;span class="lnt"&gt;9&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# VPCの新規作成 =&amp;gt; 作成されたVPCのIDを保存&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ &lt;span class="nv"&gt;EC2_VPC_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; aws ec2 create-vpc &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --cidr-block &lt;span class="s1"&gt;&amp;#39;172.20.0.0/16&amp;#39;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;|&lt;/span&gt; jq -r &lt;span class="s1"&gt;&amp;#39;.Vpc.VpcId&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;## 確認&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;EC2_VPC_ID&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h3 id="subnetの作成"&gt;Subnetの作成&lt;/h3&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 2&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 3&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 4&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 5&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 6&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 7&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 8&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 9&#10;&lt;/span&gt;&lt;span class="lnt"&gt;10&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Subnetの新規作成 =&amp;gt; 作成されたSubnetのIDを保存&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ &lt;span class="nv"&gt;EC2_SUBNET_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; aws ec2 create-subnet &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --cidr-block &lt;span class="s1"&gt;&amp;#39;172.20.0.0/16&amp;#39;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --vpc-id &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;EC2_VPC_ID&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;|&lt;/span&gt; jq -r &lt;span class="s1"&gt;&amp;#39;.Subnet.SubnetId&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;## 確認&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;EC2_SUBNET_ID&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h3 id="インターネットゲートウェイの作成"&gt;インターネットゲートウェイの作成&lt;/h3&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;span class="lnt"&gt;3&#10;&lt;/span&gt;&lt;span class="lnt"&gt;4&#10;&lt;/span&gt;&lt;span class="lnt"&gt;5&#10;&lt;/span&gt;&lt;span class="lnt"&gt;6&#10;&lt;/span&gt;&lt;span class="lnt"&gt;7&#10;&lt;/span&gt;&lt;span class="lnt"&gt;8&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# インターネットゲートウェイの新規作成 =&amp;gt; 作成されたインターネットゲートウェイのIDを保存&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ &lt;span class="nv"&gt;EC2_INTERNET_GATEWAY_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; aws ec2 create-internet-gateway &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;|&lt;/span&gt; jq -r &lt;span class="s1"&gt;&amp;#39;.InternetGateway.InternetGatewayId&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;## 確認&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;EC2_INTERNET_GATEWAY_ID&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h3 id="vpcへインターネットゲートウェイを割り当てる"&gt;VPCへインターネットゲートウェイを割り当てる&lt;/h3&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;span class="lnt"&gt;3&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ aws ec2 attach-internet-gateway &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --internet-gateway-id &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;EC2_INTERNET_GATEWAY_ID&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --vpc-id &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;EC2_VPC_ID&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h3 id="ルートテーブルの設定"&gt;ルートテーブルの設定&lt;/h3&gt;&#10;&lt;p&gt;インターネットゲートウェイ経由でVPCへアクセスできるようにします。&lt;/p&gt;</description></item><item><title>S3にファイルがSFTPアップロードされたことを検知してLambdaを起動する（ `aws-cli` で構築）</title><link>https://genzouw.com/entry/2019/02/28/082940/1011/</link><pubDate>Thu, 28 Feb 2019 08:29:40 +0900</pubDate><guid>https://genzouw.com/entry/2019/02/28/082940/1011/</guid><description>&lt;p&gt;以下のような仕組みを作る必要がありました。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;ユーザにSFTPプロトコルを使って、S3にファイルをアップロードしてもらう。&lt;/li&gt;&#10;&lt;li&gt;S3にファイルがアップロードされたことを検知して、何らかの処理を行う。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;AWSのサービスを組みわせて、かつできる限り &lt;code&gt;aws-cli&lt;/code&gt; のみを使ってコマンドラインで仕組みを構築してみました。&lt;/p&gt;&#10;&lt;p&gt;今回は、 &lt;strong&gt;「何らかの処理」&lt;/strong&gt; として &lt;strong&gt;Lambdaファンクションを使ってCloudWatchLogにログを書き出させてみます&lt;/strong&gt; 。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;※注意：IAM周りの設定はかなり大雑把に設定しているので、参考する場合にはもっと考慮が必要！&lt;/strong&gt;&lt;/p&gt;&#10;&lt;h2 id="簡易構成図"&gt;簡易構成図&lt;/h2&gt;&#10;&lt;p&gt;&lt;img src="https://docs.google.com/uc?id=1MiJM_T8fe2u3IhCebS54ZuhWUjJCl3uf" alt=""&gt;&lt;/p&gt;&#10;&lt;h2 id="設定パラメータを整理"&gt;設定パラメータを整理&lt;/h2&gt;&#10;&lt;p&gt;AWSの各種サービス設定時に必要となる情報を事前にまとめておきました。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;設定項目&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;設定値&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;AWS Transfer 実行ユーザ名(SFTPログインユーザ)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;g-trigger-bucket-transfer-user&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;AWS Transfer 実行ロール名&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;g-trigger-bucket-transfer-role&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;S3 バケット名&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;g-trigger-bucket&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;S3 バケット イベント名&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;g-trigger-bucket-event&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Lambda ファンクション名&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;g-trigger-function&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Lambda 実行ロール名&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;g-trigger-function-role&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h2 id="事前準備"&gt;事前準備&lt;/h2&gt;&#10;&lt;h3 id="aws-cli-awsコマンドの利用可能な環境づくり"&gt;&lt;code&gt;aws-cli&lt;/code&gt; (AWSコマンドの利用可能な環境づくり)&lt;/h3&gt;&#10;&lt;p&gt;&lt;code&gt;aws-cli&lt;/code&gt; の利用可能環境は、以下のエントリを参考に構築済み。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://genzouw.com/entry/2019/02/23/133626"&gt;AWSコマンドを使うための環境をDockerを使って構築(Mac/Linux/WindowsでもPythonなしで動くよ) | ゲンゾウ用ポストイット&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="awsサービスの設定開始"&gt;AWSサービスの設定開始&lt;/h2&gt;&#10;&lt;h3 id="aws-s3バケットの作成"&gt;AWS S3バケットの作成&lt;/h3&gt;&#10;&lt;p&gt;S3バケットの作成やファイルのアップロードをコマンドラインから操作する方法は、 以下のエントリで整理済み。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://genzouw.com/entry/2019/02/24/100022"&gt;AWSのS3バケットの作成、削除、タグ付与、ポリシー設定をコマンドラインから実行する | ゲンゾウ用ポストイット&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;参考にしながら設定を進める。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;span class="lnt"&gt;3&#10;&lt;/span&gt;&lt;span class="lnt"&gt;4&#10;&lt;/span&gt;&lt;span class="lnt"&gt;5&#10;&lt;/span&gt;&lt;span class="lnt"&gt;6&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# バケットを作成&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ aws s3 mb s3://g-trigger-bucket&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# バケットができたかを確認&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ aws s3 ls&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2019-02-25 07:32:57 g-trigger-bucket&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h3 id="aws-lambdaファンクションの作成"&gt;AWS Lambdaファンクションの作成&lt;/h3&gt;&#10;&lt;p&gt;&lt;strong&gt;AWS Lambda&lt;/strong&gt; ファンクションの作成や呼び出しをコマンドラインから操作する方法は、 以下のエントリで整理済み。&lt;/p&gt;</description></item><item><title>AWSのLambdaファンクションの作成、実行、削除をコマンドラインから操作する</title><link>https://genzouw.com/entry/2019/02/26/075959/1004/</link><pubDate>Tue, 26 Feb 2019 07:59:59 +0900</pubDate><guid>https://genzouw.com/entry/2019/02/26/075959/1004/</guid><description>&lt;p&gt;&lt;strong&gt;S3にファイルがアップロードされたことを検知して、処理を行うような仕組みを作り必要がありました。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;処理の部分のロジックはまだ未決定事項が多いため、とりあえずは&#10;&lt;strong&gt;Lambdaファンクション呼び出しからCloudWatchLogへログを吐き出すところまでの仕組みを作成してみることにしました。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;※作成したLambdaファンクションをS3へのファイルアップロードのつなぎこみは次回調査&lt;/em&gt;&lt;/p&gt;&#10;&lt;h2 id="aws-cli-awsコマンドの利用可能な環境づくり"&gt;&lt;code&gt;aws-cli&lt;/code&gt; (AWSコマンドの利用可能な環境づくり)&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://genzouw.com/entry/2019/02/23/133626"&gt;AWSコマンドを使うための環境をDockerを使って構築(Mac/Linux/WindowsでもPythonなしで動くよ) | ゲンゾウ用ポストイット&lt;/a&gt; で環境構築済み。&lt;/p&gt;&#10;&lt;h2 id="aws-lambdaファンクションの作成"&gt;AWS Lambdaファンクションの作成&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;AWS Lambda&lt;/strong&gt; については以下の記事がわかりやすかった。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://codezine.jp/article/detail/8446"&gt;初めてのAWS Lambda　～AWS Lambdaで始めるイベントドリブンアプリケーション (1/5)：CodeZine（コードジン）&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Lambda作成にあたってやらないといけないことは以下の2つ。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Lambdaファンクションの実行ロールを作成する&lt;/li&gt;&#10;&lt;li&gt;Lambdaファンクションを作成する&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="実行ロールの作成"&gt;実行ロールの作成&lt;/h3&gt;&#10;&lt;p&gt;まずは初期ポリシーファイルを作成します。&#10;Lambdaファンクションの実行に関するフル権限を与えました。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 2&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 3&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 4&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 5&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 6&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 7&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 8&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 9&#10;&lt;/span&gt;&lt;span class="lnt"&gt;10&#10;&lt;/span&gt;&lt;span class="lnt"&gt;11&#10;&lt;/span&gt;&lt;span class="lnt"&gt;12&#10;&lt;/span&gt;&lt;span class="lnt"&gt;13&#10;&lt;/span&gt;&lt;span class="lnt"&gt;14&#10;&lt;/span&gt;&lt;span class="lnt"&gt;15&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ファイル名は何でも良い&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ cat &lt;span class="s"&gt;&amp;lt;&amp;lt;EOF &amp;gt;logging-function-role-policy.json&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;{&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;#34;Version&amp;#34;: &amp;#34;2012-10-17&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;#34;Statement&amp;#34;: [&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;#34;Effect&amp;#34;: &amp;#34;Allow&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;#34;Principal&amp;#34;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;#34;Service&amp;#34;: &amp;#34;lambda.amazonaws.com&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;#34;Action&amp;#34;: &amp;#34;sts:AssumeRole&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; ]&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;EOF&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;作成したポリシーファイルを元に、ロールを作成。&lt;/p&gt;</description></item><item><title>AWSのS3バケットの作成、削除、タグ付与、ポリシー設定をコマンドラインから操作する</title><link>https://genzouw.com/entry/2019/02/24/100022/968/</link><pubDate>Sun, 24 Feb 2019 10:00:22 +0900</pubDate><guid>https://genzouw.com/entry/2019/02/24/100022/968/</guid><description>&lt;p&gt;S3のバケット作成、削除、ポリシー設定をWeb上から操作することが多いです。&#10;Web操作の解説も多いです。&lt;/p&gt;&#10;&lt;p&gt;でも、コマンドラインからの実行を解説しているケースはさほど多くないですね。。&lt;/p&gt;&#10;&lt;p&gt;S3はバックアップデータ置き場、ログ置き場として使うことが多いが、特に検証時に作っては消し、また作るを繰り返す&amp;hellip;&#10;繰り返しが疲れてきたのでコマンドラインでのやり方をまとめてみました。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;ここではよく使用される &lt;code&gt;aws s3&lt;/code&gt; コマンドではなく &lt;code&gt;aws s3api&lt;/code&gt; コマンドについてできるだけ触れてみます。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;h2 id="aws-cli-awsコマンドの利用可能な環境づくり"&gt;&lt;code&gt;aws-cli&lt;/code&gt; (AWSコマンドの利用可能な環境づくり)&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://genzouw.com/entry/2019/02/23/133626"&gt;AWSコマンドを使うための環境をDockerを使って構築(Mac/Linux/WindowsでもPythonなしで動くよ) | ゲンゾウ用ポストイット&lt;/a&gt; を参照。&lt;/p&gt;&#10;&lt;p&gt;上記記事では Mac、Linux、Windowsの環境の差異を無視できるよう、またPythonなしでも動作するように &lt;strong&gt;Docker&lt;/strong&gt; を利用しました。&lt;/p&gt;&#10;&lt;h2 id="s3バケットの作成--aws-s3api-create-bucket--aws-s3-mb-"&gt;S3バケットの作成 ( &lt;code&gt;aws s3api create-bucket&lt;/code&gt; / &lt;code&gt;aws s3 mb&lt;/code&gt; )&lt;/h2&gt;&#10;&lt;p&gt;&lt;code&gt;aws s3api create-bucket&lt;/code&gt; コマンドを使う。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/cli/latest/reference/s3api/create-bucket.html"&gt;create-bucket — AWS CLI 1.16.111 Command Reference&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;ここでは &lt;strong&gt;genzouw-test-bucket&lt;/strong&gt; というバケット名で作成してみます。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;span class="lnt"&gt;3&#10;&lt;/span&gt;&lt;span class="lnt"&gt;4&#10;&lt;/span&gt;&lt;span class="lnt"&gt;5&#10;&lt;/span&gt;&lt;span class="lnt"&gt;6&#10;&lt;/span&gt;&lt;span class="lnt"&gt;7&#10;&lt;/span&gt;&lt;span class="lnt"&gt;8&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ aws s3api create-bucket &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --bucket genzouw-test-bucket &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --create-bucket-configuration &lt;span class="s2"&gt;&amp;#34;LocationConstraint=ap-northeast-1&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 環境変数 AWS_DEFAULT_REGION が設定されていれば、以下のコマンドでも良い。&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;## aws s3api create-bucket \&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;## --bucket genzouw-test-bucket \&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;## --create-bucket-configuration &amp;#34;LocationConstraint=${AWS_DEFAULT_REGION}&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;何度か &lt;code&gt;--create-bucket-configuration&lt;/code&gt; オプション無しで実行してみたが、以下のようなエラーが発生しました。&lt;br&gt;&#10;&lt;code&gt;AWS_DEFAULT_REGION&lt;/code&gt; の設定があったとしても指定が必要な模様。&lt;/p&gt;</description></item><item><title>AWSコマンドを使うための環境をDockerを使って構築(Mac/Linux/WindowsでもPythonなしで動くよ)</title><link>https://genzouw.com/entry/2019/02/23/133626/963/</link><pubDate>Sat, 23 Feb 2019 13:36:26 +0900</pubDate><guid>https://genzouw.com/entry/2019/02/23/133626/963/</guid><description>&lt;p&gt;AWSコマンドを実行するための環境づくりをしたいが、自前のMac環境だけでなく、Windows環境のことも考慮して構築したいですよね。&lt;/p&gt;&#10;&lt;p&gt;Dcokerを作って実現するための手順をまとめてみました。&lt;/p&gt;&#10;&lt;p&gt;Dockerを使えれば、MacだろうがWindowsだろうがLinuxだろうが同じ手順で &lt;code&gt;aws-cli&lt;/code&gt; 実行の環境が構築可能です。&lt;/p&gt;&#10;&lt;h2 id="事前にdockerのインストールが必要"&gt;事前にDockerのインストールが必要&lt;/h2&gt;&#10;&lt;p&gt;こめんなさい。事前にDockerのインストールはされていることが前提です。&lt;br&gt;&#10;こちらはネット上に情報が転がっているので独力で頑張ってみてください。&lt;/p&gt;&#10;&lt;h2 id="docker-hubから適当なコンテナを探す"&gt;&amp;ldquo;Docker Hub&amp;quot;から適当なコンテナを探す&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://hub.docker.com"&gt;Docker Hub&lt;/a&gt; から適当な既存のコンテナを探しました。&lt;/p&gt;&#10;&lt;p&gt;以下のコンテナがダンロード数も多く、比較的頻繁に更新されてそうでした。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://hub.docker.com/r/mesosphere/aws-cli/"&gt;mesosphere/aws-cli&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="dockerを使った-aws-cli-を早速試してみる"&gt;Dockerを使った &lt;code&gt;aws-cli&lt;/code&gt; を早速試してみる&lt;/h2&gt;&#10;&lt;p&gt;実行のためには、以下の３つの情報が必要。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;span class="lnt"&gt;3&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;AWS_ACCESS_KEY_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;lt;id&amp;gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;AWS_SECRET_ACCESS_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;lt;key&amp;gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;AWS_DEFAULT_REGION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;lt;region&amp;gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;環境変数として定義して &lt;code&gt;export&lt;/code&gt; すれば利用可能ということで早速試してみます。&lt;/p&gt;&#10;&lt;h3 id="iam管理コンソールページからキー情報を取得"&gt;IAM管理コンソールページから、キー情報を取得&lt;/h3&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;a href="https://console.aws.amazon.com/iam/home?#/users"&gt;IAM Management Console&lt;/a&gt; のページを開く。&lt;/li&gt;&#10;&lt;li&gt;左サイドのメニューから「ユーザー」を選択すれば、現在登録されているIAMユーザの一覧が表示されます。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;既存のものを使いたい&lt;/strong&gt; 場合はそれをクリック。 &lt;strong&gt;新しいものを使いたい&lt;/strong&gt; 場合は「ユーザーを追加」ボタンをクリック。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;今回は既存のものを利用したいので、クリックしました。&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://docs.google.com/uc?id=1iW4-BUksg2tsFRCbfj0nKqDjd8iU6LhQ" alt=""&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;「アクセスキー」&lt;/strong&gt; は最大2つまで登録できます。今回は既存のものがすでに登録してあったが &lt;strong&gt;忘れてしまったため&lt;/strong&gt; 新しく作成。&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://docs.google.com/uc?id=1Hjwi-Jq8TgpzKQ5QSaKOjPx2xzzmtWqj" alt=""&gt;&lt;/p&gt;&#10;&lt;p&gt;ボタンを押すと即座に新しいアクセスキーが作成されます。&#10;このタイミングでしっかりメモしておかないと2度と &lt;strong&gt;シークレットアクセスキー&lt;/strong&gt; は確認できないので、メモしておきます。&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://docs.google.com/uc?id=1nGF_SZAyif8LFDaoVGAyy4RPPGEAkWQ8" alt=""&gt;&lt;/p&gt;&#10;&lt;h3 id="環境変数を設定"&gt;環境変数を設定&lt;/h3&gt;&#10;&lt;p&gt;Bash（ Windowsの方はコマンドプロンプトかPowerShell ）を開いて、以下の環境変数を設定します。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;span class="lnt"&gt;3&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ &lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;AWS_ACCESS_KEY_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;lt;先程のページのアクセスキーID&amp;gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ &lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;AWS_SECRET_ACCESS_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;lt;先程のページのシークレットアクセスキー&amp;gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ &lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;AWS_DEFAULT_REGION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ap-northeast-1&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;&lt;code&gt;AWS_DEFAULT_REGION&lt;/code&gt; は一番良く使うデフォルトのリージョンを指定する必要があります。（ &lt;strong&gt;僕の場合は東京リージョン&lt;/strong&gt; ）&#10;AWSの以下のページから自分がよく使うものを１つ選んで設定すればよいです。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/ja_jp/general/latest/gr/rande.html"&gt;https://docs.aws.amazon.com/ja_jp/general/latest/gr/rande.html&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Bash起動時に自動的に環境変数が設定されるように、 &lt;code&gt;~/.bashrc&lt;/code&gt; ファイルに追記しておくとよいでしょう。&lt;/p&gt;</description></item><item><title>AWS Transfer for SFTP - Amazon S3と連携したマネージドなSFTPサービス</title><link>https://genzouw.com/entry/2019/02/16/225318/877/</link><pubDate>Sat, 16 Feb 2019 22:53:18 +0900</pubDate><guid>https://genzouw.com/entry/2019/02/16/225318/877/</guid><description>&lt;p&gt;SFTPへのPOST機能しか持ち合わせていないようなサービスをどうしても使いたい場合に利用できそうなので、調べてみました。&lt;/p&gt;&#10;&lt;h2 id="概要"&gt;概要&lt;/h2&gt;&#10;&lt;p&gt;AWSのブログサイトより引用&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://aws.amazon.com/jp/blogs/news/new-aws-transfer-for-sftp-fully-managed-sftp-service-for-amazon-s3/"&gt;新発表 – AWS Transfer for SFTP – Amazon S3と連携したマネージドなSFTPサービス | Amazon Web Services ブログ&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;SFTP（Secure File Transfer Protocol） は、長年に渡って使用されてきたデータ処理やパートナー連携の一部として、現在でも多くの組織で利用されています。&#10;このようなシステムを「レガシー」という言葉で片付けてしまうのは簡単ですが、現実には、今後も長期間に渡ってSFTPは利用され続けるでしょう。&#10;そこで私達は、このようなワークフローを持つお客様が、スムーズかつ、大きな変更を伴わずにクラウド環境に移行できるようなお手伝いをしたいと思います。&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;SFTP 経由で Amazon S3 と直接ファイル転送できます。&lt;/p&gt;&#10;&lt;p&gt;( &lt;strong&gt;SFTP&lt;/strong&gt; = &lt;em&gt;Secure Shell File Transfer Protocol の略称で、インターネット経由の安全なデータ転送に使用されるネットワークプロトコル。&lt;/em&gt; )&lt;/p&gt;&#10;&lt;p&gt;こちらのサービスを利用しない場合、既存サービスとS3の間にSFTPサーバを立てて、転送する仕組みを構築しないといけない。&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;[既存サービス(SFTP POSTのみ可能)] ===&amp;gt; 【AWS Transfer for SFTP】 ===&amp;gt; [AWS S3]&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="利用するための大まかな手順"&gt;利用するための大まかな手順&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;サーバーを作成&lt;/li&gt;&#10;&lt;li&gt;SFTP接続用のユーザアカウントをセットアップ&#10;&lt;ul&gt;&#10;&lt;li&gt;ひとつまたは複数のAmazon Simple Storage Service（S3）バケットと関連付ける&lt;/li&gt;&#10;&lt;li&gt;ssh接続用の公開鍵を作成し、アップロードする&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="作業開始"&gt;作業開始&lt;/h2&gt;&#10;&lt;h3 id="サービスページを開く"&gt;サービスページを開く&lt;/h3&gt;&#10;&lt;p&gt;マネージメントコンソールの「サービスを検索する」の欄に &lt;strong&gt;transfer&lt;/strong&gt; と入力すれば見つかる。&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://drive.google.com/uc?usp=sharing&amp;amp;export=view&amp;amp;id=1mXRiFXxyCEkTAs94vb7wIOZxcM7T9nHN" alt=""&gt;&lt;/p&gt;&#10;&lt;p&gt;早速開いてみます。&lt;/p&gt;&#10;&lt;h3 id="iamユーザで-aws-transfer-コンソールページが開けない"&gt;IAMユーザで &amp;ldquo;AWS Transfer&amp;rdquo; コンソールページが開けない。&lt;/h3&gt;&#10;&lt;p&gt;パーミッションの設定がまずいのか、新規に作成した &lt;strong&gt;IAMユーザ&lt;/strong&gt; では &amp;ldquo;AWS Transfer&amp;rdquo; コンソールページが開けない。&lt;/p&gt;</description></item><item><title>Amazonの書籍詳細ページからタイトルを抜き出し大阪市立図書館の蔵書検索を行うJavaScript</title><link>https://genzouw.com/entry/2016/04/16/215819/7/</link><pubDate>Sat, 16 Apr 2016 21:58:19 +0900</pubDate><guid>https://genzouw.com/entry/2016/04/16/215819/7/</guid><description>&lt;h2 id="はじめに"&gt;はじめに&lt;/h2&gt;&#10;&lt;p&gt;新人教育の一環として、部内でオススメの書籍を募ったところ、自分が読んでみたいと思った書籍がたくさんありました。&#10;で一つ一つ検索し &lt;strong&gt;ほしい物リスト&lt;/strong&gt; に登録していったがすべて購入すると随分な費用となるため、 &lt;a href="http://www.oml.city.osaka.lg.jp/"&gt;大阪市立図書館の蔵書検索&lt;/a&gt; で検索し予約することにしました。&#10;その作業を少しでも容易にすべく、JavaScriptでブックマークレットを作成してみました。&lt;/p&gt;&#10;&lt;h2 id="スクリプト"&gt;スクリプト&lt;/h2&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;javascript&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;w&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;productTitle&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;innerText&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/―/mgi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34; &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;trim&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;href&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;http://www.oml.city.osaka.lg.jp/index.php?action=pages_view_main&amp;amp;active_action=v3search_view_main_init&amp;amp;block_id=552&amp;amp;tab_num=0&amp;amp;op_param=&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nb"&gt;encodeURIComponent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;words=&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;h2 id="使い方"&gt;使い方&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;前提&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;僕の利用しているブラウザはhrome&lt;/em&gt; です&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;ブックマークに次のスクリプトを登録します。（ブックマークレットとなります）&lt;/li&gt;&#10;&lt;li&gt;Amazonの商品ページ（ &lt;a href="http://www.amazon.co.jp/dp/4862760856/ref=wl_it_dp_o_pC_nS_ttl?_encoding=UTF8&amp;amp;colid=13GI05LZIZI4L&amp;amp;coliid=I2BX9IYSDWN5P3"&gt;ex&lt;/a&gt; ）を開き、先のブックマークレットをクリックします。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="ひとこと"&gt;ひとこと&lt;/h2&gt;&#10;&lt;p&gt;マウスで選択されている文字列から検索、なども容易に実現できますね。&#10;&lt;strong&gt;スクリプトとは関係ないですが、&lt;a href="https://www.oml.city.osaka.lg.jp/"&gt;大阪市立図書館のページ&lt;/a&gt;重たいです。&lt;/strong&gt;&lt;/p&gt;</description></item></channel></rss>