Amazon EC2 のキーペアとは

公開鍵(パブリックキー)暗号における公開鍵(パブリックキー)と秘密鍵(プライベートキー)のペアをキーペアと呼ぶ。

参考

Amazon EC2 はパブリックキー暗号を使用して、ログイン情報の暗号化と復号を行います。パブリックキー暗号はパブリックキーを使用してデータを暗号化し (パスワードなど)、受信者はプライベートキーを使用してデータを復号します。パブリックキーとプライベートキーは、キーペアと呼ばれます。

Amazon EC2 のキーペア - Amazon Elastic Compute Cloud

Public key cryptography, or asymmetric cryptography, is any cryptographic system that uses pairs of keys: public keys which may be disseminated widely, and private keys which are known only to the owner. This accomplishes two functions: authentication, which is when the public key is used to verify that a holder of the paired private key sent the message, and encryption, whereby only the holder of the paired private key can decrypt the message encrypted with the public key.
In a public key encryption system, any person can encrypt a message using the public key of the receiver, but such a message can be decrypted only with the receiver's private key. For this to work it must be computationally easy for a user to generate a public and private key-pair to be used for encryption and decryption. The strength of a public key cryptography system relies on the degree of difficulty (computational impracticality) for a properly generated private key to be determined from its corresponding public key. Security then depends only on keeping the private key private, and the public key may be published without compromising security.

Public-key cryptography - Wikipedia

Lambda(Python) を実行すると "Unable to import module '...': No module named ..."

事象

  • Lambda(Python) のコードと外部ライブラリを zip に圧縮し、AWSマネジメントコンソールからアップロードして実行すると、"Unable to import module" エラーが発生する
Unable to import module '...': No module named ...

原因

ディレクトリではなく、ディレクトリの中身を圧縮します。ZIP ファイルの内容は、Lambda 関数の現在の作業ディレクトリとして利用できます (例: /project-dir/codefile.py/lib/yourlibraries)。

デプロイパッケージの作成 (Python) - AWS Lambda

対策

ディレクトリの中身を圧縮する。
f:id:cloudmemo:20161217100822p:plain
コマンドラインでは以下の通り。

$ ls
lambda_sample
$ zip -r lambda_sample lambda_sample
$ cd lambda_sample
$ zip -r ../lambda_sample .

補足

$ zip -r lambda_sample_dir lambda_sample
$ unzip lambda_sample_dir.zip 
Archive:  lambda_sample_dir.zip
   creating: lambda_sample/ ★展開時にサブディレクトリができる
   creating: lambda_sample/beautifulsoup4-4.5.1.dist-info/
  • ディレクトリを圧縮すると展開時にディレクトリが作成され、Lambda > Functions > ファンクション名 > Configuration > Handler とマッチしない。

f:id:cloudmemo:20161217105648p:plain

f:id:cloudmemo:20161217105656p:plain


AWS Lambda を使ってみた

S3バケット作成

  • [AWSマネジメントコンソール]-[S3]
  • [バケットを作成]
    • バケット名: hatenafotolife
    • リージョン: Tokyo

IAMロール作成

  • [AWSマネジメントコンソール]-[IAM]-[ロール]-[新しいロールの作成]
    • [ロール名の設定]-[ロール名]: s3access
    • [ロールタイプの選択]: [AWSサービスロール]-[AWS Lambda]-[AmazonS3FullAccess]

デプロイパッケージ作成

  • Python 2.7*1 でコードを書く。
  • デプロイパッケージに同梱する外部ライブラリをインストール。
$ pip install BeautifulSoup -t ./
  • デプロイパッケージ作成。
$ zip -r ../test .

Lambda Function 作成

  • [AWSマネジメントコンソール]-[AWS Lambda]-[Get Started Now]-[Configure Function]を選択
    • Configure Function
      • Name: Test
      • Runtime: Python 2.7
    • Lambda function code
      • [Code entry type]-[Upload a .ZIP file] で test.zip を選択
    • Lambda function handler and role
      • Handler: test
      • Role: Choose an existing role
      • Existing role: s3access
    • Advanced settings
      • Timeout: 5 min

実行してみる

  • Function を選択して、Test をクリック

*1:2016年12月時点では Lambda で Python 3 は使えない

Amazon Redshift 無料トライアルを使ってみる

Amazon Redshift の無料トライアルを使ってみた。
DC1.Large ノードを2ヶ月間(1ヶ月あたり750時間無料)使用できる。
3ノードクラスターを作ったので、無料で使えるのは1ヶ月あたり250時間(750時間 / 3ノード)になる。
使わないときはクラスターを Delete & Backup し、使う時だけ Restore すれば利用時間を節約できる。
Redshift への接続は手元の Windows 7(64bit) に SQL Workbench/J をインストールして JDBC 接続した。

セットアップ

クラスターを作成する
  • [AWSマネジメントコンソール]-[Redshift]を選択
  • [Launch Cluster]からウイザードに従って以下の設定でクラスタを作成
  • CLUSTER DETAILS
    • Cluster Identifier: test-cluster
    • Database Name: 空白(デフォルトのdevになる)
    • Database Port: 5439(デフォルト)
    • Master Username: test
    • Master User Password: 任意のパスワード
    • Confirm Password: 任意のパスワード
  • NODE CONFIGURATION
    • Node Type: dc1.large
    • Cluster Type: Multi Node
    • Number of Compute Nodes: 3
  • ADDITIONAL CONFIGURATION
    • Publicly Accessible: Yes
アクセス許可設定
  • [AWSマネジメントコンソール]-[Redshift]-[Resources]-[Clusters]で "test-cluster" を選択
  • [Configuration]タブ-[VPC Security Groups]の "default" をクリック
  • [インバウンド]-[編集]-[ルールの追加]で以下のルールを追加
    • タイプ: 全てのTCP
    • 送信元: 任意の場所

Redshiftに接続する

SQL Workbench/J をインストール
  • SQL Workbench/J -  Downloads の "Download generic package for all systems" から Workbench-Build121 をダウンロード・解凍
  • SQLWorkbench64.exe を実行して起動
  • [File]-[Connect window]を選択
    • URL: jdbc:redshift://...:5439/dev # -[Redshift]-[Resources]-[Clusters]-[test-cluster(作成したクラスタ)]-[JDBC URL] の URL を入力する
    • Username: test
    • Password: クラスター作成時に設定したパスワードを入力
  • 以下のSQLを実行して結果が返ってくることを確認する
select * from pg_class limit 100;

停止・起動

停止&バックアップ
  • [Redshift]-[Resources]-[Clusters]で "test-cluster" を選択
  • [Configuration]-[Cluster]で "Delete" を選択(必ず1度はスナップショットを作成する)
    • Create snapshot: Yes
    • Snapshot name: bkup20161127
起動
  • [Redshift]-[Resources]-[Snapshots]を選択
  • 任意のスナップショットを選択し、[Actions]で[Restore From Snapshot]を選択
  • [Restore]をクリック

AWS CloudWatch でクラウド破産を防ぐ

AWS を使ってみたいけど、クラウド破産しました - PDF のようなクラウド破産が怖い場合は、CloudWatch で監視し、金額の閾値を超えるとメール通知するよう設定することができる。
CloudWatch 自体の料金は料金監視に使う程度なら無料利用枠の範囲のおさまる模様。

設定方法

AWS マネジメントコンソールでポチポチ設定するだけ。詳しくはアラートと通知で請求額をモニタリング - AWS 請求情報とコスト管理 参照。

  • Billing and Cost Management コンソールで請求アラートを有効化する
  • US East (N. Virginia) リージョンの CloudWatch コンソールで請求アラートを作成する
    • 2016年11月時点で CloudWatch を利用できるのは US East (N. Virginia) リージョンのみ

CloudWatch の無料利用枠

  • 10メトリクス分の料金
  • 10アラーム分の料金
  • 100万回のAPI リクエスト分の料金
  • 1か月あたり5GBのデータの取り込みおよび5GBのアーカイブされたストレージ

詳しくは料金 - AWS CloudWatch | AWS参照。