カテゴリー別アーカイブ: 未分類

PostgreSQL セットアップからDBの作成&削除まで

| コメントをどうぞ

いつ「ポスグレ使う」と言われてもウロタエないように少し調べてみました。
今回はインストールとDBを作成および削除する方法について分かったことを記します。
環境はCentOS 6.5です。

セットアップ

# yum postgresql-server

yumpostgresql-serverをインストールすると、依存関係であるpostgresqlpostgresql-libsもインストールされます。

  • postgresql
  • postgresql-libs
  • postgresql-server

サービスを起動しようとしたところ、以下のメッセージが表示されて起動できませんでした。

# service postgresql start
/var/lib/pgsql/data is missing. Use "service postgresql initdb" to initialize the cluster first.

初期化のため、最初にservice postgresql initdbを実行しなければならないようです。
serviceコマンドでinitdbは指定したことが無かったので、どういうことかとrcスクリプトを見てみたところ

# cat /etc/init.d/postgresql

initdb()とcase文にinitdbがありました。(startstopが規定というわけではないんですね。)
納得できたのでメッセージ通りにinitdbを実行し、サービスを起動しました。

# service postgresql initdb
# service postgresql start

ちなみにOS起動時にPostgreSQLのサービスを自動で開始したい場合はchkconfigコマンドで設定できます。

# chkconfig postgresql on

DBの作成と削除

DBの作成と削除はそれぞれ次のコマンドで可能です。

createdb ${DB名}
dropdb ${DB名}

ただし、PostgreSQLではこれらの操作はrootユーザーではできません。rootユーザーで操作しようとすると次のメッセージが表示されました。

createdb: could not connect to database postgres: FATAL:  ユーザ"root"のIdent認証に失敗しました

なのでインストール時に自動で作成されたユーザーpostgresを使用します。

su - postgres

なお、作成されたユーザーとグループは次のコマンドで確認できます。

# id postgres
uid=XX(postgres) gid=XX(postgres) groups=XX(postgres)

コマンドラインによる操作

psqlコマンドでPostgreSQLをコマンドラインで操作できます。

PostgreSQLのバージョンの表示

# psql --version

コマンドのヘルプの表示

# psql --help

DBの一覧

# psql --list

DBへの接続

#psql ${DB名}

接続が成功するとプロンプトが${DB名}=#になり、テーブルの作成や削除、CRUDの実行が可能になります。
以下にDBに接続している状態で使用可能なコマンドの一部を記します。

テーブルの一覧

=# \d

指定したテーブル情報の一覧

=# \d ${テーブル名}

DBからの切断と終了

=# \q

AWSの新サービス Zocaloをリミテッドプレビュー申請してみました。

| 3件の返信

7月18日(金)のAWS SUMMIT 2014に参加した際にAWSのブースでZocaloなる共有ストレージが紹介されていて興味があったのですが、現段階で配布用の資料などが無かったようで手ぶらで帰ってきました。「テスト(リミテットプレビュー)利用だけならもう出来ますよ」とAWSの方が言っていましたので利用してみました。

その前にZocaloが何なのか自分が今理解出来ている範囲の概要が以下になります。

AWS Zocalo概要

● 利用可能リージョンはUS、EU。日本リージョンはまだ来ていません。

● クラウド上の共有ストレージでブラウザを経由して利用する為特別なアプリケーションのインストール不要で利用が出来る。(同期用の無料専用アプリもあります。)

● ブラウザでアクセスする為のURLの一部は自分で任意のものを設定して外部からアクセス出来る。

● デスクトップ上のファイルをZocaloにアクセスしているブラウザにドラッグ&ドロップでファイルをアップロード出来る。

● ユーザを追加したり権限を設定したり出来る。ActiveDirectoryとも連携出来る。

● ブラウザ経由なのでスマートフォン、タブレットからも利用可能。

● 1ユーザにつき月額5ドル。ファイルを置ける容量は1ユーザにつき200GBまで。それ以上は1TB迄は0.003ドル/1GB。

※ 最初の30日間は無料トライアル

AWS Zocaloテスト利用申請(リミテッドプレビュー)

使ってみないとわからない部分が多いので申請して使ってみます。

AWS Zocaloテスト利用申請

  1. AWSコンソールから申請
  2. 1

    「Zocalo」とメニューが増えているので選択します。

  3. 必要事項記入
  4. 2

  5. AWSからメール受信
  6. 6

    すぐにAWSからメールが届きます。ここで数日待ちます。

  7. 利用可能メール通知
  8. 4

    自分の場合は5日ほどで来ました。

AWS Zocaloテスト利用開始

  1. AWSコンソールから利用開始
  2. 3

    7

    再度AWSコンソールから利用したリージョンを選択して「Get Started Now」を選択して「Quick Start」と進めていきます。

    8

    Regionを選択した後、SiteURLで任意の部分を記入します。最後に管理者のメールアドレス、名前を入力して「Complete Setup」をクリックします。

    9

    すぐに管理者として設定したメールアドレスにメールが届きます。メール本文内の「Get Started!」をクリックするとZocaloのログイン画面に飛びます。

    ※ 初回はログイン用パスワードを設定します。

    10

    Zocaloログイン後メニュー画面。

    1

  3. ファイルアップロード
  4. ログイン後のメニュー画面。「+Add Content」でローカルPCのファイルを選択するかブラウザ上にファイルをドラッグ&ドロップで追加出来ます。

    ※ フォルダごとアップロードは出来ません。

    フォルダで管理したい場合は「+Create Folder」でコンソールから作成します。

    2

  5. 共有ユーザ作成
  6. 4

    ファイルを共有したいユーザを作成します。「Administration」から「Invite Users」を選択します。

    5

    「Type an Email」の欄に共有ユーザにしたいユーザのメールアドレスを入力するとそのユーザに招待メールが飛びます。

    9

    招待されたユーザに飛ぶメール。招待されたユーザは管理者と同様の手順でZocaloの利用が可能になります。

  7. ファイル共有
  8. ファイルを置いた後にフォルダもしくはファイルを選択して「Shared」を選択します。フォルダを共有した場合は中のファイルが全て共有され以降置いたファイルも共有されます。

    1

    2

    「Share」をクリックします。

    4

    共有したいユーザを入力すると共有出来ます。

    共有された側の画面
    5

    「Shared with me」の項目に表示されます。

文書の共有をしてみる

  1. ワードファイルを開く




  2. PCで開く

    1

    問題無く見れます。

    iphoneで開く

    image (4)

    問題無く見れます。

  3. パワーポイントを開く


  4. PCで開く

    2

    問題無く見れます。

    iphoneで開く

    image (5)

    問題無く見れます。

  5. エクセルを開く
  6. PCで開く

    3

    問題無く見れます。

    iphoneで開く

    image (6)

    問題無く見れます。ここまでは順調・・・ただしエクセルは枠線は消えます。(罫線は消えません)

  7. テキストを開く
  8. PCで開く

    4

    ・・・文字化けしてます。iphoneで開いても同じように文字化け。どうやらShift-jisのテキストファイルは化けるようです。アップロードする際にUTF-8に変換してからアップロードすると化けないようです。

    UTF-8に変換したテキストファイル

    5

    ここまででわかったこと

    ●インターネット環境とブラウザがあればファイルの閲覧が可能。
    ●ワード、パワーポイント、エクセルがスマートフォンやタブレットでも見れる。
    ●共有したファイルにコメントをつけれる。コメントがつくとメールで通知される。
    ●ファイルを更新するとバージョンが上がり前のバージョンも見れる為、バージョン管理が出来る。
    ●ブラウザから直接ファイルを編集は出来ない模様。

    と、ここまで利用した感じですが申請・利用がインターネット経由で手軽に行える上にスマートフォンやタブレットでも利用が可能な為、外出先から共有資料を見たり、離れた拠点の人にファイルを渡したりなど色々利用できそうです。

クライアントアプリケーションを使ってみる

ブラウザのみで使っても便利ですが、直接編集が出来ず一旦ダウンロードして編集して再アップロードしたり、ファイルを一括で削除したりが出来ないようですのでクライアントアプリケーションを利用してみます。クライアントアプリケーションは以下の特徴があります。

●ローカルPCの指定フォルダ内とZocaloを同期出来ます。
●指定したローカルフォルダ内のファイルを編集すると自動でZocalo側のファイルも更新されます。(バージョン管理付)
●同期している為ローカル内を消すとZocaloから消えて、Zocaloから消すとローカル内が消えます。
●現在の対応OSはWindows7,Windows8,Windows2003,Windows2008,Mac,iOS,Android。

Zocaloのメニューからクライアントのダウンロードリンクがあるのですが、今クリックすると何故かダウンロードへ飛ばない為、以下のURLからダウンロードします。

http://docs.aws.amazon.com/zocalo/latest/userguide/sync_client_help.html#sync_install_windows

ダウンロードしたファイルをダブルクリックするとインストールが始まります。

※ 結構時間かかります。

1

インストール後起動するとZocaloのアカウント設定、同期フォルダの設定をします。

356

設定完了後は自身のローカルに「zocalo」フォルダが出来上がります。ここにファイルを作成するとZocalo側に同期されます。フォルダを作成するとZocalo側にフォルダが出来ます。ここでワードやエクセル等を編集すればZocalo側も更新され、バージョン管理される為、便利です。

6

追記 Zocaloへの同期フォルダを変更したい場合

クライアントアプリケーションのインストール時にZocaloへ同期するフォルダを設定しますが、これを後からやっぱりNASなどの大きいストレージをマウントしたところに変更したい。という場合はタスクレイのZocaloから一旦登録解除をして再度登録すれば出来ます。

7

タスクトレイに常駐している「Zocalo」右クリックして「登録解除」して再度登録時に別のフォルダを登録すれば変更可能です。この時にAWSのZocalo側にあるファイルが変更したローカルPCのフォルダに同期(ダウンロード)されてきますのでたくさんファイルをZocalo上に置いてたりする場合は注意が必要です。この方法でストレージゲートウェイのマウントしているドライブをZocaloに同期して外部へ共有という変わったやり方もできました。

AWSのSESとPostfixを連携してメール送信

| 1件のフィードバック

前回AWSのSESを設定してses-toolsを使ってEC2インスタンスからメールを送信しました。今回はSESとPostfixを連携してメールを送信します。そうすることによって通常のメールサーバ利用と同じ感覚でEC2インスタンスからメールを送信出来ます。ses-toolsを使う場合はアプリケーションがメール送信したい場合そこらへんを書き直さないとなりませんが、Postfixと連携してしまえばこれまで通りの方法を変える事なくメールが送信出来ます。Postfix使った方が配信性能高いでしょうし。(とは言ってもSES側の1秒あたりの送信上限にひっかかれば送れません。ここは実績積んで上限値を上げていけるので。)

● 必要な手順

  1. SESとPostfix連携に必要なパッケージのインストール
  2. SES用のユーザのSMTP UsernameとSMTP Password
  3. Postfixの設定変更

SESとPostfixの連携方法ですが、TLSを利用してSESと連携する方法とStunnelを利用してSESと連携する方法があります。設定方法はどちらを選ぶにしてもAWSのSESの設定方法のページを見てそのままそのとおりに従えってやれば出来てしまいます。。
(http://docs.aws.amazon.com/ses/latest/DeveloperGuide/postfix.html)

これで今回は終わり。にしてしまうとなんかまずそうなので、自分が少しはまったポイントと実際の設定ファイルを記載します。特に事情が無い限りはTLSでの接続で良いと思います。Stunnelを使う場合はStunnelの起動も必要になりますし一回ローカルに投げてトンネル通してメール送信したいという要件が無ければTLSでもセキュリティは担保されてますので。

認証用のユーザ名とパスワードの設定でハマッた

自分の勘違いが多いに関係してるのですが、ses-toolsを使ってコマンドラインでメール送信する認証情報とSESとPostfixで連携してメール送信に使用する認証情報は別ものです。

● ses-toolsでコマンドラインでメール送信に使用する認証情報はses用ユーザの「アクセスキー」「シークレットキー」

21

● SESとPostfix連携で使用する認証情報は「ユーザ名」「パスワード」

17

前回は「アクセスキー」「シークレットキー」を使い、「ユーザ名」「パスワード」は今回は使用しませんと言った方が必要になります。

ユーザ名はAWSユーザ名(ここでいうses-smtp-xxxx)では無いです。「SMTP Username」の欄を使用します。この情報はユーザ作成時に取得出来るのですが、後で取得する方法がわからないです。。なのでユーザ作成時に大事に保存しておきましょう。

SESとPostfixの連携設定

ここは冒頭に述べたようにAWSのSES設定方法のサイトを見たまま設定すればほぼほぼいけます。導入に必要なパッケージはyumですぐ入れれます。

● 必要なパッケージ導入

# yum install cyrus-sasl-md5 -y
# yum -y install cyrus-sasl-plain cyrus-sasl-md5

SESと連携するのに暗号化が必要の為、上記のパッケージが入っていないと送信時にエラーが出ます。

認証用ファイルを/etc/postfix/sasl_passwdのファイル名で作成します。作成後パーミッションは600にします。

● 認証ファイル作成

email-smtp.us-east-1.amazonaws.com:25 smtpユーザ名:smtpパスワード

※最初のエンドポイントは利用しているSESのエンドポイントを記述します。

● 作成後はファイルを変換します。

postmap hash:/etc/postfix/sasl_passwd

● main.cfを記述します。(例です。inet_interfacesなどは適宜変更して下さい。)

queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
inet_interfaces = localhost
inet_protocols = all
mydestination = $myhostname, localhost.$mydomain, localhost
unknown_local_recipient_reject_code = 550
relayhost = email-smtp.us-east-1.amazonaws.com:25
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_use_tls = yes
smtp_tls_security_level = encrypt
smtp_tls_note_starttls_offer = yes
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
debug_peer_level = 2
debugger_command =
         PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
         ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.6.6/samples
readme_directory = /usr/share/doc/postfix-2.6.6/README_FILES
smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt
smtp_tls_loglevel = 1

以上でPostfixを再起動すればSESとPostfixが連携されてメール送信出来ます。

● メール送信テスト

ローカルからmailコマンドで送信してみます。送信元、送信先は前回書いたように登録したアドレスにします。(プロダクト申請してある場合は送信先は自由に送れます。)

# mail -s "test" -r XX@XX.XX.jp XX@XX.XX.jp
test
EOT

● メールログ

Jul 30 07:55:12 XX-XX-XX-XX postfix/smtp[3486]: A8B9B22E07: to=, relay=email-smtp.us-east-1.amazonaws.com[]:25, delay=2.3, delays=0.04/0.05/1.4/0.81, dsn=2.0.0, status=sent (250 Ok 0000014786440a44-26997760-0624-4163-b571-a5b9af3208ab-000000)

問題なくメール送信が出来ました。

StunnelでSESとPostfixの連携設定

Stunnelを使ってローカルのポートにアクセスしてトンネル経由で送信したい場合の設定を記載します。

● 最初にStunnelをyumでインストールします。

# yum install stunnel -y

● /etc/stunnelにPostfix用のstunnel.confを作成します。(SESのエンドポイントは適宜変更して下さい。)

[smtp-tls-wrapper]
accept  = 2525
client  = yes
connect = email-smtp.us-east-1.amazonaws.com:465

● /etc/postfix/main.cfをstunnel用に設定します。(inet_interface等は適宜変更して下さい。)

queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
inet_interfaces = localhost
inet_protocols = all
mydestination = $myhostname, localhost.$mydomain, localhost
unknown_local_recipient_reject_code = 550
relayhost = 127.0.0.1:2525
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_tls_security_level = may
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
debug_peer_level = 2
debugger_command =
         PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
         ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.6.6/samples
readme_directory = /usr/share/doc/postfix-2.6.6/README_FILES
smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt

● 認証用のsasl_passwdを作成します。

127.0.0.1:2525 smtpユーザ名:smtpパスワード

● 作成後はファイルを変換します。

# postmap hash:/etc/postfix/sasl_passwd

● Stunnelを起動します。

# stunnel /etc/stunnel/stunnel.conf

これでPostfixを起動するとStunnelを使ってPostfixとSES連携でメール送信出来ます。

● メールログ

Aug  1 05:30:35 ip-XX-XX postfix/smtp[1825]: E9DAD22E0A: to=, relay=127.0.0.1[127.0.0.1]:2525, delay=438, delays=436/0.1/0.84/0.82, dsn=2.0.0, status=sent (250 Ok 00000147900c5f6c-9c0facb7-e8c1-4233-9fd6-40205031693e-000000)

ローカルの2525ポートを使ってメールが送信出来ているのがわかります。

AWSのSESを利用してメール送信

| コメントをどうぞ

AWSのインスタンスでメールを送信したい要件が出てきました。オンプレミスの場合では通常以下のような手順を踏んでメール送信の仕組みを構築すると思います。

  1. ドメインの取得
  2. DNSサーバへ登録
  3. メールサーバの構築
  4. 運用開始

スパムメール送信したい等の理由だと上記手順で省けるものが結構ありますが、きちんとしたサービスとしてメール送信をしたい場合は上記のような手順を踏まないとなりません。またメールサーバの構築・運用は悪意あるものに狙われないように作って運用しないとスパムの踏み台にされたりしますし、メールの配信性能のについて検討したり、冗長構成を組んだりと結構大変です。

AWS内のインスタンスにPostfixなどを構築して上記4つの手順を踏めばメール配信は出来きますが、インスタンスが外部に送信するメールは制限が設けられていて、上限に達するとメールが出せなくされます。上限値は公開されていない為わかりません。突然メールが出せなくなる措置をされた方もいるようです。
(https://portal.aws.amazon.com/gp/aws/html-forms-controller/contactus/ec2-email-limit-rdns-requestで申請すれば制限を上げて貰えます。)

ですので、AWSでSES(Simple Email Service)というものを使ってみます。SESを利用すると上記4つの手順は不要でAWSのアカウントとメール受信可能なメールアドレスさえあれば即メール配信が可能です。SESの主な仕様は以下になります。

通常のメールサーバの構築とSESを利用する方法の手順を図にすると以下のようになります。

1

SES(Simple Email Service)の主な仕様

● 利用可能リージョンは、US East (N. Virginia)、EU (Ireland)、US West (Oregon)の3つ。東京リージョンはまだ利用出来ません。その為、東京リージョンから利用するにはこの3つのリージョンのSESへアクセスして利用します。(2014年7月 現在)
● 送信元となるメールアドレスを登録して利用する。
● DKIM(署名)やSPFレコードも対応。
● 送信専用。受信は出来ません。(受信するには別途受信用インスタンスの構築が必要)
  ⇒メールを受け取った人が返信した場合は送信元として登録したところに届きます。
   (メールヘッダの送信元に返すのでSESを介さないから当然ですが。。)
● ドメイン取得、DNS登録不要。
● アンチウィルス、スパム対策機能搭載。
  ⇒SESを利用していてスパムとAWSに認識されて停止されてしまう自爆の可能性あり。
● メール1000通あたり0.10USD。
● 1通の最大サイズ10MB。
● 添付ファイル1GBあたり0.12USD。
● 配信性能は1秒間で5通。24時間で10,000通(利用開始の最初の段階。申請をすると上げて貰えます。)
● 送信方法はAWS提供のメール送信スクリプト(Amazon Simple Email Service Scripts)を利用するか、送信プログラムを作成する。
● Postfixと連携して送る事も可能。

SESの利用開始

AWSアカウント作成時はSESは利用申請しないと利用できない状態ですが、使用感を試す又は簡単な動作テストが行えるSandboxというものは申請無しですぐに利用出来ます。Sandboxでお試し利用して実際に運用したいと思った際にSESの利用申請(Production access)をすればOKです。Sandboxの利用は無料です。

2

SESのSandbox利用開始

いきなりSES申請して使用開始も出来ますが、まずは無料のSandboxで試してみます。
Sandboxは登録したアドレスから登録したアドレスへしか送信出来ず、1日に送れるメールの量も200通までの制限がありますが、テストや使用感を確かめるには充分です。

  1. まず、AWSコンソールからSESを選択します。
  2. 3

  3. 利用可能なリージョンを選択します。どこでも良いのですが、東京リージョンから近い方が良さそうです。
  4. 4

  5. 「Email Address」を選択して送信元となるメールアドレスを登録します。
  6. 5

    「Verify a New Email Address」を選択。
    6

  7. メールアドレスを入力するポップアップが上がるので入力します。
  8. 7

  9. すぐにAWSから入力したアドレス宛にメールが来ますので本文内のURLをクリックすると送信元アドレス登録が完了します。


  10. ● AWSから送られてくるメール
    8
    9

  11. SESの「Email Address」の画面に戻ると登録したメールアドレスのステータスが「Verified」に変わっているので「Send a Test Mail」をクリックしてテストメールを送ってみます。
    10

    ● Sandboxでは登録したアドレスから登録したアドレスにしか送れないので「From」と「To」に登録したアドレスを入力して送信します。(自分で自分に送るような感じです。)
    11

    ● SESから送信したメールが受信出来ました。
    12

インスタンスからSESを利用してメールを送信する。

テストメールをAWSコンソールから送りましたが、毎回AWSコンソールから送るのでは手間がかかるのでインスタンスからSESを利用してメールを送れるようにします。送り方はSESを利用するプログラムを作成するかAWSが配布しているSESのツールを利用します。ここではSESのツールを利用して送ってみます。ツールは広く使われている「AmazonSES-2011-01-24.zip」は不具合(バグ)があってエラーも表示されずに何も起こらないという作業する上でハマる部分があるので新しい「ses-tools-2014-05-14.zip」を利用します。但しコマンドのオプションで旧版にあったものが無くなっているものもありますので要注意となります。(例 -kでキー指定出来るオプションが無くなってます。)SESツールはperlが動作する環境であれば動くようです。ここではLinux(CentOS6系)のインスタンスに導入します。

  1. 以下のURLからSESツール(スクリプト)の最新版「ses-tools-2014-05-14.zip」をインスタンス内にダウンロードします。


  2. ● ダウンロードURL
    https://aws.amazon.com/developertools/Amazon-SES/8945574369528337

  3. zipファイルを解凍するとファイルがバラバラに出てくるのでディレクトリを作成してその中で解凍して実行権を付与します。
  4. # mkdir SESTools
    # mv ses-tools-2014-05-14.zip ./SESTools
    # cd SESTools
    # unzip ses-tools-2014-05-14.zip
    # chmod 755 *.pl
    
  5. SESツールの実行環境(Perlモジュール)をインストールします。
  6. ※実行環境が整ってないとエラーが出てメール送信出来ません。CentOS6系とAmazonLinuxではインストールするものが違っており、AmazonLinuxの方が楽にセットアップ出来ます。

    ● CentOSでのモジュール導入

    # yum install perl-libxml-perl.noarch -y
    # yum install perl-XML-LibXML-Enhanced.noarch -y
    # yum install perl-XML-LibXML.x86_64 -y
    # yum install perl-XML-LibXML-Debugging.noarch -y
    
    ● yumで見つからないものもあったのでCPANからも入れます。
    # perl -MCPAN -e shell
    cpan[]> install XML::LibXML
    cpan[]> install Digest::SHA
    cpan[]> install URI::Escape
    cpan[]> install Bundle::LWP
    cpan[]> install MIME::Base64
    cpan[]> install Crypt::SSLea
    
    ● CPANで入れたXML::LibXMLで動かせなかった場合はソースファイルをダウンロードして入れます。
    # wget ftp://xmlsoft.org/libxml2/libxml2-2.7.2.tar.gz
    # tar xvf libxml2-2.7.2.tar.gz
    # cd libxml2-2.7.2
    # ./configure
    # make
    # make install
    

    ● AmazonLinuxでのモジュール導入。

    # yum install perl-XML-LibXML.x86_64 -y
    # yum install perl-Switch.noarch -y
    # yum install perl-LWP-Protocol-https.noarch -y
    
  7. SES用ユーザ作成とアクセスキー、シークレットキー取得


  8. 管理者アカウントでアクセスキー、シークレットキーを既に持っている場合はそれを利用して送る事も出来ますが、セキュリティの面や複数のユーザが各々構築したインスタンスからメール送信することを想定してSES用ユーザを作成してアクセスキー、シークレットキーを取得します。

    ● SESのメニュー画面から「SMTP Setting」を選択して「Create My SMTP credentials」をクリックします。
    13

    ● SESのIAM権限がついたユーザが作成され自動的に名前が割り振られるので(変更出来ます。)「Create」をクリックします。
    14

    ● ユーザを作成すると「SMTP Username」と「SMTP Password」が取得出来きますのでダウンロードするか控えておきます。ただ、これは今回は使用しません。(でも重要な情報)
    17

    ● 作成時に割り当てられるIAM権限では足りないので作成されたユーザのIAM権限を以下のようにIAM権限を書き変えます。

     ● AWSコンソールのIAMへアクセスして。
    15


     ● SES用ユーザを選択して「Manage Policy」をクリック。
    16


     ● 権限を以下のように書き変えます。

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "ses:SendRawEmail",
                    "ses:SendEmail"
                ],
                "Resource": "*"
            }
        ]
    }
    

     ● 次にSES用ユーザ上で右クリックして「Manage Access Keys」を選択します。
    18

     ● 「Create Access Key」をクリックしてアクセスキーを作成して控えておきます。
    19

    21

以上で準備完了です。インスタンスからメールを送信してみます。SESツールを置いたディレクトリへ移動して、先ほどのアクセスキーとシークレットキーをエクスポートします。

export AWS_ACCESS_KEY_ID=AKIAJN7RAEHXXXXXXXXXXXXXXXXXXXXX
export AWS_SECRET_ACCESS_KEY=VjH6P3k7imWkK19YWZuqUXXXXXXX

登録したメールアドレスから登録したメールアドレスへメールを送ってみます。-sで件名、-fで送信元アドレス、スペースを開けて送信先アドレスです。実行後に本文を書いてctrl+Dで送信します。

./ses-send-email.pl -s test -f test@hogehoge.xx test@hogehoge.xx
test   ENTERキー
てすと ENTERキー
テスト ctrl+Dキー

受信出来ました。
22

これでSESのSandbox機能の利用が出来るようになりました。秒間1通で24時間で200通までしか送れませんが無料なのでメール配信頻度が低い場合などはメーリングリストの宛先に通知メールを出すなどすれば無料のまま使い続けれるかも?しれません。

本運用する場合はAWSコンソールのSESのメニューから「Production Access」をクリックして申請すると、1~2日でAWSからSES利用許可の旨がメールで送れられてきて商用利用が可能になります。

23

※申請をしてAWSから許可のメールが来てもAWS側の不具合で外部にメールが送れない場合があります。
 正常に許可されていれば「Production Access」のボタンは無くなります。許可されたのにまだ「Production Access」のボタンがある場合はAWSへ問合せをしましょう。

運用中のメールの配信状況、バウンスやrejectメールの状況はダッシュボードで確認出来ます。
(Sandbox利用でも確認出来ます。)

24

SESツールでCLIでの確認も出来るので監視ツールなどで監視出来ます。

SentLast24Hours Max24HourSend   MaxSendRate
3               10000           5

Timestamp               DeliveryAttempts        Rejects Bounces Complaints
2014-07-02T09:19:00Z    6                       0       0       0
2014-07-02T09:34:00Z    4                       0       0       0
2014-07-02T18:04:00Z    26                      0       0       0
2014-07-02T23:04:00Z    2                       0       0       0
2014-07-02T23:19:00Z    2                       0       0       0
2014-07-03T02:19:00Z    18                      0       0       0

次回はSESとPostfixを連携してメールを送る方法記載します。これをすると従来のメール配信に近い形でAWSのインスタンスからメール送信が出来るようになります。

OZP73_atamagawareruyouniitai20130707500

社内メールがいっぱい過ぎてメールボックスがパンク!回避する方法とは?

| コメントをどうぞ

朝会社へ来るとメールボックスの中身が、

未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読未読・・・

軽く100件。

とりあえず全部、チェックを入れてアーカイブ。
ふぅ。すっきり。

3日後・・・

「あれ?〇〇さん、Xの件メールしたんだけどどうなってる?」

(え・・・まずい・・・)

「はい、Xの件ですよね。え〜と・・・なんでしたっけ」

おお・・・重要なメールまでアーカイブしてしまった!!

こんな経験、一度はありませんか?

続きを読む

VMWAREでセットアップ済の仮想マシンをテンプレート化

| コメントをどうぞ

前回AWSのインスタンスのテンプレート化を書きましたので今回はVMWARE(ESXi)のテンプレート化について書きます。パブリッククラウドの勢いに押されて下降気味のVMWAREのテンプレート化に需要があるか微妙ですが。。

ただ、AWSのWindowsのテンプレート化の「ec2config」はAWS専用ですが、これから行う「sysprep」は他の仮想基盤で共通で利用できます。(Linuxのテンプレート化も同じく)

Windowsの一般化(sysprep)

AWSではsysprepを使用せずに「EC2ConfigService Settings」というツールで行いしたが、通常は「syspre」を使用して一般化します。

  1. セットアップ済のWindowsインスタンスへRDPがVMWAREコンソールで接続。
  2. イベントログ等のWindowsのログやアプリケーションをインストールした場合はそれらのログやシリアル情報、個人を特定出来る情報などがある場合は全削除します。
  3. ※syspreでWindowsのシリアルは初期化されますが、アプリケーションのシリアル情報は初期化してくれません。

  4. sysprepは標準のツールを使います。c:\windows\system32\sysprep\に移動してsysprep.exeを実行します。
  5. ※Windowsをインストールすると自動的にsysprepツールが入っています。
    1

  6. 「システム準備ツール」が起動するので「一般化する」にチェックをつけ、シャットダウンオプションを「シャットダウン」を選択してOKをクリックします。
  7. 2

  8. 一般化が始まり自動的にシャットダウンします。(数分かかる場合があります。)
  9. 3

  10. シャットダウン完了後の仮想マシンをテンプレートに変換すれば一般化されたテンプレートの出来上がりです。

● 一般化されたテンプレートから作成されたWindows仮想マシン
4

Linuxの一般化(Sealing)

Linuxの一般化はAWSのインスタンスのテンプレート化の手順にいくつかの手順を付けたした形になります。※RedHat系の手順になります。

  1. rootの.ssh内にあるファイルを全削除
  2. /etc/ssh内のssh_hostではじまるファイルを全削除
  3. /tmpやその他にある不要ファイル、作業ファイルの削除
  4. /var/log以下のログを全部削除(ログのみ消します。ディレクトリは消さない。)
  5. ホスト名を固定設定している場合は元に戻す。合わせて/etc/hostsファイルも初期状態に。
  6. /etc/udev/rules.d/下の70-で始まるファイルを全て消します。
  7. # rm -rf /etc/udev/rules.d/70-*
    

    ※これを行わないとVMWAREではMACアドレスの関係で新規作成した仮想マシンのeth0になるべきものがeth1、eth2などになります。

  8. ルートディレクトリ/に以下の名前の空ファイルを作成します。
  9. # touch /.unconfigured
    

    ※この空ファイルがあると次回起動時にシステムが初期化されます。

  10. 電源を落とします。
  11. # poweroff
    
  12. 電源を落とした後に仮想マシンをテンプレート変換すると一般化されたテンプレートの出来上がりになります。

● 一般化されたLinuxテンプレートから作成された仮想マシン(パスワード設定や初期設定から始まります。)
6
7

AWSでセットアップ済のインスタンスをテンプレート化(AMI化)

| コメントをどうぞ

AWSでマーケットプレイスのAMIからlaunchしたインスタンスでセットアップ後に社内の別部署、もしくは外部公開用などのテンプレートとしてAMIにしたい場合の方法です。

Linuxの場合は特に何も考えなくてもセットアップ済のインスタンスをAMI化してそこからインスタンスを作成すると作成時に新規パスワードを設定させるメニューが出るようにお膳立てしてくれていますが、Windowsはセットアップ時に設定したパスワードのままとなり、別のAWSアカウントで作成すると「Get Windows Password」がいつまでたっても応答が戻ってこず前のパスワードを知らないとログイン出来ません。またSIDという個々を識別する情報も同じになる為色々と不具合が出る場合があります。Linuxでもホスト名などを設定してしまっている場合は公開用に設定しなおす必要があります。これを、一般化といいます。WindowsとLinuxで呼び方が違います。(やってるとこは同じような事)

    • Windowsはsysprepと呼びます。
    • スタート→「EC2ConfigService Settings」
    • Linuxはsealingと呼びます。

Windowsの一般化(sysprep)

sysprepと書いていますが、AWSではsysprepを使用せずに「EC2ConfigService Settings」というツールで行います。(マーケットプレイスからLaunchしたWindowsに最初から入っています。)

      1. セットアップ済のWindowsインスタンスへRDPで接続
      2. ※個人情報が特定できそうなファイルやシリアル関係、ログは削除しておきます。

      3. 「スタート」→「EC2ConfigService Settings」

1

  1. コンピュータ名をランダムにするには「general」タブの「Set Computer Name」にチェックをつけます。(コンピュータ名を固定の場合はつけない)。「AWSの壁紙(インスタンスタイプが白文字で表示されるもの)を利用する場合は「Wallpaper Information」にチェックをつけます。

2

  1.  外部の利用者が自身のAWSアカウントのパスワードでアクセス出来るように「Image」タブで「Random」にチェックをつけて「Shutdown with Sysprep」をクリックします。確認のポップアップが上がるのでOKを押すと一般化を伴うシャットダウンが実行されます。

3

シャットダウン完了後は通常のAMI作成で作成したものからインスタンスをLaunchしたものに対して「Get Windows Password」でパスワードを取得してRDPでアクセス出来ます。

Linuxの一般化(Sealing)

Linuxの場合は特に意識せずともインスタンスセットアップ後に通常のAMI作成→作成したAMIからLaunchで利用できます。(VMWAREでは一般化しないとテンプレートにできません。) その為、Linuxのテンプレート化は以下のことをします。

  1. rootの.ssh内にあるファイルを全削除
  2. /etc/ssh内のssh_hostではじまるファイルを全削除
  3. /tmpやその他にある不要ファイル、作業ファイルの削除
  4. /var/log以下のログを全部削除(ログのみ消します。ディレクトリは消さない。)
  5. ホスト名を固定設定している場合は元に戻す。合わせて/etc/hostsファイルも初期状態に。

1.の作業で不要ファイルの他に他サーバへログインする為の鍵やライセンスキーなど置いてある場合はそれも削除します。以上の作業を行った後にAMI化します。

  • VMWAREでのテンプレート化について

AWSではありませんが、VMWAREで利用できる一般化テンプレートの作成方法はWindowsは「Sysprep」、Linuxは「Sealing」になります。こちらが一般的な一般化の方法になります。VMWARE用の一般化テンプレートの作成方法は次回記載します。