<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3449707904234438373</id><updated>2014-05-12T09:00:06.120+09:00</updated><category term="news"/><category term="aws"/><category term="server"/><category term="study"/><category term="press"/><title type='text'>cloudpackブログ</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.cloudpack.jp/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://blog.cloudpack.jp/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>shouhei</name><uri>http://www.blogger.com/profile/03953230931671393951</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>2120</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3449707904234438373.post-80299084801677433</id><published>2014-05-12T09:00:00.000+09:00</published><updated>2014-05-12T09:00:06.123+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="news"/><title type='text'>cloudpackブログ週刊レビュー 2014/05/12</title><content type='html'>先週公開した記事は下記となります。&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;tr&gt;&lt;td width=&quot;90&quot;&gt;公開日&lt;/td&gt;&lt;td width=&quot;70&quot;&gt;作成者&lt;/td&gt;&lt;td&gt;タイトル&lt;/td&gt;&lt;/tr&gt;   &lt;tr&gt;&lt;td rowspan=&quot;3&quot;&gt;05月05日（月）&lt;/td&gt;&lt;td&gt;ヤマグチ&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://bit.ly/clp_blog_20140505-1&quot; title=&quot;RubyでCPUのコア数を取得する&quot;&gt;RubyでCPUのコア数を取得する&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ヤマグチ&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://bit.ly/clp_blog_20140505-2&quot; title=&quot;ログファイルに出力しつつ標準出力もする&quot;&gt;ログファイルに出力しつつ標準出力もする&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;田村&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://bit.ly/clp_blog_20140505-3&quot; title=&quot;Neustarで負荷試験&quot;&gt;Neustarで負荷試験&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;  &lt;tr&gt;&lt;td rowspan=&quot;2&quot;&gt;05月10日（土）&lt;/td&gt;&lt;td&gt;ヤマグチ&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://bit.ly/clp_blog_20140510-1&quot; title=&quot;AWS Certified Solutions Architect - Professionalのサンプル問題を読んでみる&quot;&gt;AWS Certified Solutions Architect - Professionalのサンプル問題を読んでみる&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;がみさん&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://bit.ly/clp_blog_20140510-2&quot; title=&quot;aws cliでサーバ証明書を削除する&quot;&gt;aws cliでサーバ証明書を削除する&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;  &lt;/table&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.cloudpack.jp/feeds/80299084801677433/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://blog.cloudpack.jp/2014/05/news-cloudpack-review-20140512.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/80299084801677433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/80299084801677433'/><link rel='alternate' type='text/html' href='http://blog.cloudpack.jp/2014/05/news-cloudpack-review-20140512.html' title='cloudpackブログ週刊レビュー 2014/05/12'/><author><name>hashimoto</name><uri>http://www.blogger.com/profile/04747288723021078616</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3449707904234438373.post-1400277959816507180</id><published>2014-05-10T16:00:00.000+09:00</published><updated>2014-05-10T16:00:07.097+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aws"/><title type='text'>aws cliでサーバ証明書を削除する</title><content type='html'> &lt;a href=&quot;http://www.cloudpack.jp/&quot; target=&quot;_blank&quot; title=&quot;cloudpack&quot;&gt;cloudpack&lt;/a&gt; の &lt;a href=&quot;https://www.facebook.com/kenkishigami&quot; target=&quot;_blank&quot; title=&quot;がみさん&quot;&gt;がみさん&lt;/a&gt;です。&lt;br /&gt;&lt;br /&gt;ELBでSSL Terminationをよく利用されると思うのですが、私自身使用したことがなく、&lt;br /&gt;アップロード済みで、不要になったサーバ証明書はどうやって削除するのかよくわからなかったのでメモを残します。&lt;br /&gt;&lt;br /&gt;aws iamの引数だったとは・・・&lt;br /&gt; &lt;h4&gt;一覧の確認&lt;/h4&gt;&lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;&lt;br /&gt;orenomac$ aws iam list-server-certificates --profile orenoprofile&lt;br /&gt;{&lt;br /&gt;    &quot;ServerCertificateMetadataList&quot;: [&lt;br /&gt;        {&lt;br /&gt;..省略..&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt; &lt;h4&gt;削除&lt;/h4&gt;&lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;&lt;br /&gt;orenomac$ aws iam delete-server-certificate --server-certificate-name orenossl --profile orenoprofile&lt;br /&gt;&lt;/pre&gt; &lt;h4&gt;アップロード&lt;/h4&gt;&lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;&lt;br /&gt;aws iam upload-server-certificate...&lt;br /&gt;&lt;/pre&gt; &lt;br /&gt;&lt;br /&gt; こちらの記事はなかの人（&lt;a href=&quot;https://www.facebook.com/kenkishigami&quot; target=&quot;_blank&quot; title=&quot;がみさん&quot;&gt;がみさん&lt;/a&gt;）監修のもと掲載しています。&lt;br /&gt;元記事は、&lt;a href=&quot;http://buta9999.hatenablog.jp/entry/2014/05/09/221427&quot; target=&quot;_blank&quot; title=&quot;こちら&quot;&gt;こちら&lt;/a&gt; </content><link rel='replies' type='application/atom+xml' href='http://blog.cloudpack.jp/feeds/1400277959816507180/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://blog.cloudpack.jp/2014/05/aws-news-cli-delete-server-certificate-ssl.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/1400277959816507180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/1400277959816507180'/><link rel='alternate' type='text/html' href='http://blog.cloudpack.jp/2014/05/aws-news-cli-delete-server-certificate-ssl.html' title='aws cliでサーバ証明書を削除する'/><author><name>hashimoto</name><uri>http://www.blogger.com/profile/04747288723021078616</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3449707904234438373.post-3652707840665390599</id><published>2014-05-10T13:22:00.001+09:00</published><updated>2014-05-10T13:22:52.980+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aws"/><title type='text'>AWS Certified Solutions Architect - Professionalのサンプル問題を読んでみる</title><content type='html'>  &lt;a href=&quot;http://www.cloudpack.jp/&quot; target=&quot;_blank&quot; title=&quot;cloudpack&quot;&gt;cloudpack&lt;/a&gt; の &lt;a href=&quot;http://t.y13i.com/&quot; target=&quot;_blank&quot; title=&quot;ヤマグチ&quot;&gt;ヤマグチ&lt;/a&gt;です。&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://aws.amazon.com/certification/certification-levels/certified-solutions-architect-professional/&quot;&gt;AWS Certified Solutions Architect - Professional&lt;/a&gt;英語版がスタートしたようです。&lt;/p&gt; &lt;p&gt;サンプル問題が公開されているので、ざっと目を通してみました。※選択肢は原文ではアルファベットです。&lt;/p&gt; &lt;br /&gt;&lt;blockquote&gt;  &lt;p&gt;Your company’s on-premises content management system has the following architecture:&lt;/p&gt;     &lt;ul&gt;&lt;li&gt;Application Tier – Java code on a JBoss application server &lt;/li&gt;  &lt;li&gt;Database Tier – Oracle database regularly backed up to S3 using the Oracle RMAN backup utility&lt;/li&gt;  &lt;li&gt;Static Content – stored on a 512GB gateway stored Storage Gateway volume attached to the application server via the iSCSI interface&lt;/li&gt;  &lt;/ul&gt;&lt;p&gt;Which AWS based disaster recovery strategy will give you the best RTO?&lt;/p&gt;     &lt;ol&gt;&lt;li&gt;Deploy the Oracle database and the JBoss app server on EC2. Restore the RMAN Oracle backups from Amazon S3. Generate an EBS volume of static content from the Storage Gateway and attach it to the JBoss EC2 server.&lt;/li&gt;  &lt;li&gt;Deploy the Oracle database on RDS. Deploy the JBoss app server on EC2. Restore the RMAN Oracle backups from Amazon Glacier. Generate an EBS volume of static content from the Storage Gateway and attach it to the JBoss EC2 server.&lt;/li&gt;  &lt;li&gt;Deploy the Oracle database and the JBoss app server on EC2. Restore the RMAN Oracle backups from Amazon S3. Restore the static content by attaching an AWS Storage Gateway running on Amazon EC2 as an iSCSI volume to the JBoss EC2 server.&lt;/li&gt;  &lt;li&gt;Deploy the Oracle database and the JBoss app server on EC2. Restore the RMAN Oracle backups from Amazon S3. Restore the static content from an AWS Storage Gateway-VTL running on Amazon EC2. &lt;/li&gt;  &lt;/ol&gt;&lt;/blockquote&gt; &lt;p&gt;あなたの会社のオンプレミス環境にあるコンテンツ管理システムは以下のような構成です:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;アプリケーション層: Javaで書かれたコードとJBossアプリケーションサーバー&lt;/li&gt;&lt;li&gt;データベース層: Oracleデータベースで、RMANバックアップユーティリティを使って定期的にS3にバックアップを行っている&lt;/li&gt;&lt;li&gt;静的コンテンツ: 512GBのStorage Gateway（ゲートウェイ保管型ボリュームに設定）に保存し、iSCSIインターフェイスでアプリケーションサーバーに接続&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;どのAWSディザスターリカバリー戦略を用いれば最良の目標復旧時間を得られますか？&lt;/p&gt; &lt;ol&gt;&lt;li&gt;OracleデータベースとJBossアプリケーションサーバーをEC2にデプロイする。RMAN OracleバックアップをS3からリストアする。Storage Gatewayから静的コンテンツを含んだEBSボリュームを作成し、EC2上のJBossサーバーに接続する。&lt;/li&gt;&lt;li&gt;OracleデータベースをRDSにデプロイする。JBossアプリケーションサーバーをEC2にデプロイする。RMAN OracleバックアップをGlacierからリストアする。Storage Gatewayから静的コンテンツを含んだEBSボリュームを作成し、EC2上のJBossサーバーに接続する。&lt;/li&gt;&lt;li&gt;OracleデータベースとJBossアプリケーションサーバーをEC2にデプロイする。RMAN OracleバックアップをS3からリストアする。静的コンテンツはEC2上でiSCSIボリュームとして動作するStorage Gatewayを、EC2上のJBossサーバーに接続してリストアする。&lt;/li&gt;&lt;li&gt;OracleデータベースとJBossアプリケーションサーバーをEC2にデプロイする。RMAN OracleバックアップをS3からリストアする。EC2上で動作するStorage Gateway-VTL (ゲートウェイ仮想テープライブラリ)から静的コンテンツをリストアする。&lt;/li&gt;&lt;/ol&gt; &lt;br /&gt;&lt;blockquote&gt;  &lt;p&gt;You are building an Amazon Virtual Private Cloud (VPC) environment for an analytics system which includes a business intelligence (BI) tier launched from the AWS Marketplace and Amazon Redshift.   Analysts need to be able to launch new analysis stacks (including BI tools and Amazon Redshift clusters) on demand, without interacting with network staff. Which topology for this VPC would give analysts the most flexibility?&lt;/p&gt;     &lt;ol&gt;&lt;li&gt;A single subnet for both the BI software and Amazon Redshift. &lt;/li&gt;  &lt;li&gt;A single subnet for BI software and a separate single subnet for Amazon Redshift. &lt;/li&gt;  &lt;li&gt;One subnet per Availability Zone for BI software and a separate single subnet for Amazon Redshift. &lt;/li&gt;  &lt;li&gt;One subnet per Availability Zone for BI software and a separate subnet per Availability Zone for Redshift. &lt;/li&gt;  &lt;/ol&gt;&lt;/blockquote&gt; &lt;p&gt;あなたは、AWS Marketplaceから起動するビジネスインテリジェンス（BI）ソフトとRedshiftを含む分析システム用のVPC環境を構築しなければなりません。 分析者は必要に応じて新しい分析スタック（BIツールとRedshiftクラスタ）を、ネットワーク管理者に問い合わせることなく起動できなければなりません。このVPCでは、どのネットワーク構造を使えば分析者に最大の柔軟性を与えられますか？&lt;/p&gt; &lt;ol&gt;&lt;li&gt;単一のサブネット内に全てのBIソフトとRedshiftを配置する。&lt;/li&gt;&lt;li&gt;BIソフトは単一のサブネット、Redshiftはそれぞれ別サブネットに配置する。&lt;/li&gt;&lt;li&gt;BIソフトはAZごとに別のサブネット、Redshiftはそれぞれ別サブネットに配置する。&lt;/li&gt;&lt;li&gt;BIソフトはAZごとに別のサブネット、RedshiftはAZごとに別サブネットに配置する。&lt;/li&gt;&lt;/ol&gt; &lt;br /&gt;&lt;blockquote&gt;  &lt;p&gt;You’re working with a company that wants to leverage many AWS services in multiple regions; however, security controls within the company state that all egress connections to the Internet from the production network must be individually whitelisted in the on-premises firewall. Which scenarios will allow access to the AWS API endpoints while addressing the stated security concerns? (Pick 2)&lt;/p&gt;     &lt;ol&gt;&lt;li&gt;Leverage the unified, FIPS 140-2 validated, API endpoint located in us-east-1. &lt;/li&gt;  &lt;li&gt;Create a trusted zone/DMZ within the corporate network that doesn&amp;#8217;t restrict egress to Internet traffic. &lt;/li&gt;  &lt;li&gt;Create a proxy server within Amazon EC2. Allow access from the corporate network, and add the IP of the EC2 instance to the company firewall. &lt;/li&gt;  &lt;li&gt;Leverage the GetEndpoint API in order to programmatically get all AWS endpoints, and add these to the company firewall. &lt;/li&gt;  &lt;/ol&gt;&lt;/blockquote&gt; &lt;p&gt;あなたは会社においてAWSの様々なサービスを複数のリージョンで活用しようとしています。しかし、会社のセキュリティ要件は、本番ネットワークからインターネットへの通信は、オンプレミスのファイアウォールでホワイトリストに合致するか検査されなければならない、と定めています。 以下のどのシナリオを用いれば、セキュリティ要件に即した形でAWS APIのエンドポイントにアクセスできますか？（2つ選択）&lt;/p&gt; &lt;ol&gt;&lt;li&gt;us-east-1にある、FIPS 140-2規格準拠の統一型エンドポイントを利用する&lt;/li&gt;&lt;li&gt;社内ネットワークに、外部への通信を制限しない信頼されたゾーン/DMZセグメントを作成する&lt;/li&gt;&lt;li&gt;EC2上にプロキシサーバーを作成する。Security Groupで社内ネットワークからの通信を許可し、そのEC2インスタンスのIPを社内ファイアウォールに追加する&lt;/li&gt;&lt;li&gt;GetEndpoint APIを利用してAWSの全エンドポイントを取得し、それらを社内ファイアウォールに追加する&lt;/li&gt;&lt;/ol&gt; &lt;br /&gt;&lt;blockquote&gt;  &lt;p&gt;An online marketing firm wants to provide a web service API that other businesses can call to get search engine optimization (SEO) keyword suggestions. Trending topics are analyzed using Amazon Elastic MapReduce, and results will then be stored in a read-only database. ~1.2 billion records (~3&amp;#160;TB total raw data) will be stored fairly evenly across six tables. Each web service call will issue a single database query. The web service must support up to 100 concurrent API requests and return API responses within 1.5 seconds. Which options can satisfy the database requirements for the web service? (Pick 2)&lt;/p&gt;     &lt;ol&gt;&lt;li&gt;One Amazon Redshift cluster with one 8 XL node (16&amp;#160;TB storage), with good distribution and sort keys for the tables. &lt;/li&gt;  &lt;li&gt;One Amazon Redshift cluster with 4 XL nodes (each with 2&amp;#160;TB storage), with good distribution and sort keys for the tables. &lt;/li&gt;  &lt;li&gt;Six shared Amazon RDS instances, with 1&amp;#160;TB of storage for each RDS instance. &lt;/li&gt;  &lt;li&gt;Six Amazon DynamoDB tables, each with a provisioned read and write throughput of 10 units; add local secondary indices to optimize queries. &lt;/li&gt;  &lt;li&gt;One MySQL instance running on an Amazon EC2 instance with a RAID-10 logical volume consisting of eight 1&amp;#160;TB EBS volumes. &lt;/li&gt;  &lt;/ol&gt;&lt;/blockquote&gt; &lt;p&gt;あるオンラインマーケティング会社は、他の案件からサーチエンジン最適化（SEO）のキーワード推薦を呼び出せるようなWebサービスAPIを提供しようとしています。現在流行の話題はElastic MapReduceで分析し、その後読み取り専用のデータベースに保存されます。合計12億レコード（3TBの生データ）が6つのテーブルにおよそ等分に格納されます。Webサービスの呼び出しは1つのデータベースクエリーを発行します。Webサービスは100までの同時呼び出しをサポートし、1.5秒以内に応答を返す必要があります。以下のどの構成であればWebサービスの要件を満たせますか？（2つ選択）&lt;/p&gt; &lt;ol&gt;&lt;li&gt;単一のRedshiftクラスタと1つの8XLノード（16TBストレージ）、各テーブルについて良い分散とソートキー&lt;/li&gt;&lt;li&gt;単一のRedshiftクラスタと複数の4XLノード（各2TBストレージ）、各テーブルについて良い分散とソートキー&lt;/li&gt;&lt;li&gt;6つの共有RDSインスタンス、それぞれに1TBのストレージ&lt;/li&gt;&lt;li&gt;6つのDynamoDBテーブル、それぞれ10ユニットのプロビジョニングされた読み書きスループット、クエリ最適化のためのセカンダリーインデックスの追加&lt;/li&gt;&lt;li&gt;単一のEC2インスタンス上のMySQL、8つの1TB EBSで構成されたRAID-10の論理ボリューム&lt;/li&gt;&lt;/ol&gt; &lt;br /&gt;&lt;blockquote&gt;  &lt;p&gt;An ERP application is deployed in multiple Availability Zones in a single region. In the event of failure, the RTO must be less than 3 hours, and the RPO is 15 minutes. The customer realizes that data corruption occurred roughly 1.5 hours ago. Which DR strategy can be used to achieve this RTO and RPO in the event of this kind of failure?&lt;/p&gt;     &lt;ol&gt;&lt;li&gt;Take 15-minute DB backups stored in Glacier, with transaction logs stored in Amazon S3 every 5 minutes. &lt;/li&gt;  &lt;li&gt;Use synchronous database master-slave replication between two Availability Zones. &lt;/li&gt;  &lt;li&gt;Take hourly DB backups to Amazon S3, with transaction logs stored in S3 every 5 minutes. &lt;/li&gt;  &lt;li&gt;Take hourly DB backups to an Amazon EC2 instance store volume, with transaction logs stored in Amazon S3 every 5 minutes. &lt;/li&gt;  &lt;/ol&gt;&lt;/blockquote&gt; &lt;p&gt;あるERPアプリケーションが単一のリージョンの複数AZにデプロイされています。目標復旧時間（RTO）は3時間未満、目標復旧地点（RPO）は15分前です。顧客はデータ破損が約1.5時間前に発生したことに気付きました。以下のどのDR戦略を用いれば、このような障害においてRTOとRPOを達成できるでしょうか？&lt;/p&gt; &lt;ol&gt;&lt;li&gt;15分ごとのDBバックアップをGlacierに行い、トランザクションログを5分おきにS3に格納する&lt;/li&gt;&lt;li&gt;2つのAZ間でマスター-スレイブの同期レプリケーションを使う&lt;/li&gt;&lt;li&gt;DBバックアップをS3に毎時行い、トランザクションログを5分おきにS3に格納する&lt;/li&gt;&lt;li&gt;DBバックアップをEC2のインスタンスストアに毎時行い、トランザクションログを5分おきにS3に格納する&lt;/li&gt;&lt;/ol&gt; &lt;br /&gt;&lt;blockquote&gt;  &lt;p&gt;You are building a website that will retrieve and display highly sensitive information to users. The amount of traffic the site will receive is known and not expected to fluctuate. The site will leverage SSL to protect the communication between the clients and the web servers. Due to the nature of the site you are very concerned about the security of your SSL private key and want to ensure that the key cannot be accidentally or intentionally moved outside your environment. Additionally, while the data the site will display is stored on an encrypted EBS volume, you are also concerned that the web servers’ logs might contain some sensitive information; therefore, the logs must be stored so that they can only be decrypted by employees of your company. Which of these architectures meets all of the requirements?&lt;/p&gt;     &lt;ol&gt;&lt;li&gt;Use Elastic Load Balancing to distribute traffic to a set of web servers. To protect the SSL private key, upload the key to the load balancer and configure the load balancer to offload the SSL traffic. Write your web server logs to an ephemeral volume that has been encrypted using a randomly generated AES key. &lt;/li&gt;  &lt;li&gt;Use Elastic Load Balancing to distribute traffic to a set of web servers. Use TCP load balancing on the load balancer and configure your web servers to retrieve the private key from a private Amazon S3 bucket on boot. Write your web server logs to a private Amazon S3 bucket using Amazon S3 server-side encryption. &lt;/li&gt;  &lt;li&gt;Use Elastic Load Balancing to distribute traffic to a set of web servers, configure the load balancer to perform TCP load balancing, use an AWS CloudHSM to perform the SSL transactions, and write your web server logs to a private Amazon S3 bucket using Amazon S3 server-side encryption. &lt;/li&gt;  &lt;li&gt;Use Elastic Load Balancing to distribute traffic to a set of web servers. Configure the load balancer to perform TCP load balancing, use an AWS CloudHSM to perform the SSL transactions, and write your web server logs to an ephemeral volume that has been encrypted using a randomly generated AES key. &lt;/li&gt;  &lt;/ol&gt;&lt;/blockquote&gt; &lt;p&gt;あなたは高度機密情報を収集・表示するウェブサイトを作成しています。サイトが受け取る通信量は予想が可能で、変動はないものと思われます。クライアントとサーバー間の通信はSSLで保護する予定です。サイトの性質から必然的に、SSL秘密鍵が偶然にあるいは故意に環境外へ流出しないよう、細心の注意を払う必要があります。さらに、サイトが表示するデータは暗号化EBSボリュームに格納されることからサーバーのログに機密情報が含まれる可能性についても注意が必要であるため、ログは従業員のみが復号化できるように格納されている必要があります。以下のどの構成を用いれば全ての要件を満たせるでしょうか？&lt;/p&gt; &lt;ol&gt;&lt;li&gt;ELBを使いトラフィックを複数のWebサーバーに振り分ける。SSL秘密鍵を保護するため、秘密鍵をELBにアップロードし、ELBでSSL通信を復号化する。Webサーバーのログは、ランダムに生成されたAESキーで暗号化されたエフェメラルボリュームに保存する。&lt;/li&gt;&lt;li&gt;ELBを使いトラフィックを複数のWebサーバーに振り分ける。ELBではTCPロードバランシングを行い、起動時にS3のプライベートバケットから秘密鍵を取得するようにWebサーバを設定する。サーバーログはS3のプライベートバケットにサーバーサイド暗号化を掛けた上で保存する。&lt;/li&gt;&lt;li&gt;ELBを使いトラフィックを複数のWebサーバーに振り分ける。ELBではTCPロードバランシングを行い、SSLトランザクションを行うためCloudHSMを使う。サーバーログは、S3のプライベートバケットにサーバーサイド暗号化を掛けた上で保存する。&lt;/li&gt;&lt;li&gt;ELBを使いトラフィックを複数のWebサーバーに振り分ける。ELBではTCPロードバランシングを行い、SSLトランザクションを行うためCloudHSMを使う。Webサーバーのログは、ランダムに生成されたAESキーで暗号化されたエフェメラルボリュームに保存する。&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;……&lt;/p&gt; &lt;p&gt;わ、わからん……。&lt;/p&gt; &lt;br /&gt;&lt;br /&gt; こちらの記事はなかの人（&lt;a href=&quot;http://t.y13i.com/&quot; target=&quot;_blank&quot; title=&quot;ヤマグチ&quot;&gt;ヤマグチ&lt;/a&gt;）監修のもと掲載しています。&lt;br /&gt;元記事は、&lt;a href=&quot;http://t.y13i.com/post/85207171350/aws-certified-solutions-architect&quot; target=&quot;_blank&quot; title=&quot;こちら&quot;&gt;こちら&lt;/a&gt; </content><link rel='replies' type='application/atom+xml' href='http://blog.cloudpack.jp/feeds/3652707840665390599/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://blog.cloudpack.jp/2014/05/aws-news-certified-solutions-architect.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/3652707840665390599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/3652707840665390599'/><link rel='alternate' type='text/html' href='http://blog.cloudpack.jp/2014/05/aws-news-certified-solutions-architect.html' title='AWS Certified Solutions Architect - Professionalのサンプル問題を読んでみる'/><author><name>hashimoto</name><uri>http://www.blogger.com/profile/04747288723021078616</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3449707904234438373.post-5073623140741716679</id><published>2014-05-05T11:00:00.000+09:00</published><updated>2014-05-05T11:00:01.117+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="server"/><title type='text'>Neustarで負荷試験</title><content type='html'>   &lt;a href=&quot;http://www.cloudpack.jp/&quot; target=&quot;_blank&quot; title=&quot;cloudpack&quot;&gt;cloudpack&lt;/a&gt; の &lt;a href=&quot;http://blog.tmkn.jp/&quot; target=&quot;_blank&quot; title=&quot;田村&quot;&gt;田村&lt;/a&gt;です。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://cdn.aws-plus.com/images/blog/article/img_neustar-performance-test-how-to_01.png&quot;&gt;&lt;img src=&quot;http://cdn.aws-plus.com/images/blog/article/img_neustar-performance-test-how-to_01.png&quot; width=&quot;307&quot; height=&quot;77&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://home.wpm.neustar.biz/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; title=&quot;Neustar&quot;&gt;Neustar&lt;/a&gt;を使って負荷試験を行ったので手順のまとめ&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;[Create A New Script]を選択&lt;br /&gt;&lt;a href=&quot;http://cdn.aws-plus.com/images/blog/article/img_neustar-performance-test-how-to_02.png&quot;&gt;&lt;img src=&quot;http://cdn.aws-plus.com/images/blog/article/img_neustar-performance-test-how-to_02.png&quot; width=&quot;600&quot; height=&quot;467&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;シンプルなGETを投げ続ける場合はURLを変更して[SAVE &amp;#038; VALIDATE]&lt;br /&gt;&lt;a href=&quot;http://cdn.aws-plus.com/images/blog/article/img_neustar-performance-test-how-to_03.png&quot;&gt;&lt;img src=&quot;http://cdn.aws-plus.com/images/blog/article/img_neustar-performance-test-how-to_03.png&quot; width=&quot;591&quot; height=&quot;600&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Validation Status:がValidになることを確認&lt;br /&gt;想定通りのアクセスになっているかサーバ側のログも確認&lt;br /&gt;OKであれば[GENERATE BASIC SCRIPT]&lt;br /&gt;&lt;a href=&quot;http://cdn.aws-plus.com/images/blog/article/img_neustar-performance-test-how-to_04.png&quot;&gt;&lt;img src=&quot;http://cdn.aws-plus.com/images/blog/article/img_neustar-performance-test-how-to_04.png&quot; width=&quot;534&quot; height=&quot;600&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;(CONVERTED)がつくことを確認&lt;br /&gt;&lt;a href=&quot;http://cdn.aws-plus.com/images/blog/article/img_neustar-performance-test-how-to_05.png&quot;&gt;&lt;img src=&quot;http://cdn.aws-plus.com/images/blog/article/img_neustar-performance-test-how-to_05.png&quot; width=&quot;535&quot; height=&quot;600&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;[Create A Load Test]を選択&lt;br /&gt;&lt;a href=&quot;http://cdn.aws-plus.com/images/blog/article/img_neustar-performance-test-how-to_06.png&quot;&gt;&lt;img src=&quot;http://cdn.aws-plus.com/images/blog/article/img_neustar-performance-test-how-to_06.png&quot; width=&quot;600&quot; height=&quot;467&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;RAMP-CONSTANTの組み合わせが良いらしい&lt;br /&gt;Max Usersは予想&lt;br /&gt;&lt;a href=&quot;http://cdn.aws-plus.com/images/blog/article/img_neustar-performance-test-how-to_07.png&quot;&gt;&lt;img src=&quot;http://cdn.aws-plus.com/images/blog/article/img_neustar-performance-test-how-to_07.png&quot; width=&quot;600&quot; height=&quot;520&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Scriptsが(converted) (VirtualUser)になっていることを確認&lt;br /&gt;&lt;a href=&quot;http://cdn.aws-plus.com/images/blog/article/img_neustar-performance-test-how-to_08.png&quot;&gt;&lt;img src=&quot;http://cdn.aws-plus.com/images/blog/article/img_neustar-performance-test-how-to_08.png&quot; width=&quot;600&quot; height=&quot;411&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;ちなみに(RealUser)だと同じ条件でこのお値段&lt;br /&gt;&lt;a href=&quot;http://cdn.aws-plus.com/images/blog/article/img_neustar-performance-test-how-to_09.png&quot;&gt;&lt;img src=&quot;http://cdn.aws-plus.com/images/blog/article/img_neustar-performance-test-how-to_09.png&quot; width=&quot;439&quot; height=&quot;143&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;(特に金額を)最終確認して[Schedule Test]&lt;br /&gt;&lt;a href=&quot;http://cdn.aws-plus.com/images/blog/article/img_neustar-performance-test-how-to_10.png&quot;&gt;&lt;img src=&quot;http://cdn.aws-plus.com/images/blog/article/img_neustar-performance-test-how-to_10.png&quot; width=&quot;584&quot; height=&quot;560&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;7分程待ち負荷試験開始&lt;br /&gt;&lt;a href=&quot;http://cdn.aws-plus.com/images/blog/article/img_neustar-performance-test-how-to_11.png&quot;&gt;&lt;img src=&quot;http://cdn.aws-plus.com/images/blog/article/img_neustar-performance-test-how-to_11.png&quot; width=&quot;600&quot; height=&quot;595&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;結果はこんな感じ&lt;br /&gt;&lt;a href=&quot;http://cdn.aws-plus.com/images/blog/article/img_neustar-performance-test-how-to_12.png&quot;&gt;&lt;img src=&quot;http://cdn.aws-plus.com/images/blog/article/img_neustar-performance-test-how-to_12.png&quot; width=&quot;600&quot; height=&quot;335&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://cdn.aws-plus.com/images/blog/article/img_neustar-performance-test-how-to_13.png&quot;&gt;&lt;img src=&quot;http://cdn.aws-plus.com/images/blog/article/img_neustar-performance-test-how-to_13.png&quot; width=&quot;600&quot; height=&quot;338&quot; /&gt;&lt;/a&gt;&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt; こちらの記事はなかの人（&lt;a href=&quot;http://blog.tmkn.jp/&quot; target=&quot;_blank&quot; title=&quot;田村&quot;&gt;田村&lt;/a&gt;）監修のもと掲載しています。&lt;br /&gt;元記事は、&lt;a href=&quot;http://blog.tmkn.jp/how2neustar/&quot; target=&quot;_blank&quot; title=&quot;こちら&quot;&gt;こちら&lt;/a&gt;   </content><link rel='replies' type='application/atom+xml' href='http://blog.cloudpack.jp/feeds/5073623140741716679/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://blog.cloudpack.jp/2014/05/server-news-neustar-performance-test-how-to.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/5073623140741716679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/5073623140741716679'/><link rel='alternate' type='text/html' href='http://blog.cloudpack.jp/2014/05/server-news-neustar-performance-test-how-to.html' title='Neustarで負荷試験'/><author><name>hashimoto</name><uri>http://www.blogger.com/profile/04747288723021078616</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3449707904234438373.post-1538323636694463434</id><published>2014-05-05T10:00:00.000+09:00</published><updated>2014-05-05T10:00:00.139+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="server"/><title type='text'>ログファイルに出力しつつ標準出力もする</title><content type='html'> &lt;a href=&quot;http://www.cloudpack.jp/&quot; target=&quot;_blank&quot; title=&quot;cloudpack&quot;&gt;cloudpack&lt;/a&gt; の &lt;a href=&quot;http://t.y13i.com/&quot; target=&quot;_blank&quot; title=&quot;ヤマグチ&quot;&gt;ヤマグチ&lt;/a&gt;です。&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://docs.ruby-lang.org/ja/2.1.0/library/logger.html&quot; target=&quot;_blank&quot;&gt;Logger&lt;/a&gt;って便利ですよね。&lt;br /&gt;でも同時に標準出力したい時ってありませんか？私はあります。&lt;/p&gt;&lt;br /&gt; &lt;script src=&quot;https://gist.github.com/y13i/fdb17086f4eddaf5386e.js&quot;&gt;&lt;/script&gt; &lt;p&gt;わざわざputsしてlog.infoしてと毎回やるのは不毛だし、tail -fするのも面倒だし。&lt;br /&gt;上記ファイルをrequireすればあとは標準のLogger同様に使えます。&lt;/p&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;&lt;br /&gt;require_relative &quot;plogger&quot;&lt;br /&gt;&lt;br /&gt;def log&lt;br /&gt;  @log ||= PLogger.new &quot;#{__FILE__}.log&quot;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;log.info &quot;Lorem ipsum...&quot;&lt;br /&gt;log.fatal &quot;We got a Blackhawk down, we got a Blackhawk down&quot;&lt;br /&gt;&lt;/pre&gt; &lt;br /&gt;&lt;br /&gt; こちらの記事はなかの人（&lt;a href=&quot;http://t.y13i.com/&quot; target=&quot;_blank&quot; title=&quot;ヤマグチ&quot;&gt;ヤマグチ&lt;/a&gt;）監修のもと掲載しています。&lt;br /&gt;元記事は、&lt;a href=&quot;http://t.y13i.com/post/84520360020&quot; target=&quot;_blank&quot; title=&quot;こちら&quot;&gt;こちら&lt;/a&gt; </content><link rel='replies' type='application/atom+xml' href='http://blog.cloudpack.jp/feeds/1538323636694463434/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://blog.cloudpack.jp/2014/05/server-news-logger-stdout.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/1538323636694463434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/1538323636694463434'/><link rel='alternate' type='text/html' href='http://blog.cloudpack.jp/2014/05/server-news-logger-stdout.html' title='ログファイルに出力しつつ標準出力もする'/><author><name>hashimoto</name><uri>http://www.blogger.com/profile/04747288723021078616</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3449707904234438373.post-72051664816995460</id><published>2014-05-05T09:30:00.000+09:00</published><updated>2014-05-05T09:30:01.746+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="server"/><title type='text'>RubyでCPUのコア数を取得する</title><content type='html'>  &lt;a href=&quot;http://www.cloudpack.jp/&quot; target=&quot;_blank&quot; title=&quot;cloudpack&quot;&gt;cloudpack&lt;/a&gt; の &lt;a href=&quot;http://t.y13i.com/&quot; target=&quot;_blank&quot; title=&quot;ヤマグチ&quot;&gt;ヤマグチ&lt;/a&gt;です。&lt;br /&gt;&lt;br /&gt;Linuxであれば&lt;br /&gt; &lt;blockquote&gt;%x(cat /proc/cpuinfo | grep processor).lines.size &lt;/blockquote&gt;とかで良いんですが、Linuxでしか動かなかったりイマイチ感あります。&lt;br /&gt;そこでFacterです。システムに関する情報を使いやすくするためのGemです。見慣れない綴りなので間違いやすいのですが、FactorではなくFacterです。&lt;br /&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;&lt;br /&gt;gem install facter&lt;br /&gt;&lt;/pre&gt;使ってみましょう。「ruby cpu core count」でぐぐって最初に出てくるStackOverflowのスレではFacter.processorcountと書いてありますが、これはバージョンアップで削除されているのでNoMethodErrorです。&lt;br /&gt; &lt;blockquote&gt;require &quot;facter&quot; Facter[&quot;processorcount&quot;].value.to_i # =&gt; 4 &lt;/blockquote&gt;簡単ですね。valueで返ってくるのはStringな点に注意しましょう。&lt;br /&gt;&lt;br /&gt;他にも例えばOS Xであれば以下のような使い方もできるようです。 &lt;blockquote&gt;Facter::Util::Macosx.hardware_overview&lt;br /&gt;# =&gt;&lt;br /&gt;# {&lt;br /&gt;#   &quot;SMC_version_system&quot;      =&gt; &quot;2.16f58&quot;,&lt;br /&gt;#   &quot;boot_rom_version&quot;        =&gt; &quot;MBP111.0138.B03&quot;,&lt;br /&gt;#   &quot;cpu_type&quot;                =&gt; &quot;Intel Core i5&quot;,&lt;br /&gt;#   &quot;current_processor_speed&quot; =&gt; &quot;2.4 GHz&quot;,&lt;br /&gt;#   &quot;l2_cache_core&quot;           =&gt; &quot;256 KB&quot;,&lt;br /&gt;#   &quot;l3_cache&quot;                =&gt; &quot;3 MB&quot;,&lt;br /&gt;#   &quot;machine_model&quot;           =&gt; &quot;MacBookPro11,1&quot;,&lt;br /&gt;#   &quot;machine_name&quot;            =&gt; &quot;MacBook Pro&quot;,&lt;br /&gt;#   &quot;number_processors&quot;       =&gt; 2,&lt;br /&gt;#   &quot;packages&quot;                =&gt; 1,&lt;br /&gt;#   &quot;physical_memory&quot;         =&gt; &quot;8 GB&quot;,&lt;br /&gt;#   &quot;platform_UUID&quot;           =&gt; &quot;ZZZZZZ&quot;,&lt;br /&gt;#   &quot;serial_number&quot;           =&gt; &quot;XXXXXX&quot;&lt;br /&gt;# } &lt;/blockquote&gt; Hyper-Threading関係で、使うメソッドによって出てくる数字が物理コア数だったり論理コア数だったりするようなのでその辺は留意ですね。&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; こちらの記事はなかの人（&lt;a href=&quot;http://t.y13i.com/&quot; target=&quot;_blank&quot; title=&quot;ヤマグチ&quot;&gt;ヤマグチ&lt;/a&gt;）監修のもと掲載しています。&lt;br /&gt;元記事は、&lt;a href=&quot;http://t.y13i.com/post/84508548935/ruby-cpu&quot; target=&quot;_blank&quot; title=&quot;こちら&quot;&gt;こちら&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.cloudpack.jp/feeds/72051664816995460/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://blog.cloudpack.jp/2014/05/server-news-cpu-core.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/72051664816995460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/72051664816995460'/><link rel='alternate' type='text/html' href='http://blog.cloudpack.jp/2014/05/server-news-cpu-core.html' title='RubyでCPUのコア数を取得する'/><author><name>hashimoto</name><uri>http://www.blogger.com/profile/04747288723021078616</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3449707904234438373.post-252087869121237545</id><published>2014-05-05T09:00:00.000+09:00</published><updated>2014-05-05T09:00:01.681+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="news"/><title type='text'>cloudpackブログ週刊レビュー 2014/05/05</title><content type='html'>先週公開した記事は下記となります。&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;tr&gt;&lt;td width=&quot;90&quot;&gt;公開日&lt;/td&gt;&lt;td width=&quot;70&quot;&gt;作成者&lt;/td&gt;&lt;td&gt;タイトル&lt;/td&gt;&lt;/tr&gt;  &lt;tr&gt;&lt;td rowspan=&quot;4&quot;&gt;04月28日（月）&lt;/td&gt;&lt;td&gt;吉田真吾&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://bit.ly/clp_blog_20140428-1&quot; title=&quot;Amazon Redshift に COPY コマンドでCSVをインポートする&quot;&gt;Amazon Redshift に COPY コマンドでCSVをインポートする&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;がみさん&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://bit.ly/clp_blog_20140428-2&quot; title=&quot;Sensu 0.12 調査メモ No Items found.&quot;&gt;Sensu 0.12 調査メモ No Items found.&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;がみさん&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://bit.ly/clp_blog_20140428-3&quot; title=&quot;RDS Oracleは共有サーバ接続をサポートしているのか？&quot;&gt;RDS Oracleは共有サーバ接続をサポートしているのか？&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;がみさん&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://bit.ly/clp_blog_20140428-4&quot; title=&quot;sensu-clientのリポジトリをどのように管理しようかな(git remote編)&quot;&gt;sensu-clientのリポジトリをどのように管理しようかな(git remote編)&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;  &lt;tr&gt;&lt;td rowspan=&quot;2&quot;&gt;04月29日（火）&lt;/td&gt;&lt;td&gt;がみさん&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://bit.ly/clp_blog_20140429-2&quot; title=&quot;sensu-clientのリポジトリをどのように管理しようかな(Berkshelf失敗編)&quot;&gt;sensu-clientのリポジトリをどのように管理しようかな(Berkshelf失敗編)&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;比企宏之&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://bit.ly/clp_blog_20140429-3&quot; title=&quot;未経験者・経営者向けのクラウド勉強会　クラウドチャンプルー2014春に参加してきました&quot;&gt;未経験者・経営者向けのクラウド勉強会　クラウドチャンプルー2014春に参加してきました&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;  &lt;tr&gt;&lt;td rowspan=&quot;1&quot;&gt;04月30日（水）&lt;/td&gt;&lt;td&gt;比企宏之&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://bit.ly/clp_blog_20140430&quot; title=&quot;未経験者向けクラウド勉強会 Cloud on the BEACH2014 ＆ Cloud on the BEACH2014 勉強会の部に参加してきました&quot;&gt;未経験者向けクラウド勉強会 Cloud on the BEACH2014 ＆ Cloud on the BEACH2014 勉強会の部に参加してきました&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;  &lt;tr&gt;&lt;td rowspan=&quot;3&quot;&gt;05月01日（木）&lt;/td&gt;&lt;td&gt;がみさん&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://bit.ly/clp_blog_20140501-1&quot; title=&quot;一般ユーザでdockerコマンド利用時に dial unix /var/run/docker.sock: permission denied&quot;&gt;一般ユーザでdockerコマンド利用時に dial unix /var/run/docker.sock: permission denied&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ヤマグチ&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://bit.ly/clp_blog_20140501-2&quot; title=&quot;ApacheのアクセスログをRubyでJSONに変換してみる&quot;&gt;ApacheのアクセスログをRubyでJSONに変換してみる&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;がみさん&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://bit.ly/clp_blog_20140501-3&quot; title=&quot;test-kitchen内でattributeを設定する&quot;&gt;test-kitchen内でattributeを設定する&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;    &lt;/table&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.cloudpack.jp/feeds/252087869121237545/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://blog.cloudpack.jp/2014/05/news-cloudpack-review-20140505.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/252087869121237545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/252087869121237545'/><link rel='alternate' type='text/html' href='http://blog.cloudpack.jp/2014/05/news-cloudpack-review-20140505.html' title='cloudpackブログ週刊レビュー 2014/05/05'/><author><name>hashimoto</name><uri>http://www.blogger.com/profile/04747288723021078616</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3449707904234438373.post-2049673460832661574</id><published>2014-05-01T20:47:00.000+09:00</published><updated>2014-05-01T20:47:49.245+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="server"/><title type='text'>test-kitchen内でattributeを設定する</title><content type='html'> &lt;a href=&quot;http://www.cloudpack.jp/&quot; target=&quot;_blank&quot; title=&quot;cloudpack&quot;&gt;cloudpack&lt;/a&gt; の &lt;a href=&quot;https://www.facebook.com/kenkishigami&quot; target=&quot;_blank&quot; title=&quot;がみさん&quot;&gt;がみさん&lt;/a&gt;です。&lt;br /&gt;&lt;br /&gt;kitchen-dockerが大変便利です。&lt;br /&gt; &lt;h4&gt;.kitchen.yml&lt;/h4&gt;attributesはこのように書けば良いみたいです。&lt;br /&gt;優先順位(default, override等)については詳しくは&lt;a href=&quot;http://www.amazon.co.jp/Chef%E6%B4%BB%E7%94%A8%E3%82%AC%E3%82%A4%E3%83%89-%E3%82%B3%E3%83%BC%E3%83%89%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E6%A7%8B%E6%88%90%E7%AE%A1%E7%90%86-%E6%BE%A4%E7%99%BB%E4%BA%A8%E5%BD%A6/dp/4048919857&quot; title=&quot;Chef活用ガイド11.6章&quot; target=&quot;_blank&quot;&gt;Chef活用ガイド11.6章&lt;/a&gt;を。&lt;br /&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;&lt;br /&gt;driver:&lt;br /&gt;        name: docker&lt;br /&gt;driver_config:&lt;br /&gt;        require_chef_omnibus: true&lt;br /&gt;        binary: /usr/bin/docker&lt;br /&gt;        socket: tcp://localhost:4243&lt;br /&gt;provisioner:&lt;br /&gt;        name: chef_solo&lt;br /&gt;platforms:&lt;br /&gt;      - name: centos&lt;br /&gt;        driver_config:&lt;br /&gt;                image: centos:chef&lt;br /&gt;                platform: centos&lt;br /&gt;suites:&lt;br /&gt;      - name: sensu-client&lt;br /&gt;        run_list:&lt;br /&gt;                - sensu::client&lt;br /&gt;        attributes: { sensu: { rabbitmq: { user: &quot;****&quot; , password: &quot;****&quot;, host: &quot;****&quot;, port: &quot;****&quot; } } }&lt;br /&gt;&lt;/pre&gt; &lt;br /&gt;しかしこれkitchen testしたらdockerコンテナがsensu-serverにsensu-clientとして登録されてしまった。&lt;br /&gt;--why-runと異なり実際に動かすの忘れてました。&lt;br /&gt;テストのやり方を再考しなければ。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; こちらの記事はなかの人（&lt;a href=&quot;https://www.facebook.com/kenkishigami&quot; target=&quot;_blank&quot; title=&quot;がみさん&quot;&gt;がみさん&lt;/a&gt;）監修のもと掲載しています。&lt;br /&gt;元記事は、&lt;a href=&quot;http://buta9999.hatenablog.jp/entry/2014/05/01/012044&quot; target=&quot;_blank&quot; title=&quot;こちら&quot;&gt;こちら&lt;/a&gt; </content><link rel='replies' type='application/atom+xml' href='http://blog.cloudpack.jp/feeds/2049673460832661574/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://blog.cloudpack.jp/2014/05/server-news-kitchen-docker-attribute.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/2049673460832661574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/2049673460832661574'/><link rel='alternate' type='text/html' href='http://blog.cloudpack.jp/2014/05/server-news-kitchen-docker-attribute.html' title='test-kitchen内でattributeを設定する'/><author><name>hashimoto</name><uri>http://www.blogger.com/profile/04747288723021078616</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3449707904234438373.post-3499481776294463526</id><published>2014-05-01T20:39:00.001+09:00</published><updated>2014-05-01T20:39:42.668+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="server"/><title type='text'>ApacheのアクセスログをRubyでJSONに変換してみる</title><content type='html'>&lt;a href=&quot;http://www.cloudpack.jp/&quot; target=&quot;_blank&quot; title=&quot;cloudpack&quot;&gt;cloudpack&lt;/a&gt; の &lt;a href=&quot;http://t.y13i.com/&quot; target=&quot;_blank&quot; title=&quot;ヤマグチ&quot;&gt;ヤマグチ&lt;/a&gt;です。&lt;br /&gt;&lt;br /&gt;ApacheのアクセスログをElasticsearchに放り投げたいなどの時に、普通はFluentdを使うものだと思いますが中には既存のログを取り込みたい時などもあると思います。&lt;br /&gt;&lt;br /&gt;そんなわけでRubyでApacheのアクセスログをJSONに変換するスクリプトを作ってみました。&lt;br /&gt;&lt;br /&gt;想定するログのフォーマットはCombined形式の先頭にX-Forwarded-Forを追加した、以下のような形式です。&lt;br /&gt; &lt;blockquote&gt;LogFormat &quot;%{X-Forwarded-For}i  %h %l %u %t \&quot;%r\&quot; %&gt;s %b \&quot;%{Referer}i\&quot; \&quot;%{User-agent}i\&quot;&quot; combined &lt;/blockquote&gt; &lt;br /&gt;&lt;script src=&quot;https://gist.github.com/y13i/7144f5026989c5b8626d.js&quot;&gt;&lt;/script&gt; &lt;blockquote&gt;ruby access_log_to_json.rb -i some.log -o some.log.json&lt;/blockquote&gt; &lt;p&gt;のように使います。&lt;/p&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;123.45.67.89 10.20.30.40 - - [20/Apr/2014:03:15:35 +0900] &quot;GET /index.html HTTP/1.1&quot; 200 159 &quot;https://www.google.co.jp/&quot; &quot;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36&quot;&lt;br /&gt;123.45.67.89 10.20.30.40 - - [20/Apr/2014:03:15:40 +0900] &quot;GET /best_picture_ever.jpg HTTP/1.1&quot; 200 534000 &quot;http://www.exemple.com/index.html&quot; &quot;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36&quot;&lt;br /&gt;123.45.67.89 10.20.30.40 - - [20/Apr/2014:03:15:45 +0900] &quot;GET /greatest_music_ever.mp3 HTTP/1.1&quot; 200 19478980 &quot;http://www.exemple.com/index.html&quot; &quot;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36&quot;&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;のようなログが&lt;/p&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;{&quot;xforward_for&quot;:&quot;123.45.67.89&quot;,&quot;ip&quot;:&quot;10.20.30.40&quot;,&quot;remotelog&quot;:&quot;-&quot;,&quot;remoteuser&quot;:&quot;-&quot;,&quot;time&quot;:&quot;2014-04-20 03:15:35 +0900&quot;,&quot;request&quot;:&quot;GET /index.html HTTP/1.1&quot;,&quot;status&quot;:&quot;200&quot;,&quot;bytes&quot;:159,&quot;referer&quot;:&quot;https://www.google.co.jp/&quot;,&quot;ua&quot;:&quot;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36&quot;}&lt;br /&gt;{&quot;xforward_for&quot;:&quot;123.45.67.89&quot;,&quot;ip&quot;:&quot;10.20.30.40&quot;,&quot;remotelog&quot;:&quot;-&quot;,&quot;remoteuser&quot;:&quot;-&quot;,&quot;time&quot;:&quot;2014-04-20 03:15:40 +0900&quot;,&quot;request&quot;:&quot;GET /best_picture_ever.jpg HTTP/1.1&quot;,&quot;status&quot;:&quot;200&quot;,&quot;bytes&quot;:534000,&quot;referer&quot;:&quot;http://www.exemple.com/index.html&quot;,&quot;ua&quot;:&quot;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36&quot;}&lt;br /&gt;{&quot;xforward_for&quot;:&quot;123.45.67.89&quot;,&quot;ip&quot;:&quot;10.20.30.40&quot;,&quot;remotelog&quot;:&quot;-&quot;,&quot;remoteuser&quot;:&quot;-&quot;,&quot;time&quot;:&quot;2014-04-20 03:15:45 +0900&quot;,&quot;request&quot;:&quot;GET /greatest_music_ever.mp3 HTTP/1.1&quot;,&quot;status&quot;:&quot;200&quot;,&quot;bytes&quot;:19478980,&quot;referer&quot;:&quot;http://www.exemple.com/index.html&quot;,&quot;ua&quot;:&quot;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36&quot;}&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;のように変換されます。ポイントを何点か。&lt;/p&gt;&lt;br /&gt; &lt;p&gt;X-Forwarded-Forはプロキシ経由だと123.45.67.89, 234.56.78.90のようにカンマ空白区切りで2つのIPアドレスが記録されることがあります。その場合の判定処理を追加してます。&lt;/p&gt;&lt;br /&gt; &lt;p&gt;Apacheの時刻形式（[20/Apr/2014:03:13:24 +0900]などのような）はTime.parseでもDateTime.parseでもパースできず面倒くさいなあ…と思ったのですが日付の後の:を空白に換えたらあっさりパースできました。&lt;/p&gt;&lt;br /&gt; &lt;p&gt;また今回はJSONに変換していますが、ApacheLogクラスを使って他にも何か応用できるかもですね。&lt;/p&gt; &lt;p&gt;それはそうとStructちょう便利ですよね！！&lt;/p&gt;&lt;br /&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;SomeClass = Struct.new :some_attr, :another_attr do&lt;br /&gt;  def greeting&lt;br /&gt;    &quot;Hello!&quot;&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;foobar = SomeClass.new &quot;foo&quot;, &quot;bar&quot;&lt;br /&gt;foobar.some_attr # =&amp;gt; &quot;foo&quot;&lt;br /&gt;foobar.another_attr # =&amp;gt; &quot;bar&quot;&lt;br /&gt;foobar.greeting # =&amp;gt; &quot;Hello!&quot;&lt;br /&gt;&lt;/pre&gt;  &lt;br /&gt;&lt;br /&gt; こちらの記事はなかの人（&lt;a href=&quot;http://t.y13i.com/&quot; target=&quot;_blank&quot; title=&quot;ヤマグチ&quot;&gt;ヤマグチ&lt;/a&gt;）監修のもと掲載しています。&lt;br /&gt;元記事は、&lt;a href=&quot;http://t.y13i.com/post/84312824550/apache-ruby-json&quot; target=&quot;_blank&quot; title=&quot;こちら&quot;&gt;こちら&lt;/a&gt; </content><link rel='replies' type='application/atom+xml' href='http://blog.cloudpack.jp/feeds/3499481776294463526/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://blog.cloudpack.jp/2014/05/server-news-apache-ruby-json.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/3499481776294463526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/3499481776294463526'/><link rel='alternate' type='text/html' href='http://blog.cloudpack.jp/2014/05/server-news-apache-ruby-json.html' title='ApacheのアクセスログをRubyでJSONに変換してみる'/><author><name>hashimoto</name><uri>http://www.blogger.com/profile/04747288723021078616</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3449707904234438373.post-4465227663766344321</id><published>2014-05-01T20:25:00.001+09:00</published><updated>2014-05-01T20:25:15.540+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="server"/><title type='text'>一般ユーザでdockerコマンド利用時に dial unix /var/run/docker.sock: permission denied</title><content type='html'> &lt;a href=&quot;http://www.cloudpack.jp/&quot; target=&quot;_blank&quot; title=&quot;cloudpack&quot;&gt;cloudpack&lt;/a&gt; の &lt;a href=&quot;https://www.facebook.com/kenkishigami&quot; target=&quot;_blank&quot; title=&quot;がみさん&quot;&gt;がみさん&lt;/a&gt;です。&lt;br /&gt;&lt;br /&gt;こんばんは。久しぶりにdocker業をとその前に。 AmazonLinuxでdockerが動くのを思い出し、ちょうど利用したいケースがあったのですが一般ユーザでdockerコマンドを実行するとパーミッションが..&lt;br /&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;&lt;br /&gt;$ sudo yum install -y docker-io&lt;br /&gt;$ sudo service docker start&lt;br /&gt;$ docker info&lt;br /&gt;2014/04/29 13:17:22 dial unix /var/run/docker.sock: permission denied&lt;br /&gt;&lt;/pre&gt; dockerの起動オプションが-dのみ（デーモン起動）の場合は、socketモードでの起動になります。&lt;br /&gt;sockerfileのパーミッションをotherに読み取りとか設定するか、 ドキュメントの通りに、DockerのAPIをTCPで蹴れるように起動オプションを指定します。 &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;&lt;br /&gt;$ sudo vi /etc/sysconfig/docker&lt;br /&gt;#&lt;br /&gt;# Other arguments to pass to the docker daemon process&lt;br /&gt;# These will be parsed by the sysv initscript and appended&lt;br /&gt;# to the arguments list passed to docker -d&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;other_args=&quot;-H 127.0.0.1:4243&quot;&lt;br /&gt;&lt;/pre&gt; &lt;br /&gt;確認してみます。 &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;&lt;br /&gt;$ export DOCKER_HOST=tcp://127.0.0.1:4243&lt;br /&gt;$ docker info&lt;br /&gt;ontainers: 0&lt;br /&gt;Images: 4&lt;br /&gt;Driver: devicemapper&lt;br /&gt; Pool Name: docker-202:1-276039-pool&lt;br /&gt; Data file: /var/lib/docker/devicemapper/devicemapper/data&lt;br /&gt; Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata&lt;br /&gt; Data Space Used: 1001.7 Mb&lt;br /&gt; Data Space Total: 102400.0 Mb&lt;br /&gt; Metadata Space Used: 1.1 Mb&lt;br /&gt; Metadata Space Total: 2048.0 Mb&lt;br /&gt;&lt;/pre&gt; OKです。&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; こちらの記事はなかの人（&lt;a href=&quot;https://www.facebook.com/kenkishigami&quot; target=&quot;_blank&quot; title=&quot;がみさん&quot;&gt;がみさん&lt;/a&gt;）監修のもと掲載しています。&lt;br /&gt;元記事は、&lt;a href=&quot;http://buta9999.hatenablog.jp/entry/2014/04/29/223142&quot; target=&quot;_blank&quot; title=&quot;こちら&quot;&gt;こちら&lt;/a&gt; </content><link rel='replies' type='application/atom+xml' href='http://blog.cloudpack.jp/feeds/4465227663766344321/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://blog.cloudpack.jp/2014/05/server-news-docker-socket-permission.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/4465227663766344321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/4465227663766344321'/><link rel='alternate' type='text/html' href='http://blog.cloudpack.jp/2014/05/server-news-docker-socket-permission.html' title='一般ユーザでdockerコマンド利用時に dial unix /var/run/docker.sock: permission denied'/><author><name>hashimoto</name><uri>http://www.blogger.com/profile/04747288723021078616</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3449707904234438373.post-2734720629965548375</id><published>2014-04-30T09:00:00.000+09:00</published><updated>2014-04-30T09:00:03.806+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aws"/><title type='text'>未経験者向けクラウド勉強会 Cloud on the BEACH2014 ＆ Cloud on the BEACH2014 勉強会の部に参加してきました</title><content type='html'>  &lt;a href=&quot;http://www.cloudpack.jp/&quot; target=&quot;_blank&quot; title=&quot;cloudpack&quot;&gt;cloudpack&lt;/a&gt;大型サイズ新人の&lt;a href=&quot;https://www.facebook.com/hiroyuki.hiki&quot; target=&quot;_blank&quot; title=&quot;比企宏之&quot;&gt;比企宏之&lt;/a&gt;（&lt;a href=&quot;https://twitter.com/UniOce&quot; target=&quot;_blank&quot; title=&quot;@unioce&quot;&gt;@unioce&lt;/a&gt;）です。&lt;br /&gt;&lt;br /&gt;&lt;p&gt;未経験者向けクラウド勉強会 Cloud on the BEACH2014 ＆ Cloud on the BEACH2014 勉強会の部に参加してきました&lt;/p&gt;&lt;p&gt;※比企の参加していた系列で記載させてもらっています&lt;/p&gt; &lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;h3&gt;午前中は 経験者トラックに参加していました。&lt;/h3&gt;&lt;/p&gt;&lt;p&gt;&lt;h4&gt;10:30　セッション1&lt;b&gt; ユージー＆ヨーギーの AWS Summit 2014 San Francisco道中記&lt;/b&gt;　下門祐二・与儀 実彦 [株式会社レキサス]&lt;/h4&gt;&lt;/p&gt;&lt;p&gt;株式会社レキサスさんの下門祐二さんと与儀 実彦さんによるAWS Summit 2014のお話がありました。&lt;/p&gt;&lt;p&gt;下門さんと与儀さんも写真にあるように民族衣装でトークにおもむきましたが実はSan Franciscoでも同じ格好で町中をあるかれていたようで写真をがんがん取られていたようです。&lt;/p&gt;&lt;a href=&quot;http://cdn.aws-plus.com/images/blog/article/img_jawsug-okinawa-cloud-on-the-beach-2014_01.jpg&quot;&gt;&lt;img src=&quot;http://cdn.aws-plus.com/images/blog/article/img_jawsug-okinawa-cloud-on-the-beach-2014_01.jpg&quot; width=&quot;600&quot; height=&quot;450&quot; /&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;&lt;p&gt;&lt;h4&gt;11:10　セッション2 &lt;b&gt;大阪のイノベーションやコミュニティーファーストの今とこれから&lt;/b&gt;　本人  [イノベーションエッグ代表]&lt;/h4&gt;&lt;/p&gt;&lt;p&gt;前日の資料を元に当日に裏Verとしてアレンジさせていただきお話させてもらいました。裏話なのでここでは記載できませんが興味をもっていただいたようで多くの質問があがったのはうれしい限りです。&lt;/p&gt;&lt;br /&gt;&lt;p&gt;表Verはこちら&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.slideshare.net/hiroyukihiki/ss-33958399&quot;&gt;http://www.slideshare.net/hiroyukihiki/ss-33958399&lt;/a&gt;&lt;/p&gt; &lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;h3&gt;午後からは未経験者向けセッションに参加 &lt;/h3&gt;&lt;/p&gt;&lt;p&gt;&lt;h4&gt;13:00　セッション2 &lt;b&gt;AWSのサービス全部紹介！&lt;/b&gt;&lt;/h4&gt;&lt;/p&gt;&lt;p&gt;桶谷 拓也 様 [株式会社サーバーワークス]&lt;/p&gt;&lt;p&gt;AWSのすべてのサービスを話を50分で話しきるという荒技にチャレンジ。&lt;/p&gt;&lt;p&gt;話きりましたが、いつもクールに話し笑いはスベル桶谷さんが、息を切らしながら笑い一切なしでしゃべりきったのは&lt;/p&gt;&lt;p&gt;非常にレア？なセッションだったと思います。&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.slideshare.net/okeee0315/20140426-cloud-onthebeach2014&quot;&gt;http://www.slideshare.net/okeee0315/20140426-cloud-onthebeach2014&lt;/a&gt;&lt;/p&gt;&lt;a href=&quot;http://cdn.aws-plus.com/images/blog/article/img_jawsug-okinawa-cloud-on-the-beach-2014_03.jpg&quot;&gt;&lt;img src=&quot;http://cdn.aws-plus.com/images/blog/article/img_jawsug-okinawa-cloud-on-the-beach-2014_03.jpg&quot; width=&quot;600&quot; height=&quot;338&quot; /&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;&lt;p&gt;&lt;h4&gt;14:00　セッション3 &lt;b&gt;AWSのセキュリティについて&lt;/b&gt;&lt;/h4&gt;&lt;/p&gt;&lt;p&gt;堀内 康弘 様　[アマゾンデータサービスジャパン株式会社]&lt;/p&gt;&lt;p&gt;セキュリティの話をガッツりと話されてました。&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.slideshare.net/horiyasu/aws-33963790&quot;&gt;http://www.slideshare.net/horiyasu/aws-33963790&lt;/a&gt;&lt;/p&gt;&lt;a href=&quot;http://cdn.aws-plus.com/images/blog/article/img_jawsug-okinawa-cloud-on-the-beach-2014_04.jpg&quot;&gt;&lt;img src=&quot;http://cdn.aws-plus.com/images/blog/article/img_jawsug-okinawa-cloud-on-the-beach-2014_04.jpg&quot; width=&quot;600&quot; height=&quot;450&quot; /&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;&lt;p&gt;&lt;h4&gt;15:00　セッション4 &lt;b&gt;初めてのAWS Direct Connect&lt;/b&gt;&lt;/h4&gt;&lt;/p&gt;&lt;p&gt;Direct Connect関連では結構ガチな資料になったと自負してましたが(過去形汗)&lt;/p&gt;&lt;p&gt;よくよく考えるとAWSのサービスメインでの話をJAWS-UGでしゃべるのはなにげに始めてでしたw&lt;/p&gt;&lt;p&gt;※JAWS-UG以外ではよく話ているのですが汗&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.slideshare.net/hiroyukihiki/direct-connect-ver01&quot;&gt;http://www.slideshare.net/hiroyukihiki/direct-connect-ver01&lt;/a&gt;&lt;/p&gt; &lt;br /&gt;&lt;p&gt;&lt;h4&gt;15:15　セッション5 &lt;b&gt;AWSのセールスを始めて1年・・・をふりかえってみた |ω・`）チラ ～お客様（中小企業）へのご提案顛末記～&lt;/b&gt;&lt;/h4&gt;&lt;/p&gt;&lt;p&gt;杉谷　たかき 様 [インフォームシステム株式会社]&lt;/p&gt;&lt;p&gt;杉谷さんの浪速のAWS商いの話。&lt;/p&gt;&lt;p&gt;またAWSへの全面移行をしないと中小企業としては運用面で逆に大変との話。&lt;/p&gt;&lt;a href=&quot;http://cdn.aws-plus.com/images/blog/article/img_jawsug-okinawa-cloud-on-the-beach-2014_05.jpg&quot;&gt;&lt;img src=&quot;http://cdn.aws-plus.com/images/blog/article/img_jawsug-okinawa-cloud-on-the-beach-2014_05.jpg&quot; width=&quot;600&quot; height=&quot;450&quot; /&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;&lt;p&gt;&lt;h4&gt;この後にビーチパーティーもやりました。&lt;/h4&gt;&lt;/p&gt;&lt;a href=&quot;http://cdn.aws-plus.com/images/blog/article/img_jawsug-okinawa-cloud-on-the-beach-2014_06.jpg&quot;&gt;&lt;img src=&quot;http://cdn.aws-plus.com/images/blog/article/img_jawsug-okinawa-cloud-on-the-beach-2014_06.jpg&quot; width=&quot;600&quot; height=&quot;400&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;至る所で熱い会話が繰り広げられ(ここに書けないネタが多すぎますが、いずれしゃべれる時期が来ます)、自身も参加してよかったと思います。&lt;/p&gt;&lt;p&gt;次の参加の機会があれば是非よろしくお願いします〜&lt;/p&gt; &lt;br /&gt;&lt;br /&gt; こちらの記事はなかの人（&lt;a href=&quot;http://unioce.hatenadiary.jp/&quot; target=&quot;_blank&quot; title=&quot;比企宏之&quot;&gt;比企宏之&lt;/a&gt;）監修のもと掲載しています。&lt;br /&gt;元記事は、&lt;a href=&quot;http://unioce.hatenadiary.jp/entry/2014/04/29/%E6%9C%AA%E7%B5%8C%E9%A8%93%E8%80%85%E5%90%91%E3%81%91%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%E5%8B%89%E5%BC%B7%E4%BC%9A_Cloud_on_the_BEACH2014_%EF%BC%86_Cloud_on_the_BEACH2014_%E5%8B%89%E5%BC%B7%E4%BC%9A&quot; target=&quot;_blank&quot; title=&quot;こちら&quot;&gt;こちら&lt;/a&gt; </content><link rel='replies' type='application/atom+xml' href='http://blog.cloudpack.jp/feeds/2734720629965548375/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://blog.cloudpack.jp/2014/04/aws-news-jawsug-okinawa-cloud-on-the-beach-2014.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/2734720629965548375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/2734720629965548375'/><link rel='alternate' type='text/html' href='http://blog.cloudpack.jp/2014/04/aws-news-jawsug-okinawa-cloud-on-the-beach-2014.html' title='未経験者向けクラウド勉強会 Cloud on the BEACH2014 ＆ Cloud on the BEACH2014 勉強会の部に参加してきました'/><author><name>hashimoto</name><uri>http://www.blogger.com/profile/04747288723021078616</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3449707904234438373.post-223779780096178087</id><published>2014-04-29T18:09:00.001+09:00</published><updated>2014-04-29T18:09:03.343+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="news"/><title type='text'>未経験者・経営者向けのクラウド勉強会　クラウドチャンプルー2014春に参加してきました</title><content type='html'> &lt;a href=&quot;http://www.cloudpack.jp/&quot; target=&quot;_blank&quot; title=&quot;cloudpack&quot;&gt;cloudpack&lt;/a&gt;大型サイズ新人の&lt;a href=&quot;https://www.facebook.com/hiroyuki.hiki&quot; target=&quot;_blank&quot; title=&quot;比企宏之&quot;&gt;比企宏之&lt;/a&gt;（&lt;a href=&quot;https://twitter.com/UniOce&quot; target=&quot;_blank&quot; title=&quot;@unioce&quot;&gt;@unioce&lt;/a&gt;）です。&lt;br /&gt;&lt;br /&gt; &lt;p&gt;未経験者・経営者向けのクラウド勉強会　クラウドチャンプルー2014春に参加してきました。&lt;/p&gt;&lt;br /&gt;&lt;p&gt;アイレット株式会社(cloudpack)に入社して、初めての講師で&lt;/p&gt;&lt;p&gt;元々コミュニティでは裏方として動いていたので、あまり講師としては&lt;/p&gt;&lt;p&gt;JAWS-UGでは特にやってなかったのですが(他のコミュニティでは話していた)、&lt;/p&gt;&lt;p&gt;今回もJAWS-UGではなく、しかも沖縄でAWSの小島さんとハンズラボの長谷川さんに&lt;/p&gt;&lt;p&gt;挟まれてといきなりハードルの高いデビューとなりました汗&lt;/p&gt; &lt;br /&gt;&lt;p&gt;当日は地元のラジオのパーソナリティの本村 ひろみ様に司会をして頂き、&lt;/p&gt;&lt;p&gt;110名の方がエントリーで当日は平日のお昼から90名の方が参加される&lt;/p&gt;&lt;p&gt;大型勉強会となりました&lt;/p&gt;&lt;a href=&quot;http://cdn.aws-plus.com/images/blog/article/img_cloud-chanpuru-2014-spring_01.jpg&quot;&gt;&lt;img src=&quot;http://cdn.aws-plus.com/images/blog/article/img_cloud-chanpuru-2014-spring_01.jpg&quot; width=&quot;600&quot; height=&quot;399.75&quot; /&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;AWS小島さん セッション1&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;「クラウドが地方 IT 事業者の「強力なビジネスサポーター」となるには」&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;今回はAWSの話よりもクラウドとは？クラウドの流れがもたらす破壊的な流れを&lt;/p&gt;&lt;p&gt;地元四国(高知)に作られた本州からの連絡橋(瀬戸大橋など)に例えてはなされていました。&lt;/p&gt;&lt;p&gt;高速道路により地元で商売している方に勝機ができたのではなく、&lt;/p&gt;&lt;p&gt;大手の企業が地元に入ってきて地元の企業の商いを浸食した話をして危機感を持ってほしいとの想いでお話されてましたが沖縄には連絡橋がないのでうまく刺さらなかったかもと小島さん言われてました汗&lt;/p&gt;&lt;a href=&quot;http://cdn.aws-plus.com/images/blog/article/img_cloud-chanpuru-2014-spring_02.jpg&quot;&gt;&lt;img src=&quot;http://cdn.aws-plus.com/images/blog/article/img_cloud-chanpuru-2014-spring_02.jpg&quot; width=&quot;600&quot; height=&quot;399.75&quot; /&gt;&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;比企 セッション2&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;「大阪のイノベーションやコミュニティーファーストの今とこれから(表)」&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;cloudpackに入ってから初めて講師させて頂きました。詳しくは&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://www.slideshare.net/hiroyukihiki/ss-33958399&quot;&gt;http://www.slideshare.net/hiroyukihiki/ss-33958399&lt;/a&gt;&lt;/p&gt;&lt;p&gt;にスライドシェアとしてUPしていますが、コミュニティ関連の話をさせていただきました。&lt;/p&gt;&lt;p&gt;正直、聴く方の層がわからなかったのでどうなるかと内心ドキドキものでしたが&lt;/p&gt;&lt;p&gt;後から何人の方から一番良かったとお話して頂き、ある意味AWS関連で話をしなくて良かったと思いましたw&lt;/p&gt;&lt;a href=&quot;http://cdn.aws-plus.com/images/blog/article/img_cloud-chanpuru-2014-spring_03.jpg&quot;&gt;&lt;img src=&quot;http://cdn.aws-plus.com/images/blog/article/img_cloud-chanpuru-2014-spring_03.jpg&quot; width=&quot;600&quot; height=&quot;399.75&quot; /&gt;&lt;/a&gt;&lt;br /&gt;  &lt;br /&gt;&lt;h4&gt;ハンズラボ株式会社　長谷川さん セッション3&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;「「東急ハンズを支える技術」はＡＷＳか？」&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;AWSの話は前半なくてgoogle appsの導入の話などをしながらいつもの勢いのあるトークで東急ハンズのAWSの現状の話から今後の安価なタブレット(ChromeでHTML5)を利用しながらVPNなどを使わずにSSL(この前のOpenSSLの話も含め)でシステムを組んでいきたいとの話をされてました。&lt;/p&gt;&lt;a href=&quot;http://cdn.aws-plus.com/images/blog/article/img_cloud-chanpuru-2014-spring_04.jpg&quot;&gt;&lt;img src=&quot;http://cdn.aws-plus.com/images/blog/article/img_cloud-chanpuru-2014-spring_04.jpg&quot; width=&quot;600&quot; height=&quot;399.75&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;資料は展開されてませんが長谷川さんの熱いBLOGは下記&lt;/p&gt;&lt;ul style=&quot;border: 0px; font-family: &#39;Hiragino Kaku Gothic ProN&#39;, &#39;ヒラギノ角ゴ ProN W3&#39;, Meiryo; font-size: 14px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; list-style: none; color: rgb(118, 118, 118); line-height: 18px;&quot;&gt;&lt;li style=&quot;border-width: 1px 0px 0px; border-top-style: solid; border-color: rgba(0, 0, 0, 0.0980392); font-style: inherit; margin: 0px; outline: 0px; padding: 8px 0px 9px; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;color: #24890d;&quot;&gt;&lt;span style=&quot;font-style: inherit;&quot;&gt;&lt;a href=&quot;https://www.hands-lab.com/contents/?p=386 &quot;&gt;長谷川秀樹のIT酒場放浪記　第1回　よしおかひろたかさん&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;br /&gt;&lt;h4&gt;パネルディスカッション&lt;/h4&gt;&lt;p&gt;ファシリテーター：クラウドチャンプルー実行委員長 西島&lt;/p&gt;&lt;p&gt;スピーカー：長谷川様、小島様、比企様、常盤木様&lt;/p&gt;&lt;p&gt;での話になりましたが、実行委員長の西島さんが会場から質問を募ってやりたかったのですが沖縄の方”も”なかなか質問が出ななかったですね(関西でもなかなかでないです)&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.slideshare.net/KoichiroNishijima/2014-33961203&quot;&gt;http://www.slideshare.net/KoichiroNishijima/2014-33961203&lt;/a&gt;&lt;/p&gt;&lt;a href=&quot;http://cdn.aws-plus.com/images/blog/article/img_cloud-chanpuru-2014-spring_05.jpg&quot;&gt;&lt;img src=&quot;http://cdn.aws-plus.com/images/blog/article/img_cloud-chanpuru-2014-spring_05.jpg&quot; width=&quot;600&quot; height=&quot;399.75&quot; /&gt;&lt;/a&gt;&lt;br /&gt; &lt;p&gt;トータルで110名の方がエントリーされ、いきなりの大規模勉強会になり運営の西島さんもホッとしていましたが、今回いろんな方(特にレキサスさんのがんばりがすごい)が協力して頂き、運営側の沖縄に対する想いが一体になったイベントとなりました。&lt;/p&gt;&lt;a href=&quot;http://cdn.aws-plus.com/images/blog/article/img_cloud-chanpuru-2014-spring_06.jpg&quot;&gt;&lt;img src=&quot;http://cdn.aws-plus.com/images/blog/article/img_cloud-chanpuru-2014-spring_06.jpg&quot; width=&quot;600&quot; height=&quot;450&quot; /&gt;&lt;/a&gt;&lt;br /&gt; &lt;p&gt;自身もイノベーションエッグやJAWS-UGを運営していて継続するのが非常に大変なのはわかっていますが、今後も第二回・第三回と実施していただき、沖縄をクラウドで盛り上げていって頂ければと思います。&lt;/p&gt;&lt;p&gt; この後の沖縄でのイベントも沖縄の熱量を感じる会話を多くお聴きし、&lt;/p&gt;&lt;p&gt;今から沖縄は伸びるってのを感じた一日でした。&lt;/p&gt; &lt;br /&gt;&lt;br /&gt; こちらの記事はなかの人（&lt;a href=&quot;http://unioce.hatenadiary.jp/&quot; target=&quot;_blank&quot; title=&quot;比企宏之&quot;&gt;比企宏之&lt;/a&gt;）監修のもと掲載しています。&lt;br /&gt;元記事は、&lt;a href=&quot;http://unioce.hatenadiary.jp/entry/2014/04/29/%E6%9C%AA%E7%B5%8C%E9%A8%93%E8%80%85%E3%83%BB%E7%B5%8C%E5%96%B6%E8%80%85%E5%90%91%E3%81%91%E3%81%AE%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%E5%8B%89%E5%BC%B7%E4%BC%9A_%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89&quot; target=&quot;_blank&quot; title=&quot;こちら&quot;&gt;こちら&lt;/a&gt;   </content><link rel='replies' type='application/atom+xml' href='http://blog.cloudpack.jp/feeds/223779780096178087/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://blog.cloudpack.jp/2014/04/news-cloud-chanpuru-2014-spring.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/223779780096178087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/223779780096178087'/><link rel='alternate' type='text/html' href='http://blog.cloudpack.jp/2014/04/news-cloud-chanpuru-2014-spring.html' title='未経験者・経営者向けのクラウド勉強会　クラウドチャンプルー2014春に参加してきました'/><author><name>hashimoto</name><uri>http://www.blogger.com/profile/04747288723021078616</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3449707904234438373.post-3251549486049046615</id><published>2014-04-29T17:27:00.001+09:00</published><updated>2014-04-29T17:27:05.880+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="server"/><title type='text'>sensu-clientのリポジトリをどのように管理しようかな(Berkshelf失敗編)</title><content type='html'>  cloudpack の &lt;a href=&quot;https://www.facebook.com/kenkishigami&quot; target=&quot;_blank&quot; title=&quot;がみさん&quot;&gt;がみさん&lt;/a&gt;です。&lt;br /&gt;&lt;br /&gt;&lt;p&gt;こんばんは。&lt;a href=&quot;http://www.coteetciel.jp/&quot;&gt;Cote&amp;amp;Ciel&lt;/a&gt;のLaptop Rucksackを衝動買いした私です。財布のなかがすっからかん。&lt;/p&gt;&lt;p&gt;マカーのためにデザインされたバッグブランドらしいです。大変グレイトです。&lt;/p&gt;&lt;p&gt;非常に大きいバッグのため、私のように身長がt1.microな人が身につけると、デントロビウム状態になってしまいます。注意ですね。&lt;/p&gt; &lt;br /&gt;&lt;p&gt;さて&lt;a href=&quot;http://bit.ly/clp_blog_20140428-4&quot; title=&quot;sensu-clientのリポジトリをどのように管理しようかな(git remote編)&quot;&gt;前回&lt;/a&gt;の続きです。&lt;/p&gt;&lt;p&gt;sensu-clientのテンプレート用リポジトリと、各プロジェクトで利用するリポジトリはメンテナが違います。&lt;/p&gt;&lt;p&gt;テンプレート用リポジトリをプロジェクトリポジトリのメンテナが誤って操作しないように、&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://berkshelf.com/&quot;&gt;Berkshelf&lt;/a&gt;で管理してしまおうと思います。Berkshelfは依存するcookbooksを一元管理できる便利なツールです。&lt;/p&gt;&lt;p&gt;Chef版のBundlerだと思っています。&lt;/p&gt; &lt;br /&gt;&lt;p&gt;これを利用してテンプレートとプロジェクトリポジトリの境界線を引いてみようと思います。&lt;/p&gt;  &lt;br /&gt;&lt;h4&gt;プロジェクト用リポジトリのclone&lt;/h4&gt;   &lt;p&gt;すでにプロジェクト用のリポジトリは作成済みですのでcloneします&lt;/p&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;orenomac$ git clone &amp;lt;bareリポジトリ&amp;gt;&lt;/pre&gt;  &lt;br /&gt;&lt;h4&gt;BundlerでBerkshelfのインストール&lt;/h4&gt;   &lt;p&gt;berkshelfやknife-solo等のツールはなるべくシステムに依存しないようBundlerで管理します。&lt;/p&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;orenomac$ bundle init&lt;br /&gt;orenomac$ vi Gemfile&lt;br /&gt;source &amp;#34;https://rubygems.org&amp;#34;&lt;br /&gt;&lt;br /&gt;gem &amp;#39;berkshelf&amp;#39;&lt;br /&gt;gem &amp;#39;knife-solo&amp;#39;&lt;br /&gt;gem &amp;#39;serverspec&amp;#39;&lt;br /&gt;gem &amp;#39;test-kitchen&amp;#39;&lt;br /&gt;gem &amp;#39;kitchen-vagrant&amp;#39;&lt;br /&gt;gem &amp;#39;knife-solo_data_bag&amp;#39;&lt;br /&gt;gem &amp;#39;pry&amp;#39;&lt;br /&gt;orenomac$ bundle install --path vendor/bundle&lt;br /&gt;・・省略・・&lt;br /&gt;Your bundle is complete!&lt;br /&gt;It was installed into ./vendor/bundle&lt;br /&gt;Post-install message from knife-solo:&lt;br /&gt;Thanks for installing knife-solo!&lt;br /&gt;&lt;br /&gt;If you run into any issues please let us know at:&lt;br /&gt;  https://github.com/matschaffer/knife-solo/issues&lt;br /&gt;&lt;br /&gt;If you are upgrading knife-solo please uninstall any old versions by&lt;br /&gt;running `gem clean knife-solo` to avoid any errors.&lt;br /&gt;&lt;br /&gt;See http://bit.ly/CHEF-3255 for more information on the knife bug&lt;br /&gt;that causes this.&lt;/pre&gt;  &lt;br /&gt;&lt;h4&gt;chef solo初期化&lt;/h4&gt;   &lt;p&gt;自動的にBerkshelf用のファイルも作られるようです。ありがたや。(久しぶりにknife solo initした)&lt;/p&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;orenomac$ bundle exec knife solo init .&lt;br /&gt;Creating kitchen...&lt;br /&gt;Creating knife.rb in kitchen...&lt;br /&gt;Creating cupboards...&lt;br /&gt;Setting up Berkshelf...&lt;/pre&gt;  &lt;br /&gt;&lt;h4&gt;Berksfileの編集とcookbooksの導入&lt;/h4&gt;   &lt;p&gt;berkshelf 3以降からberks installがberks vendorへリプレースされたみたいです。&lt;/p&gt; &lt;p&gt;旧来の&lt;/p&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;berks install --path cookbooks&lt;/pre&gt;  &lt;p&gt;に慣れている人はご注意を。しっかしopscode-cookbooks/yumといい、 v3.0以上になると使い方がガラッと変わるのはなんなのか。。&lt;/p&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;orenomac$ vi Berksfile&lt;br /&gt;site :opscode&lt;br /&gt;&lt;br /&gt;cookbook &amp;#34;sensu&amp;#34;&lt;br /&gt;cookbook &amp;#34;selinux&amp;#34;&lt;br /&gt;cookbook &amp;#34;hostsfile&amp;#34;&lt;br /&gt;cookbook &amp;#34;build-essential&amp;#34;&lt;br /&gt;cookbook &amp;#34;&amp;lt;テンプレート用リポジトリ&amp;gt;&amp;#34;, git: &amp;#34;https://github.com/****/****.git&amp;#34;&lt;br /&gt;orenomac$ bundle exec berks vendor cookbooks&lt;br /&gt;Fetching &amp;#39;*******&amp;#39; from git@github.com:****/****.git (at master)&lt;br /&gt;The resource at &amp;#39;/var/folders/81/c4lywdsd7k5dsbqt9y35q8zm0000gn/T/d20140427-22194-x4okdh&amp;#39; does not appear to be a valid cookbook. Does it have a metadata.rb?&lt;/pre&gt;  &lt;p&gt;！？エラーが出ました。なぜでしょうか。&lt;/p&gt; &lt;p&gt;すっかり忘れていたのですがBerkshelfはcookbooksを一元管理するためのツールです。&lt;/p&gt; &lt;p&gt;今回Berkshelfで導入しようとしたテンプレート用リポジトリはcookbookだけではなくchef solo実行環境が整備された状態となっているリポジトリでした。&lt;/p&gt; &lt;p&gt;そのためberks vendorが失敗してしまったというバッドノウハウ。&lt;/p&gt; &lt;p&gt;粒度が大きすぎましたね。そりゃエラーでますわ(ﾉ∀`)ｱﾁｬｰ&lt;/p&gt; &lt;p&gt;今回は失敗に終わったので却下ですかね。&lt;/p&gt; &lt;br /&gt;&lt;h4&gt;その他気になる&lt;/h4&gt;   &lt;p&gt;なんだこれ気になる・・chefdkとか&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://www.getchef.com/downloads/chef-dk/mac/&quot;&gt;Chef Development Kit&lt;/a&gt;&lt;/p&gt; &lt;p&gt;サーバの構成管理をするのが目的で、達成するツールとしてchefを利用するだけなのにchefることが目的になりそう。おそろしや。&lt;/p&gt; &lt;p&gt;そろそろ川越シェフがchefのロゴだった時の画像を下さい！とか川越シェフがモコズキッチンでknife solo cook実行している画像を下さいとか&lt;/p&gt; &lt;p&gt;俺の川越フォルダが火を噴く日が来てくれると嬉しいです。&lt;/p&gt; &lt;p&gt;さてリポジトリ練り直しの相談するか・・&lt;/p&gt; &lt;br /&gt;&lt;br /&gt; こちらの記事はなかの人（&lt;a href=&quot;https://www.facebook.com/kenkishigami&quot; target=&quot;_blank&quot; title=&quot;がみさん&quot;&gt;がみさん&lt;/a&gt;）監修のもと掲載しています。&lt;br /&gt;元記事は、&lt;a href=&quot;http://buta9999.hatenablog.jp/entry/2014/04/27/215955&quot; target=&quot;_blank&quot; title=&quot;こちら&quot;&gt;こちら&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.cloudpack.jp/feeds/3251549486049046615/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://blog.cloudpack.jp/2014/04/server-news-sensu-client-berkshelf.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/3251549486049046615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/3251549486049046615'/><link rel='alternate' type='text/html' href='http://blog.cloudpack.jp/2014/04/server-news-sensu-client-berkshelf.html' title='sensu-clientのリポジトリをどのように管理しようかな(Berkshelf失敗編)'/><author><name>hashimoto</name><uri>http://www.blogger.com/profile/04747288723021078616</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3449707904234438373.post-928631050934179623</id><published>2014-04-28T16:42:00.001+09:00</published><updated>2014-04-28T16:42:44.525+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aws"/><title type='text'>sensu-clientのリポジトリをどのように管理しようかな(git remote編)</title><content type='html'> cloudpack の &lt;a href=&quot;https://www.facebook.com/kenkishigami&quot; target=&quot;_blank&quot; rel=&quot;fnofollow&quot; title=&quot;がみさん&quot;&gt;がみさん&lt;/a&gt;です。&lt;br /&gt;&lt;br /&gt;こんばんは。顔に疲労のでないイケメンになりたい私です。&lt;br /&gt;同僚の&lt;a href=&quot;http://t.y13i.com/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; title=&quot;t.y13i.com&quot;&gt;y13i&lt;/a&gt;サンがsensu-server環境を作ってくれたので、クライアント登録や通知のテストをしていきます。&lt;br /&gt;&lt;br /&gt;さてGithubに自前のsensu client監視用テンプレート（というかchefのリポジトリ）があったとします。&lt;br /&gt;これをベースに他のリポジトリに移植して利用したいときどうしましょうか。&lt;br /&gt;&lt;br /&gt;今回はgitのリモートリポジトリ登録を試したいと思います。&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;ベースリポジトリのcloneとリモートリポジトリの登録&lt;/h4&gt;ベースリポジトリにはbundler, berkshelf, sensu等, sensuをchef-soloで利用するための環境が入っています  &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;&lt;br /&gt;orenomac$ git clone &amp;lt;github_repository&amp;gt;&lt;br /&gt;orenomac$ git remote add ope-sensu-test &amp;lt;repository_URL&amp;gt;/sensu-test.git&lt;br /&gt;&lt;/pre&gt;   &lt;br /&gt;&lt;h4&gt;リモートリポジトリへの初回プッシュ&lt;/h4&gt;&lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;&lt;br /&gt;orenomac$ git push -u sensu-test master&lt;br /&gt;Counting objects: 356, done.&lt;br /&gt;Delta compression using up to 4 threads.&lt;br /&gt;Compressing objects: 100% (180/180), done.&lt;br /&gt;Writing objects: 100% (356/356), 43.50 KiB | 0 bytes/s, done.&lt;br /&gt;Total 356 (delta 148), reused 343 (delta 142)&lt;br /&gt;To sensu-test.git&lt;br /&gt; * [new branch]      master -&gt; master&lt;br /&gt;Branch master set up to track remote branch master from sensu-test.&lt;br /&gt;&lt;/pre&gt;  &lt;br /&gt;&lt;h4&gt;作業ブランチを登録したリモートリポジトリに変更&lt;/h4&gt;&lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;&lt;br /&gt;orenomac$ git checkout sensu-test/master&lt;br /&gt;&lt;/pre&gt;  &lt;br /&gt;&lt;h4&gt;対象ホストにchef-clientをインストール&lt;/h4&gt;node/.jsonが作られるので &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;&lt;br /&gt;orenomac$knife solo prepare -F ssh_config sensu-client1&lt;br /&gt;&lt;/pre&gt; &lt;br /&gt;&lt;h4&gt;作業&lt;/h4&gt;&lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;&lt;br /&gt;orenomac$ git branch sensu-client-test&lt;br /&gt;orenomac$ git checkout sensu-client-test&lt;br /&gt;Switched to branch &#39;sensu-client-test&#39;&lt;br /&gt;※作業ブランチで目的の作業を行う(httpd監視設定とか)&lt;br /&gt;orenomac$ git commit&lt;br /&gt;[sensu-client-test 6d75492] テスト用クライアントの登録&lt;br /&gt; 2 files changed, 3 insertions(+), 2 deletions(-)&lt;br /&gt; create mode 100644 nodes/sensu-client1.json&lt;br /&gt;orenomac$ git push sensu-test sensu-client-test&lt;br /&gt;&lt;/pre&gt; &lt;br /&gt;&lt;h4&gt;適用&lt;/h4&gt;今回はsensu-client用ノードにsensu-clientをインストールして、rabbitmqへポーリングするだけのrecipeを適用しています。&lt;br /&gt;&lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;&lt;br /&gt;orenomac$ bundle exec knife solo cook -F ssh_config sensu-client1&lt;br /&gt;Running Chef on sensu-client1...&lt;br /&gt;Checking Chef version...&lt;br /&gt;Installing Berkshelf cookbooks to &#39;cookbooks&#39;...&lt;br /&gt;・&lt;br /&gt;・&lt;br /&gt;省&lt;br /&gt;略&lt;br /&gt;・&lt;br /&gt;・&lt;br /&gt;&lt;br /&gt;Recipe: &amp;lt;Dynamically Defined Resource&amp;gt;&lt;br /&gt;  * service[sensu-client] action restart&lt;br /&gt;    - restart service service[sensu-client]&lt;br /&gt;&lt;br /&gt;Running handlers:&lt;br /&gt;Running handlers complete&lt;br /&gt;&lt;br /&gt;Chef Client finished, 31/54 resources updated in 63.580449321 seconds&lt;br /&gt;&lt;/pre&gt;無事登録出来ました。&lt;a href=&quot;http://blog.cloudpack.jp/2014/04/server-news-sensu-dashboard-server.html&quot; title=&quot;Sensu 0.12 調査メモ No Items found.&quot;&gt;（なんで自分で作ったらできなかったのだろうか）&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://cdn.aws-plus.com/images/blog/article/img_sensu-client-git-remote_01.png&quot;&gt;&lt;img src=&quot;http://cdn.aws-plus.com/images/blog/article/img_sensu-client-git-remote_01.png&quot; height=&quot;93&quot;  width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;br /&gt;  &lt;br /&gt;&lt;h4&gt;作業ブランチをremote/masterブランチにマージ&lt;/h4&gt;書いたrecipe適用がOKだったらmasterへマージします。 NGだったら作業ブランチを破棄します。 &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;&lt;br /&gt;orenomac$ git checkout master&lt;br /&gt;orenomac$ git merge sensu-test/sensu-client-test&lt;br /&gt;Updating d210296..6d75492&lt;br /&gt;Fast-forward&lt;br /&gt; nodes/sensu-client1.json                             | 1 +&lt;br /&gt;orenomac$ git push sensu-test master&lt;br /&gt;orenomac$ git -d sensu-test sensu-client-test&lt;br /&gt;orenomac$ git push --delete sensu-test sensu-client-test&lt;br /&gt;&lt;/pre&gt;以上で作業完了です。これは自動化できますね〜。あとテスト。&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;所感&lt;/h4&gt;origin/master残ったままなので確実にoriginへpushしてしまいそうでむちゃくちゃ怖い。エイリアス変えてしまえばよいのかな？&lt;br /&gt;テンプレートはBerkshelfで/vendor/cookbooks/に拾ってきて&lt;br /&gt;override attributeで対処したほうがorigin/masterにプッシュすることないからいいかも。&lt;br /&gt;&lt;br /&gt;Git力が足りない。&lt;br /&gt;&lt;br /&gt;次はいつもつかってるBerkshelfで試したいと思います。&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt; こちらの記事はなかの人（&lt;a href=&quot;https://www.facebook.com/kenkishigami&quot; target=&quot;_blank&quot; rel=&quot;fnofollow&quot; title=&quot;がみさん&quot;&gt;がみさん&lt;/a&gt;）監修のもと掲載しています。&lt;br /&gt;元記事は、&lt;a href=&quot;http://buta9999.hatenablog.jp/entry/2014/04/27/005604&quot; target=&quot;_blank&quot; title=&quot;こちら&quot;&gt;こちら&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.cloudpack.jp/feeds/928631050934179623/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://blog.cloudpack.jp/2014/04/aws-news-sensu-client-git-remote.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/928631050934179623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/928631050934179623'/><link rel='alternate' type='text/html' href='http://blog.cloudpack.jp/2014/04/aws-news-sensu-client-git-remote.html' title='sensu-clientのリポジトリをどのように管理しようかな(git remote編)'/><author><name>hashimoto</name><uri>http://www.blogger.com/profile/04747288723021078616</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3449707904234438373.post-3812767478847104117</id><published>2014-04-28T13:00:00.000+09:00</published><updated>2014-04-28T13:00:08.836+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aws"/><title type='text'>RDS Oracleは共有サーバ接続をサポートしているのか？</title><content type='html'>  cloudpack の &lt;a href=&quot;https://www.facebook.com/kenkishigami&quot; target=&quot;_blank&quot; rel=&quot;fnofollow&quot; title=&quot;がみさん&quot;&gt;がみさん&lt;/a&gt;です。&lt;br /&gt;&lt;br /&gt;どうもこんにちは私です。 嫌いなものはラッチです。&lt;br /&gt;&lt;br /&gt;好きなOracleのサーバプロセスはアーカイバです。&lt;br /&gt;&lt;br /&gt;RDS Oracleへの接続方式は、専用サーバ接続が標準です。 共有サーバ接続はサポートされているのか調べてみました。&lt;br /&gt;&lt;br /&gt;古いフォーラムですが、サポートしてますよとのことです。&lt;br /&gt;&lt;br /&gt;https://forums.aws.amazon.com/thread.jspa?messageID=251671&lt;br /&gt;&lt;br /&gt;RDSのパラメータグループで変更可能でしょうね。&lt;br /&gt;&lt;br /&gt;しかしこれに切り替えるとソート領域がSGAになるんで今度はSGAが圧迫しそうだな・・・&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; こちらの記事はなかの人（&lt;a href=&quot;https://www.facebook.com/kenkishigami&quot; target=&quot;_blank&quot; rel=&quot;fnofollow&quot; title=&quot;がみさん&quot;&gt;がみさん&lt;/a&gt;）監修のもと掲載しています。&lt;br /&gt;元記事は、&lt;a href=&quot;http://buta9999.hatenablog.jp/entry/2014/04/26/010112&quot; target=&quot;_blank&quot; title=&quot;こちら&quot;&gt;こちら&lt;/a&gt; </content><link rel='replies' type='application/atom+xml' href='http://blog.cloudpack.jp/feeds/3812767478847104117/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://blog.cloudpack.jp/2014/04/aws-news-rds-oracle-support.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/3812767478847104117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/3812767478847104117'/><link rel='alternate' type='text/html' href='http://blog.cloudpack.jp/2014/04/aws-news-rds-oracle-support.html' title='RDS Oracleは共有サーバ接続をサポートしているのか？'/><author><name>hashimoto</name><uri>http://www.blogger.com/profile/04747288723021078616</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3449707904234438373.post-920560978017697892</id><published>2014-04-28T10:00:00.000+09:00</published><updated>2014-04-28T10:00:00.375+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="server"/><title type='text'>Sensu 0.12 調査メモ No Items found.</title><content type='html'> cloudpack の &lt;a href=&quot;https://www.facebook.com/kenkishigami&quot; target=&quot;_blank&quot; rel=&quot;fnofollow&quot; title=&quot;がみさん&quot;&gt;がみさん&lt;/a&gt;です。&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;盛大に失敗した履歴です。&lt;/h3&gt; &lt;p&gt;sensu-serverとclientの環境を整えたはずなのに、&lt;/p&gt; &lt;p&gt;sensu-dashboardからclientが表示されない問題を抱えています。&lt;/p&gt; &lt;p&gt;sensu-server.logを眺めているとsensu-serverがrabbitmqからデータを取得していないように見えます。&lt;/p&gt; &lt;p&gt;さて以下より記録です。&lt;/p&gt; &lt;br /&gt;&lt;br /&gt;&lt;h3&gt;sensu-server用ノード&lt;/h3&gt; &lt;ul&gt;&lt;li&gt;OS： CentOS6.5&lt;/li&gt;&lt;li&gt;役割：sensu-server/sensu-api/sensu-dashboard/rabbitmq/redis&lt;/li&gt;&lt;li&gt;IP: 10.0.0.150&lt;/li&gt;&lt;li&gt;sensuのバージョン：sensu-0.12.3-1.x86_64&lt;/li&gt;&lt;/ul&gt; &lt;br /&gt;&lt;br /&gt;&lt;h3&gt;sensu-client用ノード&lt;/h3&gt; &lt;ul&gt;&lt;li&gt;OS： CentOS6.5&lt;/li&gt;&lt;li&gt;役割： sensu-client&lt;/li&gt;&lt;li&gt;IP: 10.0.0.163&lt;/li&gt;&lt;li&gt;sensuのバージョン：sensu-0.12.3-1.x86_64&lt;/li&gt;&lt;/ul&gt;  &lt;br /&gt;&lt;h3&gt;apiコール結果&lt;/h3&gt; &lt;p&gt;infoは取得できるがclientsはぬるぽ&lt;/p&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;$ curl http://localhost:4567/info&lt;br /&gt;{&amp;#34;sensu&amp;#34;:{&amp;#34;version&amp;#34;:&amp;#34;0.12.3&amp;#34;},&amp;#34;rabbitmq&amp;#34;:{&amp;#34;keepalives&amp;#34;:{&amp;#34;messages&amp;#34;:0,&amp;#34;consumers&amp;#34;:1},&amp;#34;results&amp;#34;:{&amp;#34;messages&amp;#34;:0,&amp;#34;consumers&amp;#34;:1},&amp;#34;connected&amp;#34;:true},&amp;#34;redis&amp;#34;:{&amp;#34;connected&amp;#34;:true}}&lt;br /&gt;# curl http://localhost:4567/clients&lt;br /&gt;[]←これが原因。なぜ空なのか&lt;/pre&gt;  &lt;p&gt;dashboardから確認すると, itemが0に...&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://cdn.aws-plus.com/images/blog/article/img_sensu-dashboard-server_01.png&quot;&gt;&lt;img src=&quot;http://cdn.aws-plus.com/images/blog/article/img_sensu-dashboard-server_01.png&quot; width=&quot;600&quot; height=&quot;466&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p&gt;なぜsensu-clientがsensu-serverに登録されていないように見えるのかを調査してみました。&lt;/p&gt; &lt;br /&gt;&lt;h3&gt;Sensuのアーキテクチャ&lt;/h3&gt; &lt;p&gt;sens-clientはrabbitmqと会話します。&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://cdn.aws-plus.com/images/blog/article/img_sensu-dashboard-server_02.png&quot;&gt;&lt;img src=&quot;http://cdn.aws-plus.com/images/blog/article/img_sensu-dashboard-server_02.png&quot; width=&quot;600&quot; height=&quot;560&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt; &lt;ul&gt;&lt;li&gt;sensu-clientがrabbitmqへアクセスできない？&lt;/li&gt;&lt;li&gt;エンドポイント名称は正しいか&lt;/li&gt;&lt;li&gt;rabbitmqポート(デフォルト5672)は開いてるか&lt;/li&gt;&lt;/ul&gt;  &lt;br /&gt;&lt;h3&gt;rabbitmqのWebUI&lt;/h3&gt; &lt;p&gt;rabbitmqはCLIやWebUIがプラグインで提供されています。&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.rabbitmq.com/management.html&quot;&gt;rabbitmq_management&lt;/a&gt;というプラグインを有効にしてキューの状態を確認してみます。&lt;/p&gt; &lt;ul&gt;&lt;li&gt;rabbitmq_managementの有効化&lt;/li&gt;&lt;/ul&gt;  &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;# rabbitmq-plugins list&lt;br /&gt;[e] amqp_client                       3.1.5&lt;br /&gt;[ ] cowboy                            0.5.0-rmq3.1.5-git4b93c2d&lt;br /&gt;[ ] eldap                             3.1.5-gite309de4&lt;br /&gt;[e] mochiweb                          2.7.0-rmq3.1.5-git680dba8&lt;br /&gt;[ ] rabbitmq_amqp1_0                  3.1.5&lt;br /&gt;[ ] rabbitmq_auth_backend_ldap        3.1.5&lt;br /&gt;[ ] rabbitmq_auth_mechanism_ssl       3.1.5&lt;br /&gt;[ ] rabbitmq_consistent_hash_exchange 3.1.5&lt;br /&gt;[ ] rabbitmq_federation               3.1.5&lt;br /&gt;[ ] rabbitmq_federation_management    3.1.5&lt;br /&gt;[ ] rabbitmq_jsonrpc                  3.1.5&lt;br /&gt;[ ] rabbitmq_jsonrpc_channel          3.1.5&lt;br /&gt;[ ] rabbitmq_jsonrpc_channel_examples 3.1.5&lt;br /&gt;[E] rabbitmq_management               3.1.5&lt;br /&gt;[e] rabbitmq_management_agent         3.1.5&lt;br /&gt;[E] rabbitmq_management_visualiser    3.1.5&lt;br /&gt;[ ] rabbitmq_mqtt                     3.1.5&lt;br /&gt;[ ] rabbitmq_shovel                   3.1.5&lt;br /&gt;[ ] rabbitmq_shovel_management        3.1.5&lt;br /&gt;[ ] rabbitmq_stomp                    3.1.5&lt;br /&gt;[ ] rabbitmq_tracing                  3.1.5&lt;br /&gt;[e] rabbitmq_web_dispatch             3.1.5&lt;br /&gt;[ ] rabbitmq_web_stomp                3.1.5&lt;br /&gt;[ ] rabbitmq_web_stomp_examples       3.1.5&lt;br /&gt;[ ] rfc4627_jsonrpc                   3.1.5-git5e67120&lt;br /&gt;[ ] sockjs                            0.3.4-rmq3.1.5-git3132eb9&lt;br /&gt;[e] webmachine                        1.10.3-rmq3.1.5-gite9359c7&lt;br /&gt;# rabbitmq-plugins enable rabbitmq_mamagement&lt;/pre&gt;  &lt;ul&gt;&lt;li&gt;rabbitmq_managementへアクセス&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;guestでログインします（本番運用するときは消しましょう）&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://cdn.aws-plus.com/images/blog/article/img_sensu-dashboard-server_03.png&quot;&gt;&lt;img src=&quot;http://cdn.aws-plus.com/images/blog/article/img_sensu-dashboard-server_03.png&quot; width=&quot;600&quot; height=&quot;189&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p&gt;rabbitmqの状態を確認できます。&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://cdn.aws-plus.com/images/blog/article/img_sensu-dashboard-server_04.png&quot;&gt;&lt;img src=&quot;http://cdn.aws-plus.com/images/blog/article/img_sensu-dashboard-server_04.png&quot; width=&quot;600&quot; height=&quot;509&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p&gt;rabbitmqに接続できているノード一覧を確認します。&lt;/p&gt; &lt;p&gt;どうやらrabbitmqにsensu-clientのノードは疎通できているみたいです。&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://cdn.aws-plus.com/images/blog/article/img_sensu-dashboard-server_05.png&quot;&gt;&lt;img src=&quot;http://cdn.aws-plus.com/images/blog/article/img_sensu-dashboard-server_05.png&quot; width=&quot;600&quot; height=&quot;338&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p&gt;sensu-dashboardが怪しいのかな？&lt;/p&gt; &lt;p&gt;そうだsensu-dashboardを捨てて他のコンソールを使ってみようヽ(´ー｀)ノ&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://github.com/sensu/sensu-admin&quot;&gt;sensu-admin&lt;/a&gt;を導入します。&lt;/p&gt; &lt;br /&gt;&lt;h3&gt;sensu-adminのインストール&lt;/h3&gt; &lt;p&gt;sensu-adminのcookbooksは公開されていますがdebianプラットフォーム向けのため手動でインストールします。&lt;/p&gt; &lt;ul&gt;&lt;li&gt;rbenvとruby-buildのインストール&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;Amazon Linuxなら標準でruby 2.0がインストールされているけど今回はCentOSで全部入りsensu-serverを稼働させてしまったので(&#39;A`)&lt;/p&gt; &lt;p&gt;rbenv+ruby-buildを導入します。&lt;/p&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv&lt;br /&gt;$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build&lt;br /&gt;$ rbenv install -l |grep 2.1&lt;br /&gt;$ rbenv install 2.1.1&lt;br /&gt;$ gem install bundler --no-ri --no-rdoc&lt;br /&gt;Successfully installed bundler-1.6.2&lt;br /&gt;1 gem installed&lt;/pre&gt;  &lt;ul&gt;&lt;li&gt;sensu-adminの導入&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;sensu-adminを導入し、簡易Webサーバモードで起動してみます。&lt;/p&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;$ sudo yum install -y sqlite3-devel&lt;br /&gt;$ git clone https://github.com/sensu/sensu-admin.git&lt;br /&gt;Initialized empty Git repository in /opt/sensu-admin/.git/&lt;br /&gt;remote: Reusing existing pack: 2754, done.&lt;br /&gt;remote: Total 2754 (delta 0), reused 0 (delta 0)&lt;br /&gt;Receiving objects: 100% (2754/2754), 876.71 KiB | 314 KiB/s, done.&lt;br /&gt;Resolving deltas: 100% (1143/1143), done.&lt;br /&gt;$ bundle exec rake db:migrate&lt;br /&gt;$ bundle exec rake db:seed&lt;br /&gt;$ bundle exec rails server&lt;br /&gt;$ bundle exec rails server&lt;br /&gt;=&amp;gt; Booting Thin&lt;br /&gt;=&amp;gt; Rails 3.2.14 application starting in development on http://0.0.0.0:3000&lt;br /&gt;=&amp;gt; Call with -d to detach&lt;br /&gt;=&amp;gt; Ctrl-C to shutdown server&lt;br /&gt;&amp;gt;&amp;gt; Thin web server (v1.5.1 codename Straight Razor)&lt;br /&gt;&amp;gt;&amp;gt; Maximum connections set to 1024&lt;br /&gt;&amp;gt;&amp;gt; Listening on 0.0.0.0:3000, CTRL+C to stop&lt;/pre&gt;  &lt;p&gt;ブラウザから&lt;a href=&quot;http://&amp;lt;sensu-admin&quot;&gt;http://&amp;lt;sensu-admin&lt;/a&gt;&gt;:3000へアクセスすると、ログイン画面が表示されています。&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://cdn.aws-plus.com/images/blog/article/img_sensu-dashboard-server_06.png&quot;&gt;&lt;img src=&quot;http://cdn.aws-plus.com/images/blog/article/img_sensu-dashboard-server_06.png&quot; width=&quot;600&quot; height=&quot;277&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p&gt;だめだったorz.......&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://cdn.aws-plus.com/images/blog/article/img_sensu-dashboard-server_07.png&quot;&gt;&lt;img src=&quot;http://cdn.aws-plus.com/images/blog/article/img_sensu-dashboard-server_07.png&quot; width=&quot;600&quot; height=&quot;269&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p&gt;以下コンフィグとログ&lt;/p&gt; &lt;hr /&gt; &lt;br /&gt;&lt;h3&gt;共通&lt;/h3&gt; &lt;ul&gt;&lt;li&gt;/etc/sensu/config.json&lt;/li&gt;&lt;/ul&gt;  &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;{&lt;br /&gt;  &amp;#34;rabbitmq&amp;#34;: {&lt;br /&gt;    &amp;#34;host&amp;#34;: &amp;#34;10.0.0.150&amp;#34;,&lt;br /&gt;    &amp;#34;port&amp;#34;: 5672,&lt;br /&gt;    &amp;#34;vhost&amp;#34;: &amp;#34;/sensu&amp;#34;,&lt;br /&gt;    &amp;#34;user&amp;#34;: &amp;#34;sensu&amp;#34;,&lt;br /&gt;    &amp;#34;password&amp;#34;: &amp;#34;oresensu&amp;#34;&lt;br /&gt;  },&lt;br /&gt;  &amp;#34;redis&amp;#34;: {&lt;br /&gt;    &amp;#34;host&amp;#34;: &amp;#34;10.0.0.150&amp;#34;,&lt;br /&gt;    &amp;#34;port&amp;#34;: 6379&lt;br /&gt;  },&lt;br /&gt;  &amp;#34;api&amp;#34;: {&lt;br /&gt;    &amp;#34;host&amp;#34;: &amp;#34;10.0.0.150&amp;#34;,&lt;br /&gt;    &amp;#34;bind&amp;#34;: &amp;#34;0.0.0.0&amp;#34;,&lt;br /&gt;    &amp;#34;port&amp;#34;: 4567&lt;br /&gt;  },&lt;br /&gt;  &amp;#34;dashboard&amp;#34;: {&lt;br /&gt;    &amp;#34;bind&amp;#34;: &amp;#34;0.0.0.0&amp;#34;,&lt;br /&gt;    &amp;#34;port&amp;#34;: 8080,&lt;br /&gt;    &amp;#34;user&amp;#34;: &amp;#34;admin&amp;#34;,&lt;br /&gt;    &amp;#34;password&amp;#34;: &amp;#34;ikemen&amp;#34;&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;  &lt;ul&gt;&lt;li&gt;/etc/sensu/sensu-server.log&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;とり忘れてた&lt;/p&gt; &lt;hr /&gt; &lt;br /&gt;&lt;h3&gt;client側(10.0.0.163)&lt;/h3&gt; &lt;ul&gt;&lt;li&gt;/etc/sensu/conf.d/client.json&lt;/li&gt;&lt;/ul&gt;  &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;{&lt;br /&gt;  &amp;#34;client&amp;#34;: {&lt;br /&gt;    &amp;#34;name&amp;#34;: &amp;#34;orenoec2&amp;#34;,&lt;br /&gt;    &amp;#34;address&amp;#34;: &amp;#34;10.0.0.163&amp;#34;,&lt;br /&gt;    &amp;#34;subscriptions&amp;#34;: [&lt;br /&gt;      &amp;#34;all&amp;#34;&lt;br /&gt;    ]&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;  &lt;ul&gt;&lt;li&gt;/var/log/sensu/sensu-client.log&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;起動時のログ&lt;/p&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;{&amp;#34;timestamp&amp;#34;:&amp;#34;2014-04-25T22:29:13.529970+0900&amp;#34;,&amp;#34;level&amp;#34;:&amp;#34;debug&amp;#34;,&amp;#34;message&amp;#34;:&amp;#34;loading config file&amp;#34;,&amp;#34;config_file&amp;#34;:&amp;#34;/etc/sensu/config.json&amp;#34;}&lt;br /&gt;{&amp;#34;timestamp&amp;#34;:&amp;#34;2014-04-25T22:29:13.530580+0900&amp;#34;,&amp;#34;level&amp;#34;:&amp;#34;debug&amp;#34;,&amp;#34;message&amp;#34;:&amp;#34;loadin&lt;br /&gt;g config file&amp;#34;,&amp;#34;config_file&amp;#34;:&amp;#34;/etc/sensu/conf.d/client.json&amp;#34;}&lt;br /&gt;{&amp;#34;timestamp&amp;#34;:&amp;#34;2014-04-25T22:29:13.531098+0900&amp;#34;,&amp;#34;level&amp;#34;:&amp;#34;warn&amp;#34;,&amp;#34;message&amp;#34;:&amp;#34;config&lt;br /&gt;file applied changes&amp;#34;,&amp;#34;config_file&amp;#34;:&amp;#34;/etc/sensu/conf.d/client.json&amp;#34;,&amp;#34;changes&amp;#34;:{&amp;#34;client&amp;#34;:[null,{&amp;#34;name&amp;#34;:&amp;#34;orenoec2&amp;#34;,&amp;#34;address&amp;#34;:&amp;#34;10.0.0.163&amp;#34;,&amp;#34;subscriptions&amp;#34;:[&amp;#34;all&amp;#34;]}&lt;br /&gt;]}}&lt;br /&gt;{&amp;#34;timestamp&amp;#34;:&amp;#34;2014-04-25T22:29:13.531264+0900&amp;#34;,&amp;#34;level&amp;#34;:&amp;#34;debug&amp;#34;,&amp;#34;message&amp;#34;:&amp;#34;loadin&lt;br /&gt;g config file&amp;#34;,&amp;#34;config_file&amp;#34;:&amp;#34;/etc/sensu/conf.d/checks/cpu.json&amp;#34;}&lt;br /&gt;{&amp;#34;timestamp&amp;#34;:&amp;#34;2014-04-25T22:29:13.531616+0900&amp;#34;,&amp;#34;level&amp;#34;:&amp;#34;warn&amp;#34;,&amp;#34;message&amp;#34;:&amp;#34;config&lt;br /&gt;file applied changes&amp;#34;,&amp;#34;config_file&amp;#34;:&amp;#34;/etc/sensu/conf.d/checks/cpu.json&amp;#34;,&amp;#34;changes&lt;br /&gt;&amp;#34;:{&amp;#34;checks&amp;#34;:{&amp;#34;cpu&amp;#34;:[null,{&amp;#34;command&amp;#34;:&amp;#34;check-cpu.rb -w 80 -c 90&amp;#34;,&amp;#34;standalone&amp;#34;:true&lt;br /&gt;,&amp;#34;handlers&amp;#34;:[&amp;#34;mailer-ses&amp;#34;],&amp;#34;interval&amp;#34;:30,&amp;#34;occurrences&amp;#34;:3}]}}}&lt;br /&gt;{&amp;#34;timestamp&amp;#34;:&amp;#34;2014-04-25T22:29:13.531885+0900&amp;#34;,&amp;#34;level&amp;#34;:&amp;#34;debug&amp;#34;,&amp;#34;message&amp;#34;:&amp;#34;valida&lt;br /&gt;ting settings&amp;#34;}&lt;br /&gt;{&amp;#34;timestamp&amp;#34;:&amp;#34;2014-04-25T22:29:13.532255+0900&amp;#34;,&amp;#34;level&amp;#34;:&amp;#34;debug&amp;#34;,&amp;#34;message&amp;#34;:&amp;#34;settin&lt;br /&gt;gs are valid&amp;#34;}&lt;br /&gt;{&amp;#34;timestamp&amp;#34;:&amp;#34;2014-04-25T22:29:13.545915+0900&amp;#34;,&amp;#34;level&amp;#34;:&amp;#34;info&amp;#34;,&amp;#34;message&amp;#34;:&amp;#34;loaded&lt;br /&gt;extension&amp;#34;,&amp;#34;type&amp;#34;:&amp;#34;mutator&amp;#34;,&amp;#34;name&amp;#34;:&amp;#34;only_check_output&amp;#34;,&amp;#34;description&amp;#34;:&amp;#34;returns ch&lt;br /&gt;eck output&amp;#34;}&lt;br /&gt;{&amp;#34;timestamp&amp;#34;:&amp;#34;2014-04-25T22:29:13.550142+0900&amp;#34;,&amp;#34;level&amp;#34;:&amp;#34;info&amp;#34;,&amp;#34;message&amp;#34;:&amp;#34;loaded&lt;br /&gt;extension&amp;#34;,&amp;#34;type&amp;#34;:&amp;#34;handler&amp;#34;,&amp;#34;name&amp;#34;:&amp;#34;debug&amp;#34;,&amp;#34;description&amp;#34;:&amp;#34;outputs json event dat&lt;br /&gt;a&amp;#34;}&lt;br /&gt;{&amp;#34;timestamp&amp;#34;:&amp;#34;2014-04-25T22:29:13.587469+0900&amp;#34;,&amp;#34;level&amp;#34;:&amp;#34;debug&amp;#34;,&amp;#34;message&amp;#34;:&amp;#34;connec&lt;br /&gt;ting to rabbitmq&amp;#34;,&amp;#34;settings&amp;#34;:{&amp;#34;host&amp;#34;:&amp;#34;10.0.0.150&amp;#34;,&amp;#34;port&amp;#34;:5672,&amp;#34;vhost&amp;#34;:&amp;#34;/sensu&amp;#34;,&amp;#34;&lt;br /&gt;user&amp;#34;:&amp;#34;sensu&amp;#34;,&amp;#34;password&amp;#34;:&amp;#34;oresensu&amp;#34;}}&lt;br /&gt;{&amp;#34;timestamp&amp;#34;:&amp;#34;2014-04-25T22:29:13.612744+0900&amp;#34;,&amp;#34;level&amp;#34;:&amp;#34;debug&amp;#34;,&amp;#34;message&amp;#34;:&amp;#34;schedu&lt;br /&gt;ling keepalives&amp;#34;}&lt;br /&gt;{&amp;#34;timestamp&amp;#34;:&amp;#34;2014-04-25T22:29:13.616990+0900&amp;#34;,&amp;#34;level&amp;#34;:&amp;#34;debug&amp;#34;,&amp;#34;message&amp;#34;:&amp;#34;publis&lt;br /&gt;hing keepalive&amp;#34;,&amp;#34;payload&amp;#34;:{&amp;#34;name&amp;#34;:&amp;#34;orenoec2&amp;#34;,&amp;#34;address&amp;#34;:&amp;#34;10.0.0.163&amp;#34;,&amp;#34;subscriptio&lt;br /&gt;ns&amp;#34;:[&amp;#34;all&amp;#34;],&amp;#34;timestamp&amp;#34;:1398432553}}&lt;br /&gt;{&amp;#34;timestamp&amp;#34;:&amp;#34;2014-04-25T22:29:13.617499+0900&amp;#34;,&amp;#34;level&amp;#34;:&amp;#34;debug&amp;#34;,&amp;#34;message&amp;#34;:&amp;#34;subscr&lt;br /&gt;ibing to client subscriptions&amp;#34;}&lt;br /&gt;{&amp;#34;timestamp&amp;#34;:&amp;#34;2014-04-25T22:29:13.617727+0900&amp;#34;,&amp;#34;level&amp;#34;:&amp;#34;debug&amp;#34;,&amp;#34;message&amp;#34;:&amp;#34;schedu&lt;br /&gt;ling standalone checks&amp;#34;}&lt;/pre&gt;          &lt;br /&gt;&lt;br /&gt; こちらの記事はなかの人（&lt;a href=&quot;https://www.facebook.com/kenkishigami&quot; target=&quot;_blank&quot; rel=&quot;fnofollow&quot; title=&quot;がみさん&quot;&gt;がみさん&lt;/a&gt;）監修のもと掲載しています。&lt;br /&gt;元記事は、&lt;a href=&quot;http://buta9999.hatenablog.jp/entry/2014/04/26/005405&quot; target=&quot;_blank&quot; title=&quot;こちら&quot;&gt;こちら&lt;/a&gt;     </content><link rel='replies' type='application/atom+xml' href='http://blog.cloudpack.jp/feeds/920560978017697892/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://blog.cloudpack.jp/2014/04/server-news-sensu-dashboard-server.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/920560978017697892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/920560978017697892'/><link rel='alternate' type='text/html' href='http://blog.cloudpack.jp/2014/04/server-news-sensu-dashboard-server.html' title='Sensu 0.12 調査メモ No Items found.'/><author><name>hashimoto</name><uri>http://www.blogger.com/profile/04747288723021078616</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3449707904234438373.post-4307364829054517698</id><published>2014-04-28T09:30:00.000+09:00</published><updated>2014-04-28T09:30:00.467+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aws"/><title type='text'>Amazon Redshift に COPY コマンドでCSVをインポートする</title><content type='html'>  &lt;a href=&quot;http://www.cloudpack.jp/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; title=&quot;cloudpack&quot;&gt;cloudpack&lt;/a&gt;エバンジェリストの&lt;a href=&quot;https://www.facebook.com/yoshidashingo1&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; title=&quot;吉田真吾&quot;&gt;吉田真吾&lt;/a&gt;（&lt;a href=&quot;https://twitter.com/yoshidashingo&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; title=&quot;@yoshidashingo&quot;&gt;@yoshidashingo&lt;/a&gt;）です。&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Redshiftに移行する際に既存のデータを投入したいことがあると思います。今日はそのやり方をメモ書き。&lt;/p&gt; &lt;br /&gt;&lt;div class=&quot;section&quot;&gt;    &lt;h3&gt;0. 前提&lt;/h3&gt;     &lt;ul&gt;&lt;li&gt;Redshiftのクラスタは作成済みである&lt;/li&gt;&lt;li&gt;EC2からRedshiftに接続できるように Cluster Security Group が設定済みである&lt;/li&gt;&lt;li&gt;EC2にawscli導入済みである&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt; &lt;br /&gt;&lt;div class=&quot;section&quot;&gt;    &lt;h3&gt;1. EC2からS3にデータをアップロードする&lt;/h3&gt;     &lt;div class=&quot;section&quot;&gt;    &lt;h4&gt;1.1 (準備)EC2にクレデンシャルを設定する&lt;/h4&gt;     &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;$ aws configure&lt;br /&gt;AWS Access Key ID [None]: &lt;アクセスキー&gt;&lt;br /&gt;aws Secret Access Key [None]: &lt;シークレットキー&gt;&lt;br /&gt;Default region name [None]: us-east-1&lt;br /&gt;Default output format [None]:&lt;br /&gt;&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;デフォルトリージョンがus-east-1の場合↑&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class=&quot;section&quot;&gt;    &lt;h4&gt;1.2 (準備)S3にバケットを作る&lt;/h4&gt;     &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;$ aws s3 mb s3://test-bucket&lt;br /&gt;make_bucket: s3://test-bucket/&lt;br /&gt;$ aws s3 ls&lt;br /&gt;2014-04-24 00:30:00 test-bucket&lt;br /&gt;&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;バケット名がtest-bucketの場合↑&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class=&quot;section&quot;&gt;    &lt;h4&gt;1.3 S3にCSVファイルをアップロードする&lt;/h4&gt;     &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;$ aws s3 cp test.CSV s3://test-bucket/ &amp;&lt;br /&gt;upload: ./test.CSV to s3://test-bucket/test.CSV&lt;br /&gt;[1]-  終了        aws s3 cp test.CSV s3://test-bucket/&lt;br /&gt;&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;CSVファイル名：test.CSV の場合↑&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt; &lt;br /&gt;&lt;div class=&quot;section&quot;&gt;    &lt;h3&gt;2. EC2からpsqlで接続する&lt;/h3&gt;     &lt;div class=&quot;section&quot;&gt;    &lt;h4&gt;2.1 (準備)psqlをインストールする&lt;/h4&gt;     &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;$ sudo yum install postgresql&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&quot;section&quot;&gt;    &lt;h4&gt;2.2 psqlで接続する&lt;/h4&gt;     &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;$ psql -h my-dw-instance.xxxx.us-east-1.redshift.amazonaws.com -U awsuser -d mydb -p 5439&lt;br /&gt;ユーザ awsuser のパスワード: &lt;パスワード&gt;&lt;br /&gt;mydb #&lt;br /&gt;&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;RedshiftクラスタのエンドポイントURL：my-dw-instance.xxxx.us-east-1.redshift.amazonaws.com の場合↑&lt;/li&gt;&lt;li&gt;ユーザー名：awsuser の場合↑&lt;/li&gt;&lt;li&gt;データベース名：mydb の場合↑&lt;/li&gt;&lt;li&gt;ポート番号：5439 の場合↑&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt; &lt;br /&gt;&lt;div class=&quot;section&quot;&gt;    &lt;h3&gt;3. CSVをインポートする&lt;/h3&gt;     &lt;div class=&quot;section&quot;&gt;    &lt;h4&gt;3.1 (準備)テーブルを作成する&lt;/h4&gt;     &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;mydb # create table test(&lt;br /&gt;mydb(#  id integer,&lt;br /&gt;mydb(#  test_date timestamp,&lt;br /&gt;mydb(#  memo VARCHAR(64));&lt;br /&gt;CREATE TABLE&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;テーブルを作成するときに各カラムの圧縮方式を指定することもできるが、後ほどCSVファイルをCOPYコマンドでインポートするときに、エンコードなしでテーブルが0件だと、ファイルを10万行読んで自動圧縮をしてくれるようなので今回はそちらに任せる。非常に便利な機能ですね。&lt;br /&gt;&lt;a href=&quot;http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/c_Loading_tables_auto_compress.html&quot;&gt;&amp;#x81EA;&amp;#x52D5;&amp;#x5727;&amp;#x7E2E;&amp;#x3042;&amp;#x308A;&amp;#x3067;&amp;#x30C6;&amp;#x30FC;&amp;#x30D6;&amp;#x30EB;&amp;#x3092;&amp;#x30ED;&amp;#x30FC;&amp;#x30C9;&amp;#x3059;&amp;#x308B; - Amazon Redshift&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt; &lt;/div&gt;&lt;div class=&quot;section&quot;&gt;    &lt;h4&gt;3.2 CSVファイルをアップロードする&lt;/h4&gt;     &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;mydb=# COPY test FROM &#39;s3://test-bucket/test.CSV&#39; CSV credentials &#39;aws_Access_key_id=&lt;アクセスキー&gt;;aws_secret_Access_key=&lt;シークレットキー&gt;&#39;&lt;br /&gt;INFO:  Load into table &#39;test&#39; completed, 100000000 record(s) loaded successfully.&lt;br /&gt;COPY&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;※コマンド一行だとこんな感じ↓ただしパスワードは指定できないのでバックグラウンド実行できない。&lt;/p&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;$ psql -h my-dw-instance.xxxx.us-east-1.redshift.amazonaws.com -U awsuser -d mydb -p 5439 -c &quot;COPY test FROM &#39;s3://test-bucket/test.CSV&#39; CSV credentials &#39;aws_Access_key_id=&lt;アクセスキー&gt;;aws_secret_Access_key=&lt;シークレットキー&gt;&#39;;&quot;&lt;br /&gt;ユーザ awsuser のパスワード:&lt;br /&gt;INFO:  Load into table &#39;test&#39; completed, 100000000 record(s) loaded successfully.&lt;br /&gt;COPY&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt; &lt;br /&gt;&lt;div class=&quot;section&quot;&gt;    &lt;h3&gt;最後に&lt;/h3&gt;     &lt;ul&gt;&lt;li&gt;今回はdw2.largeのシングルノードで試しました。上記で例に使ったテーブルよりもっとレコードレングスの長いテーブルを3つほど作って1億行ずつインポートしてみましたが、いずれも10分程度で完了しました。非常に楽ですね。&lt;/li&gt;&lt;li&gt;コマンド一行でバックグラウンド実行できないのは少し面倒。なんかいいやり方ないかな。&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt; こちらの記事はなかの人（&lt;a href=&quot;http://d.hatena.ne.jp/yoshidashingo/&quot; target=&quot;_blank&quot; title=&quot;yoshidashingo&quot;&gt;yoshidashingo&lt;/a&gt;）監修のもと掲載しています。&lt;br /&gt;元記事は、&lt;a href=&quot;http://yoshidashingo.hatenablog.com/entry/2014/04/24/103753&quot; target=&quot;_blank&quot; title=&quot;こちら&quot;&gt;こちら&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.cloudpack.jp/feeds/4307364829054517698/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://blog.cloudpack.jp/2014/04/aws-news-redshift-copy-import.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/4307364829054517698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/4307364829054517698'/><link rel='alternate' type='text/html' href='http://blog.cloudpack.jp/2014/04/aws-news-redshift-copy-import.html' title='Amazon Redshift に COPY コマンドでCSVをインポートする'/><author><name>hashimoto</name><uri>http://www.blogger.com/profile/04747288723021078616</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3449707904234438373.post-5532985506890719661</id><published>2014-04-28T09:00:00.000+09:00</published><updated>2014-04-28T09:00:00.416+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="news"/><title type='text'>cloudpackブログ週刊レビュー 2014/04/28</title><content type='html'>先週公開した記事は下記となります。&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;tr&gt;&lt;td width=&quot;90&quot;&gt;公開日&lt;/td&gt;&lt;td width=&quot;70&quot;&gt;作成者&lt;/td&gt;&lt;td&gt;タイトル&lt;/td&gt;&lt;/tr&gt;   &lt;tr&gt;&lt;td rowspan=&quot;1&quot;&gt;04月21日（月）&lt;/td&gt;&lt;td&gt;ヤマグチ&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://bit.ly/clp_blog_20140421&quot; title=&quot;Ruby on Rails: Scaffoldで量産されたControllerの処理をConcernで共通化してみる&quot;&gt;Ruby on Rails: Scaffoldで量産されたControllerの処理をConcernで共通化してみる&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;   &lt;tr&gt;&lt;td rowspan=&quot;1&quot;&gt;04月22日（火）&lt;/td&gt;&lt;td&gt;ヤマグチ&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://bit.ly/clp_blog_20140422-1&quot; title=&quot;Ruby: ブロック書きたくない病に罹患してArray#to_procを定義してみた&quot;&gt;Ruby: ブロック書きたくない病に罹患してArray#to_procを定義してみた&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;   &lt;tr&gt;&lt;td rowspan=&quot;2&quot;&gt;04月25日（金）&lt;/td&gt;&lt;td&gt;ヤマグチ&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://bit.ly/clp_blog_20140425-1&quot; title=&quot;Ruby: Array#to_procその後&quot;&gt;Ruby: Array#to_procその後&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;がみさん&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://bit.ly/clp_blog_20140425-2&quot; title=&quot;Vagrantでインスタンスを指定したVPC subnet配下で起動してEIPを割り当てる方法&quot;&gt;Vagrantでインスタンスを指定したVPC subnet配下で起動してEIPを割り当てる方法&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;   &lt;/table&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.cloudpack.jp/feeds/5532985506890719661/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://blog.cloudpack.jp/2014/04/news-cloudpack-review-20140428.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/5532985506890719661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/5532985506890719661'/><link rel='alternate' type='text/html' href='http://blog.cloudpack.jp/2014/04/news-cloudpack-review-20140428.html' title='cloudpackブログ週刊レビュー 2014/04/28'/><author><name>hashimoto</name><uri>http://www.blogger.com/profile/04747288723021078616</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3449707904234438373.post-2393410384242926181</id><published>2014-04-25T11:00:00.000+09:00</published><updated>2014-04-25T11:00:02.411+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aws"/><title type='text'>Vagrantでインスタンスを指定したVPC subnet配下で起動してEIPを割り当てる方法</title><content type='html'> cloudpack の &lt;a href=&quot;https://www.facebook.com/kenkishigami&quot; target=&quot;_blank&quot; rel=&quot;fnofollow&quot; title=&quot;がみさん&quot;&gt;がみさん&lt;/a&gt;です。&lt;br /&gt;&lt;br /&gt;指定したVPCのSubnetにvagrant up --provider=awsでインスタンスを起動する方法です。&lt;br /&gt;&lt;br /&gt;現時点でvagrant-awsのREADME.mdに下記のようなことが書いてあったけど、動かなかったので&lt;br /&gt; &lt;h4&gt;README.md&lt;/h4&gt;&lt;blockquote&gt;associate_public_ip - If true, will associate a public IP address to an instance in a VPC. &lt;/blockquote&gt; &lt;br /&gt;&lt;h4&gt;やってみた結果&lt;/h4&gt;&lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;&lt;br /&gt;AWS Provider:&lt;br /&gt;* The following settings shouldn&#39;t exist: public_ip_address&lt;br /&gt;&lt;/pre&gt; &lt;br /&gt;&lt;h4&gt;対応&lt;/h4&gt;&lt;a href=&quot;https://github.com/mitchellh/vagrant-aws/pull/65&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; title=&quot;Elastic IP for VPC instances per issue 18&quot;&gt;Issue&lt;/a&gt;読んでみるとelastic_ipパラメータがあるらしい。&lt;br /&gt; &lt;br /&gt;subnet_idを指定する。&lt;br /&gt;aws.elastic_ipパラメータをtrueにするとインスタンス起動時にEIPが割り当てられます。&lt;br /&gt;&lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;&lt;br /&gt;# -*- mode: ruby -*-&lt;br /&gt;# vi: set ft=ruby :&lt;br /&gt;require &#39;yaml&#39;&lt;br /&gt;# Vagrantfile API/syntax version. Don&#39;t touch unless you know what you&#39;re doing!&lt;br /&gt;VAGRANTFILE_API_VERSION = &quot;2&quot;&lt;br /&gt;&lt;br /&gt;attributes = YAML.load_file(&quot;.aws/config.yml&quot;)&lt;br /&gt;&lt;br /&gt;Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|&lt;br /&gt;&lt;br /&gt;  config.vm.box = &quot;dummy&quot;&lt;br /&gt;  config.omnibus.chef_version = :latest&lt;br /&gt;&lt;br /&gt;  config.vm.provider :aws do |aws, override|&lt;br /&gt;    aws.tags = attributes[&quot;aws_provider&quot;][&quot;tags&quot;]&lt;br /&gt;    aws.access_key_id = attributes[&quot;aws_provider&quot;][&quot;access_key_id&quot;]&lt;br /&gt;    aws.secret_access_key = attributes[&quot;aws_provider&quot;][&quot;secret_access_key&quot;]&lt;br /&gt;    aws.keypair_name = attributes[&quot;aws_provider&quot;][&quot;keypair_name&quot;]&lt;br /&gt;    aws.region = attributes[&quot;aws_provider&quot;][&quot;region&quot;]&lt;br /&gt;    aws.ami = &quot;ami-99107d98&quot; #suz_lab_centos-core-6.5.1&lt;br /&gt;    aws.instance_type = attributes[&quot;aws_provider&quot;][&quot;instance_type&quot;]&lt;br /&gt;    aws.security_groups = attributes[&quot;aws_provider&quot;][&quot;security_groups&quot;]&lt;br /&gt;    aws.subnet_id = attributes[&quot;aws_provider&quot;][&quot;subnet_id&quot;]&lt;br /&gt;    aws.elastic_ip = true&lt;br /&gt;    override.ssh.username = attributes[&quot;aws_provider&quot;][&quot;ssh_username&quot;]&lt;br /&gt;    override.ssh.private_key_path = attributes[&quot;aws_provider&quot;][&quot;ssh_private_key_path&quot;]&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;終わりです。&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; こちらの記事はなかの人（&lt;a href=&quot;https://www.facebook.com/kenkishigami&quot; target=&quot;_blank&quot; rel=&quot;fnofollow&quot; title=&quot;がみさん&quot;&gt;がみさん&lt;/a&gt;）監修のもと掲載しています。&lt;br /&gt;元記事は、&lt;a href=&quot;http://buta9999.hatenablog.jp/entry/2014/04/23/013132&quot; target=&quot;_blank&quot; title=&quot;こちら&quot;&gt;こちら&lt;/a&gt;  </content><link rel='replies' type='application/atom+xml' href='http://blog.cloudpack.jp/feeds/2393410384242926181/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://blog.cloudpack.jp/2014/04/aws-news-vagrant-vpc-eip.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/2393410384242926181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/2393410384242926181'/><link rel='alternate' type='text/html' href='http://blog.cloudpack.jp/2014/04/aws-news-vagrant-vpc-eip.html' title='Vagrantでインスタンスを指定したVPC subnet配下で起動してEIPを割り当てる方法'/><author><name>hashimoto</name><uri>http://www.blogger.com/profile/04747288723021078616</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3449707904234438373.post-1768893040507522169</id><published>2014-04-25T09:55:00.003+09:00</published><updated>2014-04-25T09:55:37.200+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="server"/><title type='text'>Ruby: Array#to_procその後</title><content type='html'>cloudpack の &lt;a href=&quot;http://t.y13i.com/&quot; target=&quot;_blank&quot; rel=&quot;fnofollow&quot; title=&quot;ヤマグチ&quot;&gt;ヤマグチ&lt;/a&gt;です。&lt;br /&gt;&lt;br /&gt;図らずも&lt;a href=&quot;http://www.sanityinc.com/articles/adding-array-to-proc-to-ruby/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot; title=&quot;Adding Array#to_proc to Ruby&quot;&gt;5年前の車輪&lt;/a&gt;を再発明してしまった&lt;a href=&quot;http://blog.cloudpack.jp/2014/04/server-news-ruby-array-to-proc.html&quot; target=&quot;_blank&quot; title=&quot;Ruby: ブロック書きたくない病に罹患してArray#to_procを定義してみた&quot;&gt;前回&lt;/a&gt;でした。&lt;br /&gt;&lt;br /&gt;ふと思ったのですが、Symbol#[]はどういう実装だったかなと。&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;class Symbol&lt;/h4&gt;&lt;blockquote&gt;self.to_s[nth] と同じです。&lt;br /&gt;&lt;br /&gt;self.to_s[nth, len] と同じです。&lt;br /&gt;&lt;br /&gt;self.to_s[substr] と同じです。&lt;br /&gt;&lt;br /&gt;self.to_s[regexp, nth] と同じです。&lt;br /&gt;&lt;br /&gt;self.to_s[range] と同じです。 &lt;/blockquote&gt; &lt;br /&gt;うーむ。Stringと同じなんですね……。暴挙と承知の上でこれをオーバーライドするとしたらこんな感じでしょうか。 &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;&lt;br /&gt;class Symbol&lt;br /&gt;  def [] *args&lt;br /&gt;    Proc.new {|object| object.send self, *args}&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;%w(vanilla caramel matcha).map &amp;:+[&quot; icecream&quot;]&lt;br /&gt;# =&gt; [&quot;vanilla icecream&quot;, &quot;caramel icecream&quot;, &quot;matcha icecream&quot;]&lt;br /&gt;&lt;/pre&gt; 素直にブロックを書きましょう。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; こちらの記事はなかの人（&lt;a href=&quot;http://t.y13i.com/&quot; target=&quot;_blank&quot; rel=&quot;fnofollow&quot; title=&quot;ヤマグチ&quot;&gt;ヤマグチ&lt;/a&gt;）監修のもと掲載しています。&lt;br /&gt;元記事は、&lt;a href=&quot;http://t.y13i.com/post/83416180197/ruby-array-to-proc&quot; target=&quot;_blank&quot; title=&quot;こちら&quot;&gt;こちら&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.cloudpack.jp/feeds/1768893040507522169/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://blog.cloudpack.jp/2014/04/server-news-ruby-array-to-proc-2nd.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/1768893040507522169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/1768893040507522169'/><link rel='alternate' type='text/html' href='http://blog.cloudpack.jp/2014/04/server-news-ruby-array-to-proc-2nd.html' title='Ruby: Array#to_procその後'/><author><name>hashimoto</name><uri>http://www.blogger.com/profile/04747288723021078616</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3449707904234438373.post-5095877082887180815</id><published>2014-04-22T09:00:00.000+09:00</published><updated>2014-04-22T09:00:02.825+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="server"/><title type='text'>Ruby: ブロック書きたくない病に罹患してArray#to_procを定義してみた</title><content type='html'>   cloudpack の &lt;a href=&quot;http://t.y13i.com/&quot; target=&quot;_blank&quot; rel=&quot;fnofollow&quot; title=&quot;ヤマグチ&quot;&gt;ヤマグチ&lt;/a&gt;です。&lt;br /&gt;&lt;br /&gt;&lt;p&gt;甘い物は好きですか？私は好きです。&lt;/p&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;sweets = %w(cheese strawberry chocolate)&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;皆様ご存知の通り、Ruby 1.9以降では&lt;/p&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;sweets.map {|sweet| sweet.capitalize}&lt;br /&gt;# =&amp;gt; [&quot;Cheese&quot;, &quot;Strawberry&quot;, &quot;Chocolate&quot;]&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;と書くところを&lt;/p&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;sweets.map &amp;amp;:capitalize&lt;br /&gt;# =&amp;gt; [&quot;Cheese&quot;, &quot;Strawberry&quot;, &quot;Chocolate&quot;]&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;とも書くことができます。&lt;/p&gt; &lt;p&gt;&amp;amp;プレフィックスの後にProcでないオブジェクトを置くと、そのオブジェクトの#to_procメソッドを使って暗黙の変換が試みられます。Ruby 1.9以降ではSymbolに#to_procがあらかじめ定義されており、:capitalizeという名前のメソッドを呼び出すProcをブロックに変換した上でイテレータ（ブロックを取るメソッド）に渡すという意味になるため、後者のような書き方ができるということですね。&lt;/p&gt; &lt;p&gt;でもこの書き方、シンボルで名前を指定したメソッドに引数を渡せません。&lt;/p&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;sweets.map(&amp;amp;:+, &quot; cake&quot;)&lt;br /&gt;# =&amp;gt; SyntaxError: unexpected &#39;)&#39;, expecting end-of-input&lt;br /&gt;&lt;br /&gt;sweets.map &amp;amp;(:+, &quot; cake&quot;)&lt;br /&gt;# =&amp;gt; SyntaxError: unexpected &#39;)&#39;, expecting end-of-input&lt;br /&gt;&lt;br /&gt;sweets.map(&amp;amp;:+(&quot; cake&quot;))&lt;br /&gt;# =&amp;gt; SyntaxError: unexpected &#39;)&#39;, expecting end-of-input&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;こういう場合、普通は素直にブロックを付けて書きます。&lt;/p&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;sweets.map {|sweet| sweet + &quot; cake&quot;}&lt;br /&gt;# =&amp;gt; [&quot;cheese cake&quot;, &quot;strawberry cake&quot;, &quot;chocolate cake&quot;]&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;これでも別にいいじゃん。で終わりなのですが、引数を付けるだけなのに……ぐぬぬ、と色々な人たちが&amp;amp;:メソッド名に引数を渡そうと色々な黒魔術を錬成してきたようです（参考参照）。&lt;/p&gt; &lt;p&gt;では、こんなのはどうですかね？&lt;/p&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;class Array&lt;br /&gt;  def to_proc&lt;br /&gt;    Proc.new {|object| object.send first, *self[1..-1]}&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;sweets.map &amp;amp;[:+, &quot; cake&quot;]&lt;br /&gt;# =&amp;gt; [&quot;cheese cake&quot;, &quot;strawberry cake&quot;, &quot;chocolate cake&quot;]&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;はい。配列に&amp;amp;を付けてます。配列の中身は1つ目がメソッド名のシンボル、それ以降は引数です。複数引数もいけます。&lt;/p&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;sweets.map &amp;amp;[:sub, &quot;straw&quot;, &quot;blue&quot;]&lt;br /&gt;# =&amp;gt; [&quot;cheese&quot;, &quot;blueberry&quot;, &quot;chocolate&quot;]&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;おさらいです。&amp;amp;を付けてイテレータに渡されたオブジェクトはそれがProcでない場合#to_procでProcに変換しようとするのでした。&lt;/p&gt; &lt;p&gt;ここではArrayに「配列の先頭要素の名前のメソッドを、2番目以降の要素を引数として呼び出す」という内容の#to_procメソッドを定義してみました。あとは&amp;amp;に配列を渡すだけ……こんな内容のProcが生成され、ブロックとして#mapに渡されているはずです。&lt;/p&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;Proc.new {|object| object + &quot; cake&quot;}&lt;br /&gt;Proc.new {|object| object.sub &quot;straw&quot;, &quot;blue&quot;}&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;いかがです？&lt;/p&gt; &lt;p&gt;面白いと思った方、参考URLを見るともっと面白いはずです。特に&lt;a href=&quot;http://yuroyoro.hatenablog.com/entry/2012/08/08/201720&quot;&gt;関数型Ruby&lt;/a&gt;シリーズは非常にディープでヤバいのでオススメ。&lt;/p&gt; &lt;br /&gt;&lt;h4&gt;参考&lt;/h4&gt; &lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://melborne.github.io/2014/04/20/extend-ampersand-magic-with-methop/&quot;&gt;落ちていくRubyistのためのMethopオブジェクト&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://yuroyoro.hatenablog.com/entry/2012/08/08/201720&quot;&gt;「関数型Ruby」という病(1) - Symbol#to_proc, Object#method - ( ꒪⌓꒪) ゆるよろ日記&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://blog.livedoor.jp/sasata299/archives/51541958.html&quot;&gt;Rubyでメタプログラミング ～暗黙的に呼ばれるto_procメソッド - (ﾟ∀ﾟ)o彡 sasata299&amp;#8217;s blog&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.infoq.com/jp/news/2008/03/to_proc-currying-ruby19&quot;&gt;Ruby 1.9 のSymbol#to_procと(入ったばかりの)Procのカリー化&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt; こちらの記事はなかの人（&lt;a href=&quot;http://t.y13i.com/&quot; target=&quot;_blank&quot; rel=&quot;fnofollow&quot; title=&quot;ヤマグチ&quot;&gt;ヤマグチ&lt;/a&gt;）監修のもと掲載しています。&lt;br /&gt;元記事は、&lt;a href=&quot;http://t.y13i.com/post/83319234720/ruby-array-to-proc&quot; target=&quot;_blank&quot; title=&quot;こちら&quot;&gt;こちら&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.cloudpack.jp/feeds/5095877082887180815/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://blog.cloudpack.jp/2014/04/server-news-ruby-array-to-proc.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/5095877082887180815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/5095877082887180815'/><link rel='alternate' type='text/html' href='http://blog.cloudpack.jp/2014/04/server-news-ruby-array-to-proc.html' title='Ruby: ブロック書きたくない病に罹患してArray#to_procを定義してみた'/><author><name>hashimoto</name><uri>http://www.blogger.com/profile/04747288723021078616</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3449707904234438373.post-958743143562488604</id><published>2014-04-21T10:00:00.000+09:00</published><updated>2014-04-21T10:00:03.702+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="server"/><title type='text'>Ruby on Rails: Scaffoldで量産されたControllerの処理をConcernで共通化してみる</title><content type='html'> cloudpack の &lt;a href=&quot;http://t.y13i.com/&quot; target=&quot;_blank&quot; rel=&quot;fnofollow&quot; title=&quot;ヤマグチ&quot;&gt;ヤマグチ&lt;/a&gt;です。&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Railsネタです。&lt;/p&gt; &lt;p&gt;RailsにはConcernという仕組みがあります。ActiveSupportが提供する機能のひとつなのですが、一言でいうと複数モデル間で共通のロジックを1つのモジュールにまとめてDRYにできる機能で、Railsの開発者であるDHHもこれを推しているようです。&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://signalvnoise.com/posts/3372-put-chubby-models-on-a-diet-with-concerns&quot;&gt;Put chubby models on a diet with concerns by David of Basecamp&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://ntcncp.net/2012/12/26/translate-dhh-concerns-to-extract-module&quot;&gt;翻訳 ふとっちょのRails modelをconcernsでダイエットしよう | ntcncp.net&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Concernよりも有名と思われるRailsの機能にScaffoldがあり、これはrails generate scaffoldコマンドを打つだけで関連するmodel、controller、viewを基本的な機能をあらかじめ実装した形で一気に自動生成してくれるというウルトラ便利機能です。&lt;/p&gt; &lt;p&gt;しかしこのScaffold、複数回使用するとその分だけほとんど内容の変わらないmodelやcontrollerが量産されてしまい、そんなのDRYじゃねえ！状態になりがちです。&lt;/p&gt; &lt;p&gt;上の記事ではmodelに対してconcernを使っていますが、同じ考え方はcontrollerにも使えます。&lt;/p&gt; &lt;p&gt;Scaffoldが生成するcontrollerはリソースの作成・更新・読み取り・削除（いわゆる&lt;a href=&quot;http://ja.wikipedia.org/wiki/CRUD&quot;&gt;CRUD&lt;/a&gt;）を提供します。そこでこのCRUDな機能をconcernとしてまとめてみようと思います。&lt;/p&gt; &lt;p&gt;まず適当なRailsプロジェクトを作り、2つのモデルをscaffoldします。&lt;/p&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;rails new test_proj --skip-bundle&lt;br /&gt;cd test_proj&lt;br /&gt;bundle install --path=vendor/bundle&lt;br /&gt;&lt;br /&gt;bundle exec rails generate scaffold author name:string birth_date:date description:text&lt;br /&gt;bundle exec rails generate scaffold book title:string release_date:date description:text&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;念のため動作を確認しましょう。&lt;/p&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;bundle exec rake db:migrate&lt;br /&gt;bundle exec rails server&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;authorsとbooksがブラウザでCRUDできると思います。さて、これらのcontrollerを見てみましょう。&lt;/p&gt;  &lt;br/&gt;&lt;h3&gt;app/controllers/authors_controller.rb&lt;/h3&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;class AuthorsController &amp;lt; ApplicationController&lt;br /&gt;  before_action :set_author, only: [:show, :edit, :update, :destroy]&lt;br /&gt;&lt;br /&gt;  # GET /authors&lt;br /&gt;  # GET /authors.json&lt;br /&gt;  def index&lt;br /&gt;    @authors = Author.all&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  # GET /authors/1&lt;br /&gt;  # GET /authors/1.json&lt;br /&gt;  def show&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  # GET /authors/new&lt;br /&gt;  def new&lt;br /&gt;    @author = Author.new&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  # GET /authors/1/edit&lt;br /&gt;  def edit&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  # POST /authors&lt;br /&gt;  # POST /authors.json&lt;br /&gt;  def create&lt;br /&gt;    @author = Author.new(author_params)&lt;br /&gt;&lt;br /&gt;    respond_to do |format|&lt;br /&gt;      if @author.save&lt;br /&gt;        format.html { redirect_to @author, notice: &#39;Author was successfully created.&#39; }&lt;br /&gt;        format.json { render :show, status: :created, location: @author }&lt;br /&gt;      else&lt;br /&gt;        format.html { render :new }&lt;br /&gt;        format.json { render json: @author.errors, status: :unprocessable_entity }&lt;br /&gt;      end&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  # PATCH/PUT /authors/1&lt;br /&gt;  # PATCH/PUT /authors/1.json&lt;br /&gt;  def update&lt;br /&gt;    respond_to do |format|&lt;br /&gt;      if @author.update(author_params)&lt;br /&gt;        format.html { redirect_to @author, notice: &#39;Author was successfully updated.&#39; }&lt;br /&gt;        format.json { render :show, status: :ok, location: @author }&lt;br /&gt;      else&lt;br /&gt;        format.html { render :edit }&lt;br /&gt;        format.json { render json: @author.errors, status: :unprocessable_entity }&lt;br /&gt;      end&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  # DELETE /authors/1&lt;br /&gt;  # DELETE /authors/1.json&lt;br /&gt;  def destroy&lt;br /&gt;    @author.destroy&lt;br /&gt;    respond_to do |format|&lt;br /&gt;      format.html { redirect_to authors_url }&lt;br /&gt;      format.json { head :no_content }&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  private&lt;br /&gt;    # Use callbacks to share common setup or constraints between actions.&lt;br /&gt;    def set_author&lt;br /&gt;      @author = Author.find(params[:id])&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    # Never trust parameters from the scary internet, only allow the white list through.&lt;br /&gt;    def author_params&lt;br /&gt;      params.require(:author).permit(:name, :birth_date, :description)&lt;br /&gt;    end&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt; &lt;br/&gt;&lt;h3&gt;app/controllers/books_controller.rb&lt;/h3&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;class BooksController &amp;lt; ApplicationController&lt;br /&gt;  before_action :set_book, only: [:show, :edit, :update, :destroy]&lt;br /&gt;&lt;br /&gt;  # GET /books&lt;br /&gt;  # GET /books.json&lt;br /&gt;  def index&lt;br /&gt;    @books = Book.all&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  # GET /books/1&lt;br /&gt;  # GET /books/1.json&lt;br /&gt;  def show&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  # GET /books/new&lt;br /&gt;  def new&lt;br /&gt;    @book = Book.new&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  # GET /books/1/edit&lt;br /&gt;  def edit&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  # POST /books&lt;br /&gt;  # POST /books.json&lt;br /&gt;  def create&lt;br /&gt;    @book = Book.new(book_params)&lt;br /&gt;&lt;br /&gt;    respond_to do |format|&lt;br /&gt;      if @book.save&lt;br /&gt;        format.html { redirect_to @book, notice: &#39;Book was successfully created.&#39; }&lt;br /&gt;        format.json { render :show, status: :created, location: @book }&lt;br /&gt;      else&lt;br /&gt;        format.html { render :new }&lt;br /&gt;        format.json { render json: @book.errors, status: :unprocessable_entity }&lt;br /&gt;      end&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  # PATCH/PUT /books/1&lt;br /&gt;  # PATCH/PUT /books/1.json&lt;br /&gt;  def update&lt;br /&gt;    respond_to do |format|&lt;br /&gt;      if @book.update(book_params)&lt;br /&gt;        format.html { redirect_to @book, notice: &#39;Book was successfully updated.&#39; }&lt;br /&gt;        format.json { render :show, status: :ok, location: @book }&lt;br /&gt;      else&lt;br /&gt;        format.html { render :edit }&lt;br /&gt;        format.json { render json: @book.errors, status: :unprocessable_entity }&lt;br /&gt;      end&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  # DELETE /books/1&lt;br /&gt;  # DELETE /books/1.json&lt;br /&gt;  def destroy&lt;br /&gt;    @book.destroy&lt;br /&gt;    respond_to do |format|&lt;br /&gt;      format.html { redirect_to books_url }&lt;br /&gt;      format.json { head :no_content }&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  private&lt;br /&gt;    # Use callbacks to share common setup or constraints between actions.&lt;br /&gt;    def set_book&lt;br /&gt;      @book = Book.find(params[:id])&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    # Never trust parameters from the scary internet, only allow the white list through.&lt;br /&gt;    def book_params&lt;br /&gt;      params.require(:book).permit(:title, :release_date, :description)&lt;br /&gt;    end&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;クラス名以外ほとんど同じコードですね？concernでまとめてしまいましょう！！&lt;/p&gt; &lt;br/&gt;&lt;h3&gt;app/controllers/concerns/crudable.rb&lt;/h3&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;module CRUDable&lt;br /&gt;  extend ActiveSupport::Concern&lt;br /&gt;&lt;br /&gt;  included do&lt;br /&gt;    before_action :set_model&lt;br /&gt;    before_action :set_resource, only: [:edit, :update, :destroy]&lt;br /&gt;&lt;br /&gt;    def index&lt;br /&gt;      instance_variable_set :&quot;@#{model_name.tableize}&quot;, @model.all&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    def show&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    def new&lt;br /&gt;      instance_variable_set :&quot;@#{model_name.underscore}&quot;, @model.new&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    def edit&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    def create&lt;br /&gt;      instance_variable_set :&quot;@#{model_name.underscore}&quot;, @model.new(resource_params)&lt;br /&gt;&lt;br /&gt;      respond_to do |format|&lt;br /&gt;        if instance_variable_get(&quot;@#{model_name.underscore}&quot;).save&lt;br /&gt;          format.html { redirect_to action: :index, notice: &#39;Resource was successfully created.&#39; }&lt;br /&gt;          format.json { render action: &#39;show&#39;, status: :created, location: instance_variable_get(&quot;@#{model_name.underscore}&quot;) }&lt;br /&gt;        else&lt;br /&gt;          format.html { render &quot;concerns/admin/new&quot; }&lt;br /&gt;          format.json { render json: instance_variable_get(&quot;@#{model_name.underscore}&quot;).errors, status: :unprocessable_entity }&lt;br /&gt;        end&lt;br /&gt;      end&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    def update&lt;br /&gt;      respond_to do |format|&lt;br /&gt;        if instance_variable_get(&quot;@#{model_name.underscore}&quot;).update(resource_params)&lt;br /&gt;          format.html { redirect_to action: :index, notice: &#39;Resource was successfully updated.&#39; }&lt;br /&gt;          format.json { head :no_content }&lt;br /&gt;        else&lt;br /&gt;          format.html { render &quot;concerns/admin/edit&quot; }&lt;br /&gt;          format.json { render json: instance_variable_get(&quot;@#{model_name.underscore}&quot;).errors, status: :unprocessable_entity }&lt;br /&gt;        end&lt;br /&gt;      end&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    def destroy&lt;br /&gt;      instance_variable_get(&quot;@#{model_name.underscore}&quot;).destroy&lt;br /&gt;&lt;br /&gt;      respond_to do |format|&lt;br /&gt;        format.html { redirect_to action: :index, notice: &#39;Resource was successfully destroyed.&#39; }&lt;br /&gt;        format.json { head :no_content }&lt;br /&gt;      end&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    private&lt;br /&gt;&lt;br /&gt;    def set_model&lt;br /&gt;      @model = controller_name.classify.constantize&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    def model_name&lt;br /&gt;      @model.to_s&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    def set_resource&lt;br /&gt;      instance_variable_set :&quot;@#{model_name.underscore}&quot;, @model.find(params[:id])&lt;br /&gt;    end&lt;br /&gt;&lt;br /&gt;    def resource_params&lt;br /&gt;      params.require(model_name.underscore.intern).permit(*@model.column_names.map(&amp;amp;:intern))&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt; &lt;br/&gt;&lt;h3&gt;app/controllers/authors_controller.rb&lt;/h3&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;class AuthorsController &amp;lt; ApplicationController&lt;br /&gt;  require &quot;crudable&quot;&lt;br /&gt;  include CRUDable&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt; &lt;br/&gt;&lt;h3&gt;app/controllers/books_controller.rb&lt;/h3&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;class BooksController &amp;lt; ApplicationController&lt;br /&gt;  require &quot;crudable&quot;&lt;br /&gt;  include CRUDable&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;Concern moduleは〜ableという名前を付ける慣例っぽいので、ここではCRUDableとしてみました。元々のauthors_controller.rb、books_controller.rbはCRUDableをincludeするだけにまで単純化できました。いかがでしょうか？&lt;/p&gt; &lt;p&gt;ポイントとしてはset_modelコールバックで現在のコントローラ名を取得し、そこからモデルクラスへ@modelで参照できるようにしています。&lt;/p&gt; &lt;p&gt;ちなみにここではviewをそのまま使えるように@bookのようなインスタンス変数にセットするようにしていますが、ここを@itemや@resourceのように汎用的な名前にするとさらにコードがシンプルになり、viewも共通化することができます。お試しあれ。&lt;/p&gt; &lt;p&gt;余談ですが、bundle execはシェルの設定でbeというエイリアスで呼べるようにすると少しだけ幸せになれます。&lt;/p&gt; &lt;br /&gt;&lt;br /&gt; こちらの記事はなかの人（&lt;a href=&quot;http://t.y13i.com/&quot; target=&quot;_blank&quot; rel=&quot;fnofollow&quot; title=&quot;ヤマグチ&quot;&gt;ヤマグチ&lt;/a&gt;）監修のもと掲載しています。&lt;br /&gt;元記事は、&lt;a href=&quot;http://t.y13i.com/post/83102660768/ruby-on-rails&quot; target=&quot;_blank&quot; title=&quot;こちら&quot;&gt;こちら&lt;/a&gt; </content><link rel='replies' type='application/atom+xml' href='http://blog.cloudpack.jp/feeds/958743143562488604/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://blog.cloudpack.jp/2014/04/server-news-ruby-on-rails-scaffold-Concern.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/958743143562488604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/958743143562488604'/><link rel='alternate' type='text/html' href='http://blog.cloudpack.jp/2014/04/server-news-ruby-on-rails-scaffold-Concern.html' title='Ruby on Rails: Scaffoldで量産されたControllerの処理をConcernで共通化してみる'/><author><name>hashimoto</name><uri>http://www.blogger.com/profile/04747288723021078616</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3449707904234438373.post-7068479774810008087</id><published>2014-04-21T09:00:00.000+09:00</published><updated>2014-04-21T09:00:04.906+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="news"/><title type='text'>cloudpackブログ週刊レビュー 2014/04/21</title><content type='html'>先週公開した記事は下記となります。&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;tr&gt;&lt;td width=&quot;90&quot;&gt;公開日&lt;/td&gt;&lt;td width=&quot;70&quot;&gt;作成者&lt;/td&gt;&lt;td&gt;タイトル&lt;/td&gt;&lt;/tr&gt;   &lt;tr&gt;&lt;td rowspan=&quot;3&quot;&gt;04月18日（金）&lt;/td&gt;&lt;td&gt;吉田真吾&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://bit.ly/clp_blog_20140418-1&quot; title=&quot;Treasure Dataに大量にデータをアップロードする td import 機能&quot;&gt;Treasure Dataに大量にデータをアップロードする td import 機能&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;がみさん&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://bit.ly/clp_blog_20140418-2&quot; title=&quot;SQSをIAMで制御してfogも使ってみる&quot;&gt;SQSをIAMで制御してfogも使ってみる&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ヤマグチ&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://bit.ly/clp_blog_20140418-3&quot; title=&quot;sensu-chef cookbookとcommunity pluginsを使う際の注意点&quot;&gt;sensu-chef cookbookとcommunity pluginsを使う際の注意点&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;   &lt;/table&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.cloudpack.jp/feeds/7068479774810008087/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://blog.cloudpack.jp/2014/04/news-cloudpack-review-20140421.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/7068479774810008087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/7068479774810008087'/><link rel='alternate' type='text/html' href='http://blog.cloudpack.jp/2014/04/news-cloudpack-review-20140421.html' title='cloudpackブログ週刊レビュー 2014/04/21'/><author><name>hashimoto</name><uri>http://www.blogger.com/profile/04747288723021078616</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3449707904234438373.post-1130820381470265707</id><published>2014-04-18T10:00:00.000+09:00</published><updated>2014-04-18T10:00:00.103+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aws"/><title type='text'>sensu-chef cookbookとcommunity pluginsを使う際の注意点</title><content type='html'>   cloudpack の &lt;a href=&quot;http://t.y13i.com/&quot; target=&quot;_blank&quot; rel=&quot;fnofollow&quot; title=&quot;ヤマグチ&quot;&gt;ヤマグチ&lt;/a&gt;です。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://cdn.aws-plus.com/images/blog/article/img_sensu-chef-cookbook-community-plugins_01.jpg&quot;&gt;&lt;img src=&quot;http://cdn.aws-plus.com/images/blog/article/img_sensu-chef-cookbook-community-plugins_01.jpg&quot; height=&quot;268&quot;  width=&quot;500&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;はい。&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/sensu/sensu-chef&quot;&gt;sensu-chef cookbook&lt;/a&gt;というものがございまして、名前のとおりChefを使ってSensuによる監視システムを構築しようという向きには大変便利なわけでございます。&lt;/p&gt; &lt;p&gt;このcookbookではREADME.mdにもあるように以下のようなLWRPを提供します。&lt;/p&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;sensu_handler &quot;mailer-ses&quot; do&lt;br /&gt;  type &quot;pipe&quot;&lt;br /&gt;  command &quot;mailer-ses.rb&quot;&lt;br /&gt;  severities [&quot;ok&quot;, &quot;warning&quot;, &quot;critical&quot;]&lt;br /&gt;  additional(&lt;br /&gt;    mail_from: &quot;alert@example.com&quot;,&lt;br /&gt;    mail_to:   &quot;alert@example.com&quot;,&lt;br /&gt;  )&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;AWS SESでメール通知するハンドラの設定はこんな感じです。人間が手でJSONを書くという苦行に手を染めず、Ruby DSLで書けて大変にハッピーなわけです。&lt;/p&gt; &lt;p&gt;このDSLを含むrecipeをcookすると以下のようなJSONが/etc/sensu/conf.d/handlers/mailer-ses.jsonに置かれます。&lt;/p&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;{&lt;br /&gt;  &quot;handlers&quot;: {&lt;br /&gt;    &quot;mailer-ses&quot;: {&lt;br /&gt;      &quot;type&quot;: &quot;pipe&quot;,&lt;br /&gt;      &quot;command&quot;: &quot;mailer-ses.rb&quot;,&lt;br /&gt;      &quot;severities&quot;: [&lt;br /&gt;        &quot;ok&quot;,&lt;br /&gt;        &quot;warning&quot;,&lt;br /&gt;        &quot;critical&quot;&lt;br /&gt;      ],&lt;br /&gt;      &quot;mail_from&quot;: &quot;alert@example.com&quot;,&lt;br /&gt;      &quot;mail_to&quot;: &quot;alert@example.com&quot;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;ここでmailer-ses.rbの&lt;a href=&quot;https://github.com/sensu/sensu-community-plugins/blob/master/handlers/notification/mailer-ses.rb&quot;&gt;ソース&lt;/a&gt;を見てみましょう。&lt;/p&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;settings[&#39;mailer-ses&#39;][&#39;mail_to&#39;]&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;ここ。これ、上のLWRPで生成されたJSONではNoMethodErrorになっちゃいます。&lt;/p&gt; &lt;p&gt;こう書き換えましょう。&lt;/p&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;settings[&#39;handlers&#39;][&#39;mailer-ses&#39;][&#39;mail_to&#39;]&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;地味なハマりポイントでした。&lt;/p&gt; &lt;br /&gt;&lt;br /&gt; こちらの記事はなかの人（&lt;a href=&quot;http://t.y13i.com/&quot; target=&quot;_blank&quot; rel=&quot;fnofollow&quot; title=&quot;ヤマグチ&quot;&gt;ヤマグチ&lt;/a&gt;）監修のもと掲載しています。&lt;br /&gt;元記事は、&lt;a href=&quot;http://t.y13i.com/post/82848658482/sensu-chef-cookbook-community-plugins&quot; target=&quot;_blank&quot; title=&quot;こちら&quot;&gt;こちら&lt;/a&gt; </content><link rel='replies' type='application/atom+xml' href='http://blog.cloudpack.jp/feeds/1130820381470265707/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://blog.cloudpack.jp/2014/04/sensu-chef-cookbookcommunity-plugins.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/1130820381470265707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/1130820381470265707'/><link rel='alternate' type='text/html' href='http://blog.cloudpack.jp/2014/04/sensu-chef-cookbookcommunity-plugins.html' title='sensu-chef cookbookとcommunity pluginsを使う際の注意点'/><author><name>hashimoto</name><uri>http://www.blogger.com/profile/04747288723021078616</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3449707904234438373.post-425175946192890565</id><published>2014-04-18T09:30:00.000+09:00</published><updated>2014-04-18T09:30:01.623+09:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aws"/><title type='text'>SQSをIAMで制御してfogも使ってみる</title><content type='html'>  cloudpack の &lt;a href=&quot;https://www.facebook.com/kenkishigami&quot; target=&quot;_blank&quot; rel=&quot;fnofollow&quot; title=&quot;がみさん&quot;&gt;がみさん&lt;/a&gt;です。&lt;br /&gt;&lt;br /&gt;&lt;p&gt;こんばんは&lt;/p&gt; &lt;p&gt;Wizardry 8をSteamで購入しようか悩んでいる私です。&lt;/p&gt; &lt;p&gt;さてSQSの操作をIAMで制御してみました。 &lt;a href=&quot;http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/UsingIAM.html#SQS_ARN_Format&quot;&gt;ドキュメント&lt;/a&gt;にSQSをIAMで制御するための説明が書かれています。&lt;/p&gt; &lt;p&gt;いつもありがとうIAM.&lt;/p&gt; &lt;p&gt;Sendだけ許可するポリシーを作成してみました。&lt;/p&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;{&lt;br /&gt;  &amp;#34;Version&amp;#34;: &amp;#34;2012-10-17&amp;#34;,&lt;br /&gt;  &amp;#34;Statement&amp;#34;: [&lt;br /&gt;    {&lt;br /&gt;      &amp;#34;Action&amp;#34;: [&lt;br /&gt;        &amp;#34;sqs:SendMessage&amp;#34;&lt;br /&gt;      ],&lt;br /&gt;      &amp;#34;Effect&amp;#34;: &amp;#34;Allow&amp;#34;,&lt;br /&gt;      &amp;#34;Resource&amp;#34;: &amp;#34;arn:aws:sqs:&amp;lt;Region&amp;gt;:&amp;lt;AccountNumber&amp;gt;:&amp;lt;QueueName&amp;gt;&amp;#34;&lt;br /&gt;    }&lt;br /&gt;  ]&lt;br /&gt;}&lt;/pre&gt;  &lt;ul&gt;&lt;li&gt;CLIでテスト&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;CLIを使ってメッセージを送信してみます。&lt;/p&gt; &lt;p&gt;[default]がAWSリソースへFull Accessできるプロファイルで、 [profile sqs_user]は先ほど作成した特定のキューに送信だけ許可するプロファイルです。&lt;/p&gt; &lt;p&gt;CLIはprofileの切り替えが楽です。頼りすぎるとミスに繋がりそうで怖い。&lt;/p&gt; &lt;ul&gt;&lt;li&gt;~/.AWS/config&lt;/li&gt;&lt;/ul&gt;  &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;[default]&lt;br /&gt;aws_access_key_id = &amp;lt;Access_key&amp;gt;&lt;br /&gt;aws_secret_access_key = &amp;lt;Securet_access_key&amp;gt;&lt;br /&gt;region = ap-northeast-1&lt;br /&gt;&lt;br /&gt;# sqs only&lt;br /&gt;[profile sqs_user]&lt;br /&gt;aws_access_key_id = &amp;lt;Access_key&amp;gt;&lt;br /&gt;aws_secret_access_key = &amp;lt;Securet_access_key&amp;gt;&lt;br /&gt;region = ap-northeast-1&lt;/pre&gt;  &lt;p&gt;メッセージを送信してみます。&lt;/p&gt; &lt;p&gt;うまくできました。&lt;/p&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;orenomac$ aws sqs send-message --queue-url https://ap-northeast-1.queue.amazonaws.com/&amp;lt;AccountNumber&amp;gt;/myque --message-body sendMessage --profile sqs_user&lt;br /&gt;{    &amp;#34;MD5OfMessageBody&amp;#34;: &amp;#34;4ec122ccd434e6ae2e2e3715bb8abff3&amp;#34;,&lt;br /&gt;    &amp;#34;MessageId&amp;#34;: &amp;#34;423ff494-5e71-4acb-ac21-e23085a7c005&amp;#34;&lt;br /&gt;}&lt;/pre&gt;  &lt;p&gt;さて、受信してみます・・おおっとPermission Denied.やったね。&lt;/p&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;orenomac$ aws sqs receive-message --queue-url https://ap-northeast-1.queue.amazonaws.com/&amp;lt;AccountNumber&amp;gt;/myque --profile sqs_user&lt;br /&gt;&lt;br /&gt;A client error (AccessDenied) occurred when calling the ReceiveMessage operation: Access to the resource https://ap-northeast-1.queue.amazonaws.com/ is denied.&lt;/pre&gt;  &lt;p&gt;デフォルトプロファイル(Full Access)では受信できました。アイアムの効果はぜつだいだ！&lt;/p&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;orenomac$ aws sqs receive-message --queue-url https://ap-northeast-1.queue.amazonaws.com/&amp;lt;AccountNumber&amp;gt;/myque&lt;br /&gt;{&lt;br /&gt;    &amp;#34;Messages&amp;#34;: [&lt;br /&gt;        {&lt;br /&gt;            &amp;#34;Body&amp;#34;: &amp;#34;sendMessage&amp;#34;,&lt;br /&gt;            &amp;#34;ReceiptHandle&amp;#34;: &amp;#34;cOJv9qrD9XLVlpsfwYn3xZcjweCMUMv5LvbKbLf00e/60AOG4+NzgzUJFxdEUVoLSv39cjputHYmrLllzyQfguDHsXYYrc/lkgSbo7GppRF7/wFnPrKMo5rtilzNAQqg6Nd2AoPdRJIASgtQ33FOnhQcy7nESLxrDShj508LYuG1HNezpw3lzxDoXOSuTzGRB3cd8vvXfLDLrPWKOqMOPv2KQ6fUSOG6ZV5NSDfu4bu52HT5EmgGVz014WwlWV0Pl5UMgdCMi6WcobFkDQfhNnX5tKwSFjtyNoDyrzZZZlfiov0Zz8lg8w==&amp;#34;,&lt;br /&gt;            &amp;#34;MD5OfBody&amp;#34;: &amp;#34;4ec122ccd434e6ae2e2e3715bb8abff3&amp;#34;,&lt;br /&gt;            &amp;#34;MessageId&amp;#34;: &amp;#34;423ff494-5e71-4acb-ac21-e23085a7c005&amp;#34;&lt;br /&gt;        }&lt;br /&gt;    ]&lt;br /&gt;}&lt;/pre&gt;  &lt;ul&gt;&lt;li&gt;fog&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;みんな大好きCloud APIのwrapper, fog大先生を使ってCLIでの操作をマネてみました。&lt;/p&gt; &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;#!/usr/bin/env ruby&lt;br /&gt;require &amp;#39;fog&amp;#39;&lt;br /&gt;&lt;br /&gt;sqs = Fog::AWS::SQS.new(&lt;br /&gt;  :provider =&amp;gt; &amp;#39;AWS&amp;#39;,&lt;br /&gt;  :aws_access_key_id =&amp;gt; &amp;#39;&amp;lt;access_key_id&amp;gt;&amp;#39;,&lt;br /&gt;  :aws_secret_access_key =&amp;gt; &amp;#39;&amp;lt;secret_access_key&amp;gt;&amp;#39;,&lt;br /&gt;  :region =&amp;gt; &amp;#39;ap-northeast-1&amp;#39;&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;queue_url = &amp;#39;https://ap-northeast-1.queue.amazonaws.com/&amp;lt;AccountNumber&amp;gt;/myque&amp;#39;&lt;br /&gt;message = &amp;#39;hello fog, AWS provider.&amp;#39;&lt;br /&gt;&lt;br /&gt;result = sqs.send_message(queue_url,message)&lt;br /&gt;&lt;br /&gt;message = sqs.receive_message(queue_url)&lt;br /&gt;&lt;br /&gt;puts message.body[&amp;#34;Message&amp;#34;]&lt;/pre&gt;    &lt;pre class=&quot;html&quot; name=&quot;code&quot;&gt;orenomac$ bundle exec ./sqs.rb&lt;br /&gt;{&amp;#34;Attributes&amp;#34;=&amp;gt;{&amp;#34;SenderId&amp;#34;=&amp;gt;&amp;#34;AIDAIZGRI44CUN5UZ4SMS&amp;#34;, &amp;#34;ApproximateFirstReceiveTimestamp&amp;#34;=&amp;gt;2014-04-15 02:30:24 +0900, &amp;#34;ApproximateReceiveCount&amp;#34;=&amp;gt;1, &amp;#34;SentTimestamp&amp;#34;=&amp;gt;2014-04-15 02:15:52 +0900}, &amp;#34;Body&amp;#34;=&amp;gt;&amp;#34;hello fog, AWS provider.&amp;#34;, &amp;#34;ReceiptHandle&amp;#34;=&amp;gt;&amp;#34;cOJv9qrD9XLVlpsfwYn3xZcjweCMUMv5ijGUABUX80L2hruWsV8UBBpwNhKDnKUDXkwVrAbGYCAmrLllzyQfgr865b19WyWSuFpXfGkSNMDYEvhKpm1cl2UrMLWsMhG0e9koDBHVH1A0owwIOAGeGFVC5ECykfLndAxfAL1B4HS/pP6xaI7yOpMmJceYJ4B7v5XXJYyKG7cPHdQ1At4yanyyBn6SvtNLXO2awX2Q0jvWFRpAD+DgbE9nCZgiVBIBzPr1ii9F9a7/Impl/qI3JafSGhIQViZgCd+SKXyekEWyFhyrwDrmUg==&amp;#34;, &amp;#34;MD5OfBody&amp;#34;=&amp;gt;&amp;#34;81334f7b9c29911a7761fed647886fc4&amp;#34;, &amp;#34;MessageId&amp;#34;=&amp;gt;&amp;#34;515dc6e2-0dbb-4e11-943b-8cfbf4b94682&amp;#34;}&lt;/pre&gt;  &lt;p&gt;AWS-SDKのドキュメントいらずで便利です。&lt;/p&gt; &lt;p&gt;パーフェクトRubyがほしいです&lt;/p&gt; &lt;br /&gt;&lt;br /&gt; こちらの記事はなかの人（&lt;a href=&quot;https://www.facebook.com/kenkishigami&quot; target=&quot;_blank&quot; rel=&quot;fnofollow&quot; title=&quot;がみさん&quot;&gt;がみさん&lt;/a&gt;）監修のもと掲載しています。&lt;br /&gt;元記事は、&lt;a href=&quot;http://buta9999.hatenablog.jp/entry/2014/04/15/023240&quot; target=&quot;_blank&quot; title=&quot;こちら&quot;&gt;こちら&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.cloudpack.jp/feeds/425175946192890565/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://blog.cloudpack.jp/2014/04/aws-news-sqs-iam-policy-control.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/425175946192890565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3449707904234438373/posts/default/425175946192890565'/><link rel='alternate' type='text/html' href='http://blog.cloudpack.jp/2014/04/aws-news-sqs-iam-policy-control.html' title='SQSをIAMで制御してfogも使ってみる'/><author><name>hashimoto</name><uri>http://www.blogger.com/profile/04747288723021078616</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>