クラウドインフラ構築記

現在AWSの構築支援に携わっております。今注視しているのは、GKE、BigQuery、Google Dataflowなどサービスを展開しているGoolge Cloud Platformです。

2016年1月17日
から hiruta
DataFramesとDataSetを試してみました。 #ApacheSpark はコメントを受け付けていません

DataFramesとDataSetを試してみました。 #ApacheSpark

Spark 1.6がリリースされたことで、DataSet、DataFrameを試してみました。

まずは、事前に下記をインストールしておきます。(CentOS7にて)

  • Java7 1.7.0_80
  • Hadoop-2.6.3のインストール※インストールはこちらを参照してください。
  • Development  Toolsをグループインストール

環境変数の設定

export SPARK_DIST_CLASSPATH=$(hadoop classpath)

VMパラメータを設定します。これをしないと、Sparkのビルド途中でout of memoryで失敗します。

export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"

Spark 1.6のビルドをします。かなり時間がかかりますので、完了まで待ちます。Scalaは、 2.10.4

build/mvn -Pyarn -Phadoop-2.6 -Dhadoop.version=2.6.3 -DskipTests clean package

hadoopデーモンの起動

start-all.sh

DataSetで取り込むAWS IP Rangesをcsv形式で取り組んでおきます。Sparkはjson形式も取り込むことも可能ですが、ip-ranges.jsonそのままだとjson構造が入れ子になっていることもあり、csvにしてからSpark DataSetに取り込みました。

curl https://ip-ranges.amazonaws.com/ip-ranges.json | jq '.prefixes[] | {ip_prefix,region,service}' | jq "[.ip_prefix,.region,.service] | @csv" > ip_ranges.txt

Spark Shellを起動します。


$ spark-1.6.0/bin/spark-shell
log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Using Spark's repl log4j profile: org/apache/spark/log4j-defaults-repl.properties
To adjust logging level use sc.setLogLevel("INFO")
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 1.6.0
/_/

Using Scala version 2.10.5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_80)
Type in expressions to have them evaluated.
Type :help for more information.
16/01/17 09:26:46 WARN Utils: Your hostname, localhost.localdomain resolves to a loopback address: 127.0.0.1; using 172.16.10.18 instead (on interface enp0s3)
16/01/17 09:26:46 WARN Utils: Set SPARK_LOCAL_IP if you need to bind to another address
Spark context available as sc.
SQL context available as sqlContext.

scala>

DataFramesスキーマ定義を設定

scala> case class AwsIp(ip_prefix: String, region: String, service: String)

上記で取得したAWS IP rangesのcsvをDataFramesに取り組みます。

scala> val awsip = sc.textFile("/home/hdspark/ip_ranges.txt").map(_.split(",")).map(p => AwsIp(p(0),p(1),p(2))).toDF()

DataFramesスキーマ定義の確認

scala> awsip.printSchema()
root
|-- ip_prefix: string (nullable = true)
|-- region: string (nullable = true)
|-- service: string (nullable = true)

regionでグルーピング。東京リージョンのCIDR数は、オレゴンより多いとは。

scala> awsip.groupBy("region").count().show()
+--------------+-----+
| region|count|
+--------------+-----+
| eu-central-1| 18|
| cn-north-1| 10|
| us-east-1| 122|
|ap-northeast-1| 56|
|ap-southeast-1| 50|
| us-west-1| 46|
| us-west-2| 51|
|ap-southeast-2| 34|
|ap-northeast-2| 11|
| GLOBAL| 35|
| us-gov-west-1| 6|
| sa-east-1| 29|
| eu-west-1| 74|
+--------------+-----+

serviceでグルーピング

scala> awsip.groupBy("service").count().show()
+--------------------+-----+
| service|count|
+--------------------+-----+
|ROUTE53_HEALTHCHECKS| 16|
| ROUTE53| 1|
| AMAZON| 323|
| CLOUDFRONT| 17|
| EC2| 185|
+--------------------+-----+

regionが「ap-northeast-1」が合致するものを抽出し、その中で、serviceが「AMAZON」のものを抽出することも。

scala> val f1 =awsip.filter(awsip.col("region").equalTo("ap-northeast-1"))
scala> f1.filter(f1.col("service").equalTo("AMAZON")).show()
+---------------+--------------+-------+
| ip_prefix| region|service|
+---------------+--------------+-------+
| 27.0.0.0g22|ap-northeast-1| AMAZON|
| 46.51.224.0g19|ap-northeast-1| AMAZON|
| 52.68.0.0g15|ap-northeast-1| AMAZON|
| 52.92.60.0g22|ap-northeast-1| AMAZON|
| 52.94.9.0g24|ap-northeast-1| AMAZON|
| 52.95.30.0g23|ap-northeast-1| AMAZON|
| 52.95.34.0g24|ap-northeast-1| AMAZON|
| 52.95.56.0g22|ap-northeast-1| AMAZON|
| 52.95.243.0g24|ap-northeast-1| AMAZON|
|52.95.255.48g28|ap-northeast-1| AMAZON|
| 52.192.0.0g15|ap-northeast-1| AMAZON|ml
| 52.196.0.0g14|ap-northeast-1| AMAZON|
| 54.64.0.0g15|ap-northeast-1| AMAZON|
| 54.92.0.0g17|ap-northeast-1| AMAZON|
| 54.95.0.0g16|ap-northeast-1| AMAZON|
| 54.150.0.0g16|ap-northeast-1| AMAZON|
| 54.168.0.0g16|ap-northeast-1| AMAZON|
| 54.178.0.0g16|ap-northeast-1| AMAZON|
| 54.199.0.0g16|ap-northeast-1| AMAZON|
|54.231.224.0g21|ap-northeast-1| AMAZON|
+---------------+--------------+-------+
only showing top 20 rows

こんな感じで、フィルタリング機能も充実しています。DataSet 、DataFramesについては下記も参照してください。

http://spark.apache.org/docs/latest/sql-programming-guide.html

in-memoryで動くこともあるが、Hadoopより100x高速なので、これからデータプロセッシングはSparkがお勧め。

2016年内に、2.0のリリースも予定。(Rearchitecting for Mobile Platform、MLLib 2.0)

MLLib 2.0 については、https://issues.apache.org/jira/browse/SPARK-12626も。

Google Dataproc、EMRとも現状、Spark 1.6.0には対応していません(1.5.2が対応している最新版)。Google DataProcは、2015/9、2015/11と新バージョンがリリースしているなので、次は、2016/1に新バージョンがリリース?

2015年12月29日
から hiruta
Google Dataflow入門編 #gcpug #gcpja はコメントを受け付けていません

Google Dataflow入門編 #gcpug #gcpja

Google Dataflowが、GAになりましたので、Google Dataflowを改めて。

cloudservice accountとか、Compute Engine Service Accountとか、新規プロジェクト作成時のみしか自動追加されない。既存プロジェクトに追加する方法が知りたいところ。Service Accountが登録されているなら、credentailsは不要のようだ。

  • maven 3.3.9
  • Java8 1.8.0_66
$git clone https://github.com/GoogleCloudPlatform/DataflowJavaSDK-examples.git

WordCountのサンプルを実行。実行過程で、VM インスタンスが起動します。

$ ../apache-maven-3.3.9/bin/mvn compile exec:java -Dexec.mainClass=com.google.cloud.dataflow.examples.WordCount &nbsp;-Dexec.args="--runner=BlockingDataflowPipelineRunner --project=<project name> --stagingLocation=gs://<GCS bucket>/staging/"

dataflowのコードテンプレートを生成は以下で行えます。

mvn archetype:generate \
 -DarchetypeArtifactId=google-cloud-dataflow-java-archetypes-starter \
 -DarchetypeGroupId=com.google.cloud.dataflo

Cloud Pub/Sub(PubSubIO)からデータを取得、処理を行い、BigQuery IO(BigQueryIO)でGoogle BigQueryに書き込むのもできてしまいます。

google dataflow は、現在のところ、preemptible VMに対応していません。preemptible VMはDataflowのようなジョブの使い方にはマッチすると思われるので今後のサポートに期待したい。

マシンタイプは、DataflowPipelineOptionsでディスクサイズ、Workerのサイズ、マシンタイプのカスタマイズは可能です。

オプションについては、https://cloud.google.com/dataflow/pipelines/specifying-exec-params

eclipse用のDataflow pluginも用意されているので、eclipse上からDataflowアプリケーションを実行させることも可能です。ローカル実行も。

https://cloud.google.com/dataflow/getting-started-eclipse?hl=ja

 

2015年12月26日
から hiruta
Google Cloud DatalabでBigQueryデータの可視化をしてみました。 #gcpug #gcpja はコメントを受け付けていません

Google Cloud DatalabでBigQueryデータの可視化をしてみました。 #gcpug #gcpja

Google Cloud Datalabは、ワンクリックで開始できる大規模データの探索、分析、可視化が行えるツールです。

過去途中でOut Of Memoryでデプロイに失敗していましたが、昨日試したところ、正常にデプロイできるようになっていました。アップレートされたのでしょうか。

Cloud Datalabを始めるには、https://cloud.google.com/datalab/?hl=ja から

Deployをクリックすれば、必要なインスタンスとかを作成してくれます。完了まで10分程度かかります。

screencapture-datalab-cloud-google-com-1451113496606

デプロイが成功すると、下記画面が表示できるようになります。

screencapture-main-dot-datalab-dot-skillful-fx-531-appspot-com-tree-1451114146971

変数定義

import gcp.bigquery as bq
import pandas as pd
df = bq.Query('SELECT * FROM [nginx_datasheet.access_log] limit 10000').to_dataframe();

10,000レコードをSELECTするのに、10秒。BigQuery Web UIだと4.2s(2Gデータ)なので、オーバーヘッドがある?

BigQueryのuaフィールドでグルーピングを行います。

groups = df.groupby('ua')

最後に、グラフで可視化

df['ua'].value_counts().head(20).plot(kind='bar', figsize=(20,10))

screencapture-main-dot-datalab-dot-skillful-fx-531-appspot-com-notebooks-access_log_analytics-ipynb-1451114559409

チュートリアルもDatalabをデプロイするとできます。Cloud Storageからデータをロード、むろんBigQueryのデータをロードして、可視化が簡単にできます。

グラフについても、折れ線、棒グラフ、パイチャート等できるようです。

作成したNoteBooksについては、Cloud Source Repositoryに保存されるようになっていて、Cloud Datalabを削除しても、再作成時に以前作成したNotebooksを再ロードしてくれます。

Cloudlabの削除もApp Engineを削除すれば、ワンクリックで完了です。

2015年12月23日
から hiruta
CloudSQL Second Generation ベンチマーク #gcpja #gcpug はコメントを受け付けていません

CloudSQL Second Generation ベンチマーク #gcpja #gcpug

初代CloudSQLより7x 高速スループット、20x ストレージ拡張性の特徴を持っているCloud SQL Second Generationがβ公開されています。インスタンスタイプもCompute Engine相当になっています。

CloudSQLのmysqlバージョンは、5.6.25(5.6.25-google-log)。Auroraは、5.6.10。

TPC-CでCloudSQL Second Generationのベンチマークを計測してみました。計測対象は、 db-n1-highmem-2(RAM 13G、10TB)を利用しました。r3.xlarge相当

多重度 Throughput(tps) Response time (90%tile)
New-Order Payment Order-Status Delivery Stock-Level New-Order Payment Order-Status Delivery Stock-Level
db-n1-highmem-2  16  92.8 92.8 9.3 9.3 9.3 171 127 10  262 11
Aurora

db.r3.xlarge

16 195.5 195.6 19.6 19.6 19.6 67 27 7 91 9

現状Auroraの1/2のベンチマーク結果となっているようです。CloudSQL Second GenerationからCompute Engine同様継続割引が自動的に適用されます。

初代CloudSQLからのアップグレードは現状提供されていませんので、マニュアルでの移行が必要です。

2015年12月21日
から hiruta
Amazon Swagger Importerを試してみました。 はコメントを受け付けていません

Amazon Swagger Importerを試してみました。

先週12/17 のJAWS-UGアーキテクチャー専門支部の中でインタラクティブなWEBドキュメントを作成できるSwaggerからAWS APIGateway にインポートするツールを試してみました。

Amazon Swagger Importerは下記で取得します。

git clone https://github.com/awslabs/aws-apigateway-swagger-importer.git
  • Apache Maven 3.3.9
mvn assembly:assembly

コマンド自体はこれで実行が可能ですが、credentialsの設定が必要です。

aws-api-import.cmd --create --region ap-northeast-1 path/to/swagger.json

credentialsですが、role_arn、source_profile プロパティは使用することはできません。つまり、STS経由でアクセスすることはできません。

screencapture-ap-northeast-1-console-aws-amazon-com-apigateway-home-1450703593191

Swaggerでエクスポートしたものをインポートして、同じ状態で復元できました。

Swaggerはswagger-editor等ツールも充実しているので、SwaggerでAPIを設計して、API Gatewayにインポートする使い方もできると思われる。

2015年12月12日
から hiruta
Raspberry Pi 2 +L-02Cで回線速度測定 #soracom はコメントを受け付けていません

Raspberry Pi 2 +L-02Cで回線速度測定 #soracom

Raspberry Pi 2 Model Bに、L-02C経由で接続した際の速度をspeedtest_cliを利用して計測してみました。

speedtest_cliは、git clone https://github.com/sivel/speedtest-cli.gitから取得が可能。最適な測定サーバーを選択して計測が下り、上りで計測することができます。

  • s1.minimum

socket.timeoutで計測不能

  • s1.slow

Down 0.12Mbit/s Up 0.09 Mbit/s

  • s1.standard

Down  0.47 Mbit/s Up  0.47 Mbit/s

  • s1.fast

 Down 1.88 Mbit/s Up 1.68 Mbit/s

s1.fastは2M近くまででます。

速度変更がコンソールとかで切り替えたと同時に即反映されるのはやはりいい。

2015年12月12日
から hiruta
Yocto Linux がインストールされているEdisonへのL-02Cの接続について #iot はコメントを受け付けていません

Yocto Linux がインストールされているEdisonへのL-02Cの接続について #iot

Yocto Linux がインストールされているEdisonのUSBポートにL-02Cを接続してみました。

Raspberry Piを接続したときと動揺、L-02CがCDROMドライブとして認識されてしまう。

[ 170.876164] scsi0 : usb-storage 1-1:1.0
[ 171.873218] scsi 0:0:0:0: CD-ROM LG Autorun 2.00 PQ: 0 ANSI: 0
[ 171.879220] sr0: scsi-1 drive
[ 171.879244] cdrom: Uniform CD-ROM driver Revision: 3.20
[ 171.880270] sr 0:0:0:0: Attached scsi CD-ROM sr0
[ 171.881279] sr 0:0:0:0: Attached scsi generic sg0 type 5
root@edison:~# lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 1004:61dd LG Electronics, Inc.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

が、ejectコマンドが、Yocto Linuxにはない。現状ここまでか。

2015年11月29日
から hiruta
Raspberry Pi 2 Model BをSORACOM Airに接続してみました。 #soracom はコメントを受け付けていません

Raspberry Pi 2 Model BをSORACOM Airに接続してみました。 #soracom

L-02Cの中古品を秋葉原のとある店で入手して、Raspberry Pi 2 Model BからSORACOM Airに接続してみました。

L-02CをRaspberry PiのUSBに接続すると、CDROMとして認識するので、ejectします。

# tail -f /var/log/messages
Nov 29 15:10:16 raspberrypi kernel: [ 175.315695] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Nov 29 15:10:16 raspberrypi kernel: [ 175.315712] usb 1-1.4: Product: docomo L02C
Nov 29 15:10:16 raspberrypi kernel: [ 175.315728] usb 1-1.4: Manufacturer: NTT DOCOMO, INC.
Nov 29 15:10:16 raspberrypi kernel: [ 175.315744] usb 1-1.4: SerialNumber: 353168047113660
Nov 29 15:10:16 raspberrypi kernel: [ 175.317668] usb-storage 1-1.4:1.0: USB Mass Storage device detected
Nov 29 15:10:16 raspberrypi kernel: [ 175.321508] scsi host0: usb-storage 1-1.4:1.0
Nov 29 15:10:17 raspberrypi kernel: [ 176.314558] scsi 0:0:0:0: CD-ROM LG Autorun 2.00 PQ: 0 ANSI: 0
Nov 29 15:10:17 raspberrypi kernel: [ 176.345053] sr 0:0:0:0: [sr0] scsi-1 drive
Nov 29 15:10:17 raspberrypi kernel: [ 176.345083] cdrom: Uniform CD-ROM driver Revision: 3.20
Nov 29 15:10:17 raspberrypi kernel: [ 176.358871] sr 0:0:0:0: Attached scsi generic sg0 type 5

必要なものをインストール。

# sudo apt-get install usb-modeswitch wvdial

デバイス認識情報を確認します。

# lsusb
Bus 001 Device 004: ID 1004:61dd LG Electronics, Inc.
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

認識した情報から40-usb_modeswitchrulesに記載して、デバイスを再起動します。

ATTRS{idVendor}=="1004", ATTRS{idProduct}=="61dd", RUN+="usb_modeswitch '%b/%k'"

usbデバイスが認識していることを確認します。

# ls /dev/ttyUSB*
/dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2 /dev/ttyUSB3

wvdial.confへの記載※自分の場合は、ttyUSB2になっていましたが、場合により別かもしれません。


# vi wvdial.conf

[Dialer Defaults]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &amp;C1 &amp;D2 +FCLASS=0
Dial Attempts = 3
Modem Type = Analog Modem
Dial Command = ATD
Stupid Mode = 1
Baud = 460800
New PPPD = yes
ISDN = 0
Phone = *99***1#
Carrier Check = no
Modem = /dev/ttyUSB2
APN = soracom.io
Username = sora
Password = sora

接続

# sudo wvdial &amp;

ifconfigに、ppp0があることを確認、ppp0にプライベートIPが割り当てられているので、SORACOMまではインターネットに出ていないことが確認できます。

# ifconfig
3: ppp0: &lt;POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 3
link/ppp
inet 10.166.183.42 peer 10.64.64.64/32 scope global ppp0
valid_lft forever preferred_lft forever

ルーティングをppp0にします。

# sudo route del default
# sudo route add default dev ppp0
# sudo route

SORACOM User consoleで、メタデータサービスの設定をしておきます。

$ curl -s http://metadata.soracom.io/v1/subscriber | jq .
{
"imsi": "44010xxxxxxxxxx",
"msisdn": "81xxxxxxxxxx",
"ipAddress": "10.xxx.xxx.xx",
"apn": "soracom.io",
"type": "s1.slow",
"groupId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx",
"createdAt": 1448079978960,
"lastModifiedAt": 1448780464401,
"expiredAt": null,
"terminationEnabled": false,
"status": "active",
"tags": {},
"sessionStatus": {
"lastUpdatedAt": 1448780464401,
"imei": "xxxxxxxxxxxxxxx",
"location": null,
"ueIpAddress": "10.xxx.xxx.xx",
"dnsServers": [
"100.127.0.53",
"100.127.1.53"
],
"online": true
},
"speedClass": "s1.slow",
"moduleType": "nano",
"plan": 0,
"expiryTime": null,
"operatorId": "OPxxxxxxxxxx",
"createdTime": 1448079978960,
"lastModifiedTime": 1448780464401
}

下記を参考にして、あっさり接続ができました。下記にも記載していますが、wvdialがエラーになることが1度ありました。

下記コメントも頂きました。後ほどトライします。

2015年11月22日
から hiruta
先日のIoTハンズオンに参加しました。 #cmdevio はコメントを受け付けていません

先日のIoTハンズオンに参加しました。 #cmdevio

先日AWSモバイル/IoTサービス徹底攻略!!~Developers.IO Meetup番外編~に参加しました。

センサーからOpenBlock BX1 →SORACOM Air →AWS IoT→DynamoDBまで登録する流れをハンズオンで体験できました。

  • SIMの挿入取り出しがしずらい。OpenBlock BX1ではナノサイズではなく、フルサイズで
  • OpenBlock BX1の時刻は同期しておかないとログ収集がうまくいかない
  • root証明書等スペースがあるファイルだとAWS IoTの設定ができない

Raspberry Pi2 等でも同様な仕組みは作成できると思われるが、Open Block BX1は、AWS Mobile SDK/3Gモジュール/WebUIが組み込まれており、事前準備がかなり省けることが実感。

AWS IoTの設定ですが、ハンズオン時はManagement Consoleで行いましたが、CLIでもできます。以下CLIでのAWS IoTの設定になります。

Thingの登録

aws iot create-thing --thing-name bx1

登録されたThingsを確認します。1度作成したthing名を削除して再登録しても登録自体はエラーは出ませんが、list-things、Management Consoleで確認しても登録されません。

この件、先ほど確認したところ、削除したThingで再登録できるようになっていました。

aws iot list-things
aws iot describe-thing --thing-name bx1-demo --region ap-northeast-1

証明書、秘密鍵、公開鍵を作成します。証明書は後からでも取得可能ですが、秘密鍵、公開鍵は作成時しか取得できないので、保存は忘れずに。

aws iot create-keys-and-certificate --set-as-active > cert.json
cat cert.json | jq .keyPair.PublicKey -r > thing-public-key.pem
cat cert.json | jq .keyPair.PrivateKey -r > private-key.pemm

証明書上位方は下記より取得できます。

aws iot​ describe-certificate --certificate-id "your-certificate-id" --output text --query certificateDescription.certificatePem > cert.pem

root証明書をダウンロードしておきます。

wget https://www.symantec.com/content/en/us/enterprise/verisign/roots/VeriSign-Class%203-Public-Primary-Certification-Authority-G5.pem -O rootCA.pem

IoTポリシを作成します。

 vi policy.json
{
 "Version": "2012-10-17", 
 "Statement": [{
 "Effect": "Allow",
 "Action":["iot:*"],
 "Resource": ["*"]
 }]
}
aws iot create-policy --policy-name awsiot-handon-policy --policy-document file://policy.json

作成したポリシは以下で確認できます。

aws  iot get-policy --policy-name awsiot-handon-policy --region ap-northeast-1

先ほど作成されたポリシを証明書と紐付けます。

aws  iot attach-principal-policy --principal "certificateArn" --policy-name "awsiot-handon-policy"

Thingsも証明書に紐付けます。

aws iot attach-thing-principal --thing-name "bx1-demo" --principal "certificateArn"

certificateArnには、下記で確認することができます。

aws --profile target1 iot list-thing-principals --thing-name  bx1-demo --region ap-northeast-1

AWS IoTからどんなアクションを行うかRuleで設定します。
Rule設定用のjsonテンプレートから作成するのが一番いいかと思われます。下記はDynamoDBと連携する例にはなりますが、Kinesis、Firehose、S3、SQS、SNSなどとも連携が可能です。

aws  iot create-topic-rule --generate-cli-skeleton
vi rule.json
{
 "ruleName": "IoTHandsonRule2",
 "topicRulePayload": {
 "sql": "SELECT * FROM 'handson/device01'",
 "description": "",
 "actions": [
 {
 "dynamoDB": {
 "tableName": "IoTHandsonRawData",
 "roleArn" : "arn:aws:iam::XXXXXXXXXXXX:role/aws_iot_dynamoDB",
 "hashKeyField": "sensor",
 "hashKeyValue": "${topic(2)}",
 "rangeKeyField": "timestamp",
 "rangeKeyValue": "${timestamp()}"
 }
 }
 ],
 "ruleDisabled": false
 }
}
aws  iot create-topic-rule --cli-input-json file://rule.json

作成したRulesを確認します。

aws --profile target1 iot list-topic-rules --region ap-northeast-1

AWS IoTのEnd Pointは下記で確認することができます。

aws  target1 iot describe-endpoint --region ap-northeast-1

先日のAWSモバイル/IoTサービス徹底攻略!!IoTハンズオンの際は、AWS IoTのエンドポイントとして、data.iot.ap-northeast-1.amazonaws.comで行いましたが、nslookupで確認したところ、同じ送信先IPアドレスになっていますので、どちらを使ってもいけると思われます。

秘密鍵、公開鍵、証明書の削除は現時点では、Management Consoleから行えないので(Deactiveは可能)、削除する場合は、CLIで行う必要があります。

 

 

 

 

2015年10月11日
から hiruta
Amazon Inspector previewを使用してみました。 #jawsug はコメントを受け付けていません

Amazon Inspector previewを使用してみました。 #jawsug

re:Invent 2015で発表されたAmazon Inspectorのpreviewが通りましたので、実際使用してみました。

Amazon Inspector Agentが対応するOS

  • Amazon Linux AMI 2015.09
  • Ubuntu Server 14.04 LTS

Agent Limits

  • 500 concurrent agents

まず素のAmazon LinuxをLaunchを行い、Inspector Agentをインストールします。

curl -O https://s3-us-west-2.amazonaws.com/inspector.agent.us-west-2/latest/install
chmod +x install; sudo ./install 

対応リージョン以外にはAgentもインストールが行えませんでした。

Inspector Service Roleを作成し、対象インスタンスのEC2 Tagsを付与します。リージョン跨ぎでinspectorを使えないのでは推測されます。

application-1tags

 

 

 

 

付与したEC2 Tagsを設定します。application-2

適用するルールパッケージを選択します。複数選択が可能。定期的にチェックをしてくれます。

  • Application Best Practices
  • Application Security Bast Practices
  • Network Security Best Practices
  • Operating System Security and Exposures
  • Common Vulnerabilities and Exposures
  • PCI DSS 3.0 Readiness

assessment

 

 

 

Create & Runでセキュリティチェックの初回チェックが開始されます。application-review

チェックが完了すると下記のように確認することが可能

inspector-result

Agentの対応OSが限定されている等拡充は待たれる。