5.X系のElasticSearch + KibanaをMacにインストール
本日、Elastic{ON}Tour 2016に参加します。
Tokyo 2016 | Elastic
準備として、5.X系のElasticSearch + KibanaをMacをインストールしたので手順をメモしておきます。
こちらを参考にしながらインストールしました。
innu.hateblo.jp
最新版の5.1.1をMacにインストールしました。
ElasticSearchダウンロード
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.1.1.tar.gz $ tar xvzf elasticsearch-5.1.1.tar $ cd elasticsearch-5.1.1 $ ./bin/elasticsearch $ open http://localhost:9200
JSONが表示されたらOKです。
Kibanaダウンロード
$ wget https://artifacts.elastic.co/downloads/kibana/kibana-5.1.1-darwin-x86_64.tar.gz $ tar xvzf kibana-5.1.1-darwin-x86_64.tar.gz $ cd kibana-5.1.1-darwin-x86_64 $ ./bin/kibana $ open http://localhost:5601
リッチなUIが表示されたらインストールOKです。
Serverless Web Application Workshop をCLIでやってみた Lab2: Beta Sign-up Mailing List
サーバーレスアーキテクチャ Advent Calendar 2016 の13日目の記事です。
「Serverless Web Application Workshop をCLIでやってみた Lab 1: Static Website Hosting」 の続きになります。
yamano3201.hatenablog.jp
大枠はこちらで紹介されています。
qiita.com
コンソールでの手順はREADMEに記載されています。
github.com
(できるだけ)CLIに置き換えてみたものをメモしていきます。
作業はMacで、リージョンはバージニアを想定して書いてます。
ワークショップは全部で4つあります。
- Lab 1: Static Website Hosting
- Lab 2: Beta Sign-up Mailing List
- Lab 3: Administrative Interface
- Lab 4: Product Update Blog
今回はLab 2: Beta Sign-up Mailing Listについて書いていきます。
- やること
- 送信元メールアドレス検証
- LambdaとSESにアクセス可能なIAMロールの作成
- Emailの値を取得するためのAmazon DynamoDBテーブルを作成
- 認証のいらないユーザがアクセス可能なAmazon Cognito IDプールの作成
- 認証のいらないユーザ用のIAMロールの作成とポリシーの付与
- 作成したAWS Cognito IDプールに作成したロールをセット
- ワークショップ用に用意されたlab2のファイルをS3にsync
- CloudFront経由でアクセスしてSIGN UP
- SESを使ってメールを送信するLambdaを作成
- DynamoDBのトリガーを作成
- 電子メールが送信されることを確認
- 最後に
やること
ベータサービスにユーザがサインアップするメーリングリストを作成。認証のいらないユーザなので、Cognito identity poolとIAM policyを使って、DynamoDBにメールアドレスが書き込まれ、DyanmoDB StreamsからのLambda連携で確認メールをSESを使って配信する。一般ユーザがサインアップ後、確認メールが自身のメールアドレスに届く事を確認する。
送信元メールアドレス検証
- XXX@XXXXXX.XXXにはメールが受け取れる自分のアドレスを設定しましょう。
- 登録した送信元メールアドレスに検証要求メールが届くので、リンクをクリックして検証しましょう
$ export EMAIL_ADDRESS=XXX@XXXXXX.XXX $ aws ses verify-email-identity --email-address ${EMAIL_ADDRESS}
LambdaとSESにアクセス可能なIAMロールの作成
- LambdaとSESにアクセスできるIAMロールを作成しておきます。
- ロールを作成してからポリシーをアタッチします。
- 後半のLambda作成まで出番はありません。
$ export ASSUME_ROLE=assume_role.json $ cat << EOF > ${ASSUME_ROLE} { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } EOF $ aws iam create-role --role-name LambdaSESRole --assume-role-policy-document file://${ASSUME_ROLE} $ aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonSESFullAccess --role-name LambdaSESRole $ aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole --role-name LambdaSESRole
Emailの値を取得するためのAmazon DynamoDBテーブルを作成
- DynamoDBテーブルを作成します。
- 後で使うのでTableArnをレスポンスから取得しておきます。
$ aws dynamodb create-table --table-name Wildrydes_Emails --attribute-definitions AttributeName=Email,AttributeType=S --key-schema AttributeName=Email,KeyType=HASH --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 > dynamodb.json $ export TABLE_ARN=$(cat dynamodb.json | jq -r '.TableDescription.TableArn')
認証のいらないユーザがアクセス可能なAmazon Cognito IDプールの作成
$ aws cognito-identity create-identity-pool --identity-pool-name wildrydes --allow-unauthenticated-identities > cognito.json export COGNITO=$(cat cognito.json | jq -r '.IdentityPoolId')
認証のいらないユーザ用のIAMロールの作成とポリシーの付与
- 手順通りコンソールからだと自動で作成されてセットされるので圧倒的にラクできます。無理やりCLIからIAMロール作成してみました。
- Unauth Role(認証のいらないユーザ用のロール)につけるポリシーで、DynamoDBにPUTアクションを許可する設定を追加します。
- READMEの手順で作るとAuth Roleにのみつくので注意しましょう。ここでの手順はUnauth Roleのポリシーも変更する手順としているので順番にコピペすれば大丈夫です。
- 直接は使わないけどAuth_Roleも作成しておきます。おそらく作成してアタッチしないとダメな気がする。
$ export COGNITO_AUTH_ROLE=cognito_auth_role.json $ cat << EOF > ${COGNITO_AUTH_ROLE} { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "cognito-identity.amazonaws.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": "${COGNITO}" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" } } } ] } EOF $ aws iam create-role --role-name Cognito_wildrydesAuth_Role --assume-role-policy-document file://${COGNITO_AUTH_ROLE} $ export COGNITO_POLICY=cognito_policy.json $ cat << EOF > ${COGNITO_POLICY} { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "dynamodb:PutItem", "Resource": "${TABLE_ARN}" } ] } EOF $ aws iam put-role-policy --role-name Cognito_wildrydesAuth_Role --policy-name oneClick_Cognito_wildrydesAuth_Role --policy-document file://${COGNITO_POLICY}
- 認証のいらないユーザ用のIAMロールの作成とポリシーの付与
$ export COGNITO_UNAUTH_ROLE=cognito_unauth_role.json $ cat << EOF > ${COGNITO_UNAUTH_ROLE} { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "cognito-identity.amazonaws.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": "${COGNITO}" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" } } } ] } EOF $ aws iam create-role --role-name Cognito_wildrydesUnauth_Role --assume-role-policy-document file://${COGNITO_UNAUTH_ROLE} $ aws iam put-role-policy --role-name Cognito_wildrydesUnauth_Role --policy-name oneClick_Cognito_wildrydesUnauth_Role --policy-document file://${COGNITO_POLICY}
作成したAWS Cognito IDプールに作成したロールをセット
- けっきょくCLIからAuthenticated role, Unauthenticated roleのアタッチがわかりませんでした。。
- コンソールからアタッチしてください。。
ワークショップ用に用意されたlab2のファイルをS3にsync
- アプリコードは用意されたものを使います。
- regionとIDプールを今回のものに書き換えてからsyncします。
$ sed -i -e "s/region: \'\'/region: \'us-east-1\'/" lab2/scripts/config.js $ sed -i -e "s/identityPoolId: \'\'/identityPoolId: \'${COGNITO}\'/" lab2/scripts/config.js $ aws s3 sync lab2/ s3://${BUCKET_NAME}
CloudFront経由でアクセスしてSIGN UP
- Lab1で作成したCloudFront経由でアクセスしましょう。
- 画面の下のほうにあるSIGN UP画面からSIGN UPしましょう。
$ open https://$(cat cloudfront.json | jq -r '.Distribution.DomainName')
SESを使ってメールを送信するLambdaを作成
- 最初に作ったLambdaSESRoleのARNを使います。
- ロジックはREADMEに書かれているコードをコピーします。変更後のDynamoDBテーブルの値宛にメールを送信するコードになっています。
- 環境変数で最初に検証したメールアドレスを渡しています。
- コードはzip化して渡します。
$ export LAMBDA_SES_ROLE=$(aws iam get-role --role-name LambdaSESRole | jq -r .'Role.Arn') $ cat << EOF > index.js var AWS = require('aws-sdk'); var ses = new AWS.SES({apiVersion: '2010-12-01'}); exports.handler = (event, context, callback) => { event.Records.forEach((record) => { var params = { Source: process.env.EMAIL_ADDRESS, Destination: { ToAddresses: [record.dynamodb.NewImage.Email.S] }, Message: { Body: { Html: { Data: '<html><h1>Thank you!</h1><p>Wild Rydes is coming soon! Stay tuned for more info about unicorns near you!</p></html>' }, Text: { Data: 'Wild Rydes is coming soon! Stay tuned for more info about unicorns near you!' } }, Subject: { Data: 'Wild Rydes Limited Private Beta Confirmation' } } }; ses.sendEmail(params, (err, data) => { if (err) context.fail(err); else context.succeed(null); }); }); }; EOF $ export EMAIL_FUNCTION=email_function $ zip -r ${EMAIL_FUNCTION}.zip index.js $ aws lambda create-function --region us-east-1 --function-name ConfirmationEmail --role ${LAMBDA_SES_ROLE} --runtime nodejs4.3 --handler index.handler --zip-file fileb://${EMAIL_FUNCTION}.zip --environment Variables={EMAIL_ADDRESS=${EMAIL_ADDRESS}}
DynamoDBのトリガーを作成
- Stream ARNを取得して使用します。
- Lambdaコマンドからストリームをイベントソースとして設定します。
- イベントソースにはAmazon KinesisストリームかAmazon DynamoDBストリームしか指定できません。
$ export STREAM_ARN=$(aws dynamodbstreams list-streams | jq -r '.Streams | map(select(.TableName == "Wildrydes_Emails"))' | jq -r '.[].StreamArn') $ aws lambda create-event-source-mapping --event-source-arn ${STREAM_ARN} --function-name ConfirmationEmail --enabled --batch-size 1 --starting-position LATEST
電子メールが送信されることを確認
- 再度CloudFront経由でアクセスしてSIGN UPしましょう。
- 手順の例では最初に検証したアドレスに+1の文字列を付与して、XXX+1@XXXXXX.XXX と入力してenterを押しています。
- SIGN UPしたアドレス宛に、最初に検証したメールから送信されていたら完成です。
Serverless Web Application Workshop をCLIでやってみた Lab 1: Static Website Hosting
サーバーレスアーキテクチャ Advent Calendar 2016 の10日目の記事です。Advent Calendar初参加になります。
先日、AWS re:Invent 2016 Recap に参加しました。
jawsug-yokohama.connpass.com
各スピーカーからAWS re:Invent 2016 の体験記を聞くことができました。今年は大量のサービスが出ていてキャッチアップが大変ですね。。
勉強会の中でAWS re:Invent 2016でサーバレスのワークショップが開催されてたことを知りました。
qiita.com
手順は英語ですがREADMEに詳細に書かれているので、読みながら簡単にできそうです。サーバレスならお金も安いので、個人アカウントで試せて安心ですね。
github.com
コンソールでの作業を、(できるだけ)CLIに置き換えてみたのでメモを載せていきます。
作業はMacで、リージョンはバージニアを想定して書いてます。
ワークショップは全部で4つあります。
- Lab 1: Static Website Hosting
- Lab 2: Beta Sign-up Mailing List
- Lab 3: Administrative Interface
- Lab 4: Product Update Blog
今回はLab 1: Static Website Hostingについて書いていきます。
- やること
- Setup
- バケット作成
- Static Website Hostingを有効にする
- ワークショップ用に用意されたlab1のファイルをS3にsyncする
- ブラウザで開く
- CloudFront作成
- TTL変更
- CloudFront経由で開く
- 最後に
やること
静的なウェブサイトをホストする為にS3 bucketを作成・設定。グローバル展開をする為にCloudFrontの設定・配信する。CloudFrontのURLからサイトが表示される事を確認。
Setup
- AWSのCLIやjqなど入ってなければインストールしておきましょう。
- AWS configureでAccessKey, SecretAccessKeyは自分のもの、regionはus-east-1を指定しておきましょう。
git clone https://github.com/awslabs/aws-serverless-website-workshop.git cd aws-serverless-website-workshop
バケット作成
- バケットはユニークでなければダメなので、XXXXXXは読み替えて下さい。
$ export BUCKET_NAME=XXXXXX-wildrydes $ aws s3 mb --region us-east-1 s3://${BUCKET_NAME}
・ポリシー追加
$ export PUBLIC_POLICY=public.json $ cat << EOF > ${PUBLIC_POLICY} { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::${BUCKET_NAME}/*" } ] } EOF $ aws s3api put-bucket-policy --bucket ${BUCKET_NAME} --policy file://${PUBLIC_POLICY}
Static Website Hostingを有効にする
$ aws s3 website s3://${BUCKET_NAME} --index-document index.html
ワークショップ用に用意されたlab1のファイルをS3にsyncする
- アプリコードは用意されているものを使います。
- 自分で作成したアプリコードがあれば、そちらをsyncするのも良いと思います。
- Lab2も続きになるので用意されてるものを使いましょう。
$ aws s3 sync lab1/ s3://${BUCKET_NAME}
ブラウザで開く
- SPAで動いているサービスを確認できると思います。
open http://${BUCKET_NAME}.s3-website-us-east-1.amazonaws.com
CloudFront作成
- CloudFrontのCLIはまだプレビューになるので、まずは有効にしましょう。
$ aws configure set preview.cloudfront true
- 次の設定変更に使用したいので、作成時に出力されるjsonをファイルに出力しておきます。
$ aws cloudfront create-distribution --origin-domain-name ${BUCKET_NAME}.s3-website-us-east-1.amazonaws.com > cloudfront.json
TTL変更
$ aws cloudfront update-distribution --cli-input-json file://cloudfront.json
- うまくいかないのでコンソールから手動で変更してコマンドは無視して下さい。
CloudFront経由で開く
- StatusがDeployedになってから開いてください。2, 3分かかります。
- 作成時のjsonからDomainNameを取り出して、ブラウザで開きます。
- CloudFront経由で確認できたら完成です。
$ open https://$(cat cloudfront.json | jq -r '.Distribution.DomainName')
- めんどいからやらないけど、S3に直接アクセスできる状態で終わりなの気持ち悪いな。。
待ってました!Fire TV Stickを1250円オフの3730円で購入
待ってました!Fire TV Stickを1250円オフの3730円で購入しました!12/12までセールみたいです。
Amazon ファミリーに加入
前から欲しかったFire TV Stickを安く買えるということで、これを機にAmazon ファミリー(Amazon Prime)に加入しました。
Amazon ファミリーに加入すれば、年会費分のポイントがもらえるのでお得ですね。
Amazon.co.jp ヘルプ: Amazonファミリー特典の3,900円クーポンについて
最後に
PCをテレビにつないで見れば同じことはできていたのですが、やはり操作の簡単さが違いますね。
他にもFire TV Stick用のアプリでYoutubeの視聴やゲームなどもできるみたいですね。もう少し触ってみたいと思います。
LINEスタンプが8個から販売可能になりました
LINEスタンプが8個から販売可能になりました。
creator-mag.line.me
16個作成した時点で挫折していたので嬉しい変更です!
新作スタンプ
このブログのタイトルでもあるやーまんのためのスタンプです。
store.line.me
過去スタンプ
前回は40個作成して申請しました。なかなか大変でした。。
yamano3201.hatenablog.jp
自作ツール
以前スマホから画像をアップロードするアプリと、LINEスタンプ登録用画像に変換する仕組みを使っていたので使用してみました。
yamano3201.hatenablog.jp
yamano3201.hatenablog.jp
使い勝手は微妙でした。。
自動リサイズは嬉しかったのですが、自動で透過画像にするところでノイズが乗りまくりでけっきょく手作業になってしまいました。。
最後に
写真が使用可能になったので、次回は写真のスタンプを作成してみたいと思います。
AmazonDashButtonでワンプッシュで商品購入してみた
12/5にAmazon Dash Buttonが発売されました。
ボタンを通じた初回注文時に500円差し引かれるので実質無料になるということで、
ちょうど洗剤がなくなりかけてたのでジョイ Dash Buttonをさっそくポチってみました。
- 出版社/メーカー: Amazon
- 発売日: 2016/12/05
- メディア: エレクトロニクス
- この商品を含むブログを見る
届いたAmazonDashButtonはこちらになります。
設定方法は下のリンクを参考にしました。わかりやすくて簡単に設定することができました。
umedasuki.com
私はこちらの商品を紐付けました。
【大容量】 除菌ジョイ コンパクト 食器用洗剤 緑茶の香り 超特大 1065ml
- 出版社/メーカー: P&G
- 発売日: 2016/10/03
- メディア: ヘルスケア&ケア用品
- この商品を含むブログを見る
さっそくワンプッシュしてみると緑色のランプが点灯して購入完了のようです。
スマホで購入情報を見てみるとちゃんと500円引きで購入できていることがわかります。
簡単ですね。無料なので試してみてはいかがでしょうか。
AWS認定試験の無料問題集一覧
認定試験を受けようと考えているのですが、良くある資格の問題集らしきものが見当たりませんでした。
そこでネットにあった数少ない無料の問題集をまとめてみました。
AWS認定試験の無料で受けられる問題集
AWS公式のサンプル問題集
- 問題数8 + 6 + 10 + 9 + 10 => 43問
- アソシエイトだけでなくプロフェッショナルの問題もあり
- プロフェッショナルの問題は問題文が長め
最後に
まずは無料の82問に挑戦したいと思います。
模擬試験が2000円かかることを考えると、「AWS WEB問題集で学習しよう」のシルバープラン1580円が魅力的に見えてきますね。。
いきなり本番に挑戦するか、2000円の模擬試験に挑戦するか、1580円払って追加で159問受けるかは一通り無料の問題が終わってから考えたいと思います。