2011-04-18
■[CM]4/20に市ヶ谷でセミナーします
ネタは「リモートアクセス環境構築事例セミナー」と題しまして、
↓まだ申込可能です〜♪
ソニックウォール社さんとの共催となっています。
ソニックウォールさんからは、SonicWALLソリューション、次世代ファイアウォール、
ネットワークの可視化と制御、スマートフォンからの社内アクセスについて
デモを交えながらご紹介頂く予定です。
私からは以下のような自社事例ネタをご紹介する予定です。
- 当社が導入に至る背景と経緯
- 中小企業が抱えるセキュリティリスクについて
- リモートアクセスによるメリットとリスク
- ワークライフバランスによるメリットとリスク
- ISMSに合わせて実施した内容
- BCP策定に合わせて実施した内容
- ActiveDirectory構築に合わせて実施した内容
- iPhone/iPadから社内システムにアクセスする方法
- Windows リモートデスクトップ, VPN L2TP
- パブリッククラウド環境の活用
- AmazonEC2,AmazonS3
- 仮想プライベートクラウド環境の活用
- AmazonVPC
- SaaSの活用
- GoogleApps for Business, Salesforce
- 今後の予定
2011-03-02
■[AWS]ActionScript API for AWS を使って AIR for Android アプリを作る その3
インスタンス一覧です。
全リージョンのインスタンスがお手元にw。
ActionScript API for AWS (Amazon Web Services)
https://github.com/satoshi7/ActionScript-API-for-AWS-Amazon-Web-Services-
2011-02-25
■[AWS]AWS CloudFormation 用の ActionScript API
挑戦状が来たので早速30分ぐらいで作りました。
こんなかんじで書けます。
var cfm:CFM = new CFM(CFM.US_EAST_1);
cfm.setAWSCredentials(AWSKey.key,AWSKey.sec);
cfm.addEventListener(AWSEvent.RESULT,awsHandler);
cfm.executeRequest(CFM.DESCRIBE_STACKS);
ActionScript API for AWS (Amazon Web Services)
https://github.com/satoshi7/ActionScript-API-for-AWS-Amazon-Web-Services-
■[AWS]AWS CloudFormation
- Drupal Content Management System
- Gollum Wiki
- Joomla Content Management System
- PHP Hello World Application
- Rails Hello World Application
- Redmine Project Management System
- Tracks Management System
- Wordpress Blog
- Insoshi Social Networking Platform
- Amazon ElasticBeanstalk Hello World
AWS CloudFormation
2011-02-21
■[AWS]Amazon Web Services のセキュリティについて
Amazon Web Services のセキュリティについて、自分用のメモ書きです。ちょっとだけ加筆しました。
- ISO 27001(情報セキュリティマネジメントシステム - ISMS)取得
- 複数のセキュリティレベル
- ホストオペレーティングシステム:多要素認証
- ゲストオペレーティングシステム:証明書ベースのSSHv2 を使用
- ファイヤウォール:強制インバウンドファイヤウォールは、デフォルトでは拒否モードに設定
- ハイパーバイザー:ゲストOS はCPU に対して高度なアクセスをもちません。
- インスタンスの分離:物理的RAM も分離しています。
- 障害分離:インスタンスを複数のアベイラビリティゾーン(Availability Zone) だけでなく、複数の地理的に離れたリージョン(Region)に配置できる柔軟性を提供。各アベイラビリティゾーンは、障害分離が可能なようデザインされています。つまり、個々のアベイラビリティゾーンは、一般的な都市地域内で物理的に分離されており、地震や洪水での影響が同時に及ばないような場所が考慮されています。個別の無停電電源装置(UPS)やオンサイトのバックアップ生成施設に加え、さらにシングルポイントの障害の可能性を減らすために、別々の電力供給施設から異なる配管網を経由して、個別に電力供給を行なっています。これらはすべて、冗長的に、複数のTier-1 プロバイダに接続されています。
- ・補足資料
- クラウドめぐり日米5社がディスカッション
- Cloud Computing World 2010 基調トークセッション(後編)
- http://news.livedoor.com/article/detail/4982468/
2011-02-16
■[AWS]AWS API の認証の種類について
AWSが提供しているQueryAPIを解析していますと、認証周りで違いがあることが分かります。そこで、まとめます。
- 2:GETパラメータで認証する最もメジャーな認証方法
- 暗号化アルゴリズム:HMACSHA1
- 使われているサービス:EC2, CloudWatch, Import Export, Auto Scaling, Elastic Beanstalk, Elastic Load Balancing, Elastic MapReduce, Identity and Access Management, Relational Database Service, SimpleDB, Simple Notification Service,Simple Queue Service, Virtual Private Cloud
- 認証生成に使う文字:Action,SignatureVersion,SignatureMethod,AWSAccessKeyId,Timestampなどなど
詳しくはこちらをお試しください。
https://github.com/satoshi7/ActionScript-API-for-AWS-Amazon-Web-Services-
- EC2 - Amazon Elastic Compute Cloud
- EMR - Amazon Elastic MapReduce
- RDS - Amazon Relational Database Service
- SNS - Amazon Simple Notification Service
- SDB - Amazon SimpleDB
- SQS - Amazon Simple Queue Service
- ACW - Amazon CloudWatch
- IAM - AWS Identity and Access Management
- EBT - AWS Elastic Beanstalk
- SES - Amazon Simple Email Service
- ASC - Auto Scaling
- ELB - Amazon Elastic Load Balancing
- S3 - Amazon Simple Storage Service
- VPC - Amazon Virtual Private Cloud
- ACF - Amazon CloudFront
- AIE - Amazon Import/Export -- under development..
- R53 - Amazon Route 53
次新しいのが出たら即日対応してやるっ!!!(挑戦状)
2011-01-27
■[AWS]ActionScript API for Amazon Simple Email Service
とりあえず作ってみた。
GitHubに上げました。
とりあえず、、、動きますw。
以前とSignatureが変わっててちょっとだけ苦労しました。
ActionScript API for AWS (Amazon Web Services)
https://github.com/satoshi7/ActionScript-API-for-AWS-Amazon-Web-Services-
2011-01-23
■[AWS]AWS Elastic Beanstalk を使う その12
StandardSessionクラスがSerializableインタフェースを持っているので、Base64エンコードして直列化した文字列をSimpleDBに書き込むような流れになっています。
ちゃんとテストしていませんがw。
http://www.source-code.biz/base64coder/java/
道半ば。。
package jp.cm.aws.tomcat.session;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.apache.catalina.Session;
import org.apache.catalina.Store;
import org.apache.catalina.session.StandardSession;
import org.apache.catalina.session.StoreBase;
import biz.source_code.base64Coder.Base64Coder;
import com.amazonaws.auth.PropertiesCredentials;
import com.amazonaws.services.simpledb.AmazonSimpleDB;
import com.amazonaws.services.simpledb.AmazonSimpleDBClient;
import com.amazonaws.services.simpledb.model.Attribute;
import com.amazonaws.services.simpledb.model.DeleteAttributesRequest;
import com.amazonaws.services.simpledb.model.GetAttributesRequest;
import com.amazonaws.services.simpledb.model.GetAttributesResult;
import com.amazonaws.services.simpledb.model.Item;
import com.amazonaws.services.simpledb.model.PutAttributesRequest;
import com.amazonaws.services.simpledb.model.ReplaceableAttribute;
import com.amazonaws.services.simpledb.model.SelectRequest;
public class SimpleDBStore extends StoreBase implements Store {
private AmazonSimpleDB sdb = null;
private String myDomain = "SessionPersistence";
private String mySession = "Session";
public SimpleDBStore() throws IOException {
sdb = new AmazonSimpleDBClient(new PropertiesCredentials(
SimpleDBStore.class
.getResourceAsStream("AwsCredentials.properties")));
}
@Override
public int getSize() throws IOException {
String selectExpression = "select * from `" + myDomain + "`";
SelectRequest selectRequest = new SelectRequest(selectExpression);
int count = 0;
for (Item item : sdb.select(selectRequest).getItems()) {
System.out.println(" Item");
System.out.println(" Name: " + item.getName());
for (Attribute attribute : item.getAttributes()) {
System.out.println(" Attribute");
System.out.println(" Name: " + attribute.getName());
System.out.println(" Value: " + attribute.getValue());
}
count++;
}
return count;
}
@Override
public String[] keys() throws IOException {
String selectExpression = "select * from `" + myDomain + "`";
SelectRequest selectRequest = new SelectRequest(selectExpression);
List<Item> items = sdb.select(selectRequest).getItems();
List<String> keyNames = new ArrayList<String>();
for (Item item : items) {
keyNames.add(item.getName());
}
return (String[]) keyNames.toArray();
}
@Override
public Session load(String id) throws ClassNotFoundException, IOException {
System.out.println("load : " + id);
GetAttributesResult result = sdb
.getAttributes(new GetAttributesRequest().withDomainName(
myDomain).withItemName(id));
List<Attribute> list = result.getAttributes();
StandardSession session = null;
for (int i = 0; i < list.size(); i++) {
Attribute attribute = list.get(i);
if (attribute.getName().equals(mySession)) {
String value = attribute.getValue();
session = (StandardSession) fromString(value);
}
}
System.out.println(session.toString());
return session;
}
@Override
public void remove(String id) throws IOException {
System.out.println("remove : " + id);
sdb.deleteAttributes(new DeleteAttributesRequest().withDomainName(
myDomain).withItemName(id));
}
@Override
public void clear() throws IOException {
System.out.println("clear");
}
@Override
public void save(Session session) throws IOException {
System.out.println(session.toString());
System.out.println("save");
String id = session.getId();
sdb.putAttributes(new PutAttributesRequest()
.withDomainName(myDomain)
.withItemName(id)
.withAttributes(
new ReplaceableAttribute(mySession,
toString((StandardSession) session), true)));
System.out.println(toString((StandardSession) session));
}
private Object fromString(String s) throws IOException,
ClassNotFoundException {
byte[] data = Base64Coder.decode(s);
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(
data));
Object o = ois.readObject();
ois.close();
return o;
}
private String toString(Serializable o) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(o);
oos.close();
return new String(Base64Coder.encode(baos.toByteArray()));
}
}
■[AWS]AWS Elastic Beanstalk を使う その11
色々環境が揃ってきたので、Tomcat の Session Persistence を拡張しようと思った感じですw。
まずはじめに Tomcat のソースをダウンロードしてEclipseにインポートしてビルドに必要なライブラリを追加します。
FileStoreとJDBCStoreが参考になりますね。
んじゃ、これを参考に SimpleDBStoreを作りましょう。
FileStore と JDBCStore は StoreBase抽象クラスを継承してStoreインタフェースを実装しています。同じようにクラス定義します。
雛形はこんな感じかな。
package jp.cm.aws.tomcat.session;
import java.io.IOException;
import org.apache.catalina.Session;
import org.apache.catalina.Store;
import org.apache.catalina.session.StandardSession;
import org.apache.catalina.session.StoreBase;
public class SimpleDBStore extends StoreBase implements Store{
@Override
public int getSize() throws IOException {
return 1;
}
@Override
public String[] keys() throws IOException {
String[] ks = {"keykeykey"};
return ks;
}
@Override
public Session load(String id) throws ClassNotFoundException, IOException {
System.out.println("load");
StandardSession session =
(StandardSession) manager.createEmptySession();
return session;
}
@Override
public void remove(String id) throws IOException {
System.out.println("remove");
}
@Override
public void clear() throws IOException {
System.out.println("clear");
}
@Override
public void save(Session session) throws IOException {
System.out.println("save");
}
}
後はここにSessionの永続化と復元の処理を入れればOKのはず。
続きまして、上記の雛形がちゃんと動くか確認します。
アプリケーションフォルダの下にMETA-INFフォルダを作ってcontext.xmlを作ります。中身はこんな感じ。
<?xml version='1.0' encoding='utf-8'?>
<Context docBase="${catalina.home}/webapps/simpledb"
path="/simpledb"
reloadable="true"
source="org.eclipse.jst.j2ee.server:test"
backgroundProcessorDelay="1" >
<Manager className="org.apache.catalina.session.PersistentManager"
distributable="true"
duplicates="0"
saveOnRestart="true"
maxActive="0"
maxActiveSessions="0"
minIdleSwap="0"
maxIdleSwap="0"
maxIdleBackup="0"
maxInactiveInterval="0"
sessionCounter="0" >
<Store className="jp.cm.aws.tomcat.session.SimpleDBStore"/>
<!--
<Store className="org.apache.catalina.session.FileStore"
directory="${catalina.home}/logs/sessions" >
</Store>
-->
<!--
<Store className="org.apache.catalina.session.JDBCStore"
checkInterval="1"
connectionURL="jdbc:mysql://mydb.csnpjudtgu1o.us-east-1.rds.amazonaws.com:3306/awstest"
driverName="com.mysql.jdbc.Driver"
sessionAppCol="app_name"
sessionDataCol="session_data"
sessionIdCol="session_id"
sessionLastAccessedCol="last_access"
sessionMaxInactiveCol="max_inactive"
sessionTable="tomcat_sessions"
sessionValidCol="valid_session" />
-->
</Manager>
</Context>
このままだとSimpleDBStoreクラスが見つからないと怒られるので、
TOMCAT_HOME/libにクラスをコピーして置きます。jar化してもOK。
さて、無事にSession Persistenceをしてくれるカスタムクラスの作成に成功しました〜。
ちゃんと動いているか確認してみましょう。
このアプリにひとつjspを作って以下のようにセッションに書き込みをしてみます。
session.setAttribute("key1","value1");
このjspをブラウザから叩くと、以下のようにTomcatのログが出ました!!
2011/01/23 22:27:44 org.apache.catalina.session.PersistentManagerBase swapIn
あとは、SimpleDBにセッション情報を書き込む処理だけですね。
これは、AWS SDK for Java をダウンロードしてlibにjarを追加してごにょごにょすればすぐにできるはず。
今日はここまで。
■[AWS]AWS Elastic Beanstalk を使う その10
では続きまして Beanstalk で PHP を動かしましょう。
これもwarblerと同じようにphpアプリをwar化して配備します。
RubyをJavaプラットフォーム上で動かすためにJRubyを用いましたが、
今度は、PHPをJavaプラットフォーム上で動かすためにQuercusを用います。
Quercusサイトのリンクからwarファイルをダウンロードして展開します。
<?php phpinfo(); ?>
この結果が以下です。
そして、Beanstalkに載せました。
Quercus
■[AWS]AWS Elastic Beanstalk を使う その9
jruby-rack.jarのバージョンが問題だったみたい。
1.0.5 から 1.0.3 に下げたらうまくいけました。
これでrailsアプリからTomcat用のwarファイル生成OKですー。
>gem uninstall jruby-rack >gem install jruby-rack -v 1.0.3 >sudo warble config >sudo warble
アドレス部分をご覧ください。
しかーし、生成されたwarファイルが大きすぎてアップロードできないし。。
って、Management Console から Upload New Version って指定したら怒られたのに、Environment の Action から Deploy a Different Version ってやったらアップロードできた!
そして、Beanstalk で Ruby on Rails の動作環境が整いました〜。
オレオレHerokuだねー。
2011-01-22
■[AWS]AWS Elastic Beanstalk を使う その8
Beanstalkでどうやったらセッションレプリケーションしようかって悩んで調べていたんですがカンタンなやり方が分かりました。Tomcatの基本を知らないオイラが馬鹿だったw。
rootで入ってserver.xmlを設定する必要なかったんですw。
配備するアプリケーション(後でwar化するやつ)にMETA-INFフォルダを作って、
context.xmlを記述すれば反映されることが分かりました。
Beanstalkがどうのこうのではなく、ただのTomcatに配備するアプリ側の設定だけでいけるんですね。
ということは、Beanstalkに配備するアプリの設定だけで、ファイルオーバー対応するためのセッションレプリケーション指定(JDBCStore)できるわけですね。
もー、Beanstalk最強じゃんw。
Tomcat 6 Session Persistence through JDBCStore
http://www.intelligrape.com/blog/2010/07/21/tomcat-6-session-persistence-through-jdbcstore/
http://syo.cocolog-nifty.com/freely/2007/05/tomcat.html
Tomcat 5.5 で session persistence (using JDBCStore)
■[AWS]AWS Elastic Beanstalk を使う その7
Tomcatを管理するための設定と等々がされているBeanstalk用のAMIの中身を探っています。
そこで驚愕の事実が!?(大げさかも)
なんと、Tomcatを管理するBeanstalkの肝といえる部分(Host Managerっていうのかな)がRuby1.9.1で書かれています。設定ファイルはYamlで記述されている。他データはSqlite3に保存されているみたい。
Tomcatの死活監視にはbluepillっていうツールが使われているみたい。
ここらへんも勉強になるなぁ。
いいものはどんどん取り入れると。
bluepill
■[AWS]AWS Elastic Beanstalk を使う その6
Beanstalkでインスタンス立ち上げると、次に思うのがTomcatのバージョン上げたり、server.xml編集したりいろいろやりたい!ってはず!?
ということで、方法が無いか調べたらあっさり分かりました。
まず、普通にBeanstalkでEnvironmentを作ります。
次にEC2タブのKey Pairsで事前に鍵を用意します。keysample
.pemとかね。
Environmentのコンフィグ画面から先ほど作ったKey Pairを指定します。
これで、普通のEC2インスタンスとしてSSHでログインできるようになります。
こんな感じで入れましたよー。
__| __|_ ) Amazon Linux AMI
_| ( / Beta
___|\___|___|
ちなみにログインIDは、ec2-user です。rootじゃ入れません。
sudo su -
ログインすれば普通のLinuxですからserver.xmlを修正するとかして、DataSourceの設定とか、セキュリティロールの設定なんかをすればいい。
これで念願のSession Clusteringが実現できるのでは!?と。
基本的にはスティッキーセッションロードバランシングで処理先を固定にしておいて、万が一インスタンスが落ちた際には、他のインスタンスでセッション内容を引き継ぐと。
MySQLをHttpSessionの永続化先にしておけば、オートスケール、ロードバランサー、フェイルオーバーに対応したお気楽クラウド生活が!!
各種設定とか必要なアプリのインストールが終わったらログアウトして、
オリジナルのAMIを作成します。Custom AMI ですね。
最後にBeanstalkのEnvironmentコンフィグ画面で先ほど作成したCustom AMI IDを指定しましょう。
最初っからオリジナルのAMIを使いたいって人もいると思うんですが、AWSとしてはAmazon AMIにはTomcat の再起動や、WARファイルの配備、ログの取得など裏で色々やっているので、Beanstalkで使うにはAmazon AMIからコピーしてほしいってさ。
Editing server.xml, logging in as root
https://forums.aws.amazon.com/thread.jspa?threadID=58723&tstart=0
https://forums.aws.amazon.com/thread.jspa?threadID=58744&tstart=0
2011-01-21
■[AWS]AWS Elastic Beanstalk を使う その5
Ruby on Rails を Beanstalk で動かしてみましょう。
>gem update >gem update --system >gem install rails --version '<3' >gem install warbler >gem install jruby-openssl >gem install rake >gem install activerecord-jdbcmysql-adapter >gem install jruby >gem install jruby-rack
>rails -v Rails 2.3.10 >ruby -v ruby 1.8.7 >rails railssample >cd railssample >ruby script/generate scaffold person name:string age:integer >rake db:migrate >ruby script/server
次にrailsからwarファイルを吐き出すwarblerの手続きです。これいいね。
さっそく
>warble config >warble war
で完成するはずですが、コケる。。。。只今調査中。。
http://takeoba.com/index.php?gems%A4%AB%A4%E9%A4%CERails%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB
Warblerでwarファイルを作る
http://rubyist.g.hatena.ne.jp/muscovyduck/20090205/p1
JRuby on Rails on Amazon Elastic Beanstalk
http://blog.headius.com/2011/01/jruby-on-rails-on-amazon-elastic.html
■[AWS]AWS Elastic Beanstalk を使う その4
Beanstalk の System.getProperties()で取得できるキーと値一覧
KEY : java.runtime.name VALUE : OpenJDK Runtime Environment
KEY : AWS_ACCESS_KEY_ID VALUE :
KEY : sun.boot.library.path VALUE : /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/i386
KEY : java.vm.version VALUE : 19.0-b06
KEY : shared.loader VALUE :
KEY : java.vm.vendor VALUE : Sun Microsystems Inc.
KEY : java.vendor.url VALUE : http://java.sun.com/
KEY : AWS_SECRET_KEY VALUE :
KEY : path.separator VALUE : :
KEY : tomcat.util.buf.StringCache.byte.enabled VALUE : true
KEY : java.util.logging.config.file VALUE : /usr/share/tomcat6/conf/logging.properties
KEY : java.vm.name VALUE : OpenJDK Client VM
KEY : file.encoding.pkg VALUE : sun.io
KEY : sun.java.launcher VALUE : SUN_STANDARD
KEY : user.country VALUE : US
KEY : sun.os.patch.level VALUE : unknown
KEY : java.vm.specification.name VALUE : Java Virtual Machine Specification
KEY : user.dir VALUE : /usr/share/tomcat6
KEY : java.runtime.version VALUE : 1.6.0_20-b20
KEY : java.awt.graphicsenv VALUE : sun.awt.X11GraphicsEnvironment
KEY : java.endorsed.dirs VALUE :
KEY : os.arch VALUE : i386
KEY : java.io.tmpdir VALUE : /var/cache/tomcat6/temp
KEY : line.separator VALUE :
KEY : java.vm.specification.vendor VALUE : Sun Microsystems Inc.
KEY : java.naming.factory.url.pkgs VALUE : org.apache.naming
KEY : java.util.logging.manager VALUE : org.apache.juli.ClassLoaderLogManager
KEY : os.name VALUE : Linux
KEY : sun.jnu.encoding VALUE : UTF-8
KEY : java.library.path VALUE : /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/i386/client:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/i386:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/../lib/i386:/usr/java/packages/lib/i386:/lib:/usr/lib
KEY : java.specification.name VALUE : Java Platform API Specification
KEY : java.class.version VALUE : 50.0
KEY : sun.management.compiler VALUE : HotSpot Client Compiler
KEY : os.version VALUE : 2.6.34.7-56.40.amzn1.i686
KEY : user.home VALUE : /usr/share/tomcat6
KEY : catalina.useNaming VALUE : true
KEY : user.timezone VALUE : Universal
KEY : java.awt.printerjob VALUE : sun.print.PSPrinterJob
KEY : file.encoding VALUE : UTF-8
KEY : java.specification.version VALUE : 1.6
KEY : catalina.home VALUE : /usr/share/tomcat6
KEY : JDBC_CONNECTION_STRING VALUE :
KEY : java.class.path VALUE : :/usr/share/tomcat6/bin/bootstrap.jar:/usr/share/tomcat6/bin/tomcat-juli.jar:/usr/share/java/commons-daemon.jar
KEY : user.name VALUE : tomcat
KEY : java.naming.factory.initial VALUE : org.apache.naming.java.javaURLContextFactory
KEY : package.definition VALUE : sun.,java.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat.,org.apache.jasper.
KEY : java.vm.specification.version VALUE : 1.0
KEY : java.home VALUE : /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre
KEY : sun.arch.data.model VALUE : 32
KEY : user.language VALUE : en
KEY : java.specification.vendor VALUE : Sun Microsystems Inc.
KEY : java.vm.info VALUE : mixed mode
KEY : java.version VALUE : 1.6.0_20
KEY : java.ext.dirs VALUE : /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/ext:/usr/java/packages/lib/ext
KEY : sun.boot.class.path VALUE : /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/resources.jar:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/rt.jar:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/sunrsasign.jar:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/jsse.jar:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/jce.jar:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/charsets.jar:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/netx.jar:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/plugin.jar:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/rhino.jar:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/modules/jdk.boot.jar:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/classes
KEY : server.loader VALUE :
KEY : java.vendor VALUE : Sun Microsystems Inc.
KEY : catalina.base VALUE : /usr/share/tomcat6
KEY : file.separator VALUE : /
KEY : java.vendor.url.bug VALUE : http://java.sun.com/cgi-bin/bugreport.cgi
KEY : common.loader VALUE : ${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar
KEY : sun.io.unicode.encoding VALUE : UnicodeLittle
KEY : sun.cpu.endian VALUE : little
KEY : PARAM5 VALUE :
KEY : package.access VALUE : sun.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat.,org.apache.jasper.,sun.beans.
KEY : PARAM4 VALUE :
KEY : PARAM3 VALUE :
KEY : PARAM2 VALUE :
KEY : PARAM1 VALUE :
KEY : sun.cpu.isalist VALUE :
■[AWS]ActionScript API for AWS (Amazon Web Services)
ActionScript からカンタンにAWSへアクセスするためのAPI群です。
とりあえずswcが必要な方はこちらへ
[cmawslib.swc](https://github.com/satoshi7/ActionScript-API-for-AWS-Amazon-Web-Services-/blob/master/bin/cmawslib.swc)
Amazon Web Services Query API が提供しているものはほぼ全ての操作に対応しています。
- RDS - Amazon Relational Database Service
- SDB - Amazon SimpleDB
- SQS - Amazon Simple Queue Service
- ACW - Amazon CloudWatch
- IAM - AWS Identity and Access Management
- 使い方
本コードは Adobe Flex Library Project で作っています。
ご使用の際には Adobe Flash Builder などでプロジェクトのインポートを行い、
アプリケーション側の設定画面からライブラリ追加をしてご利用ください。
- 開発の仕方
以下のように短いコードを書いて頂ければカンタンにAWSを操作できます。
- Amazon Elastic Compute Cloud
var ec2:EC2 = new EC2(); ec2.setAWSCredentials(AWSKey.key,AWSKey.sec); ec2.addEventListener(AWSEvent.RESULT,awsHandler); ec2.executeRequest(EC2.DESCRIVE_REGIONS);
var emr:EMR = new EMR(); emr.setAWSCredentials(AWSKey.key,AWSKey.sec); emr.addEventListener(AWSEvent.RESULT,awsHandler); emr.executeRequest(EMR.DESCRIBE_JOB_FLOWS);
- Amazon Relational Database Service
var rds:RDS = new RDS(); rds.setAWSCredentials(AWSKey.key,AWSKey.sec); rds.addEventListener(AWSEvent.RESULT,awsHandler); rds.executeRequest(RDS.DESCRIBE_DB_INSTANCES);
- Amazon Simple Notification Service
var sns:SNS = new SNS(); sns.setAWSCredentials(AWSKey.key,AWSKey.sec); sns.addEventListener(AWSEvent.RESULT,awsHandler); sns.executeRequest(SNS.LIST_TOPICS);
var sdb:SDB = new SDB(); sdb.setAWSCredentials(AWSKey.key,AWSKey.sec); sdb.addEventListener(AWSEvent.RESULT,awsHandler); sdb.executeRequest(SDB.LIST_DOMAINS);
- Amazon Simple Queue Service
var sqs:SQS = new SQS(); sqs.setAWSCredentials(AWSKey.key,AWSKey.sec); sqs.addEventListener(AWSEvent.RESULT,awsHandler); sqs.executeRequest(SQS.LIST_QUEUES);
- Amazon CloudWatch
var acw:ACW = new ACW(); acw.setAWSCredentials(AWSKey.key,AWSKey.sec); acw.addEventListener(AWSEvent.RESULT,awsHandler); acw.executeRequest(ACW.LIST_METRICS);
- AWS Identity and Access Management
var iam:IAM = new IAM(); iam.setAWSCredentials(AWSKey.key,AWSKey.sec); iam.addEventListener(AWSEvent.RESULT,awsHandler); iam.executeRequest(IAM.LIST_ACCESS_KEYS);
- AWS Elastic Beanstalk
var ebt:EBT = new EBT(); ebt.setAWSCredentials(AWSKey.key,AWSKey.sec); ebt.addEventListener(AWSEvent.RESULT,awsHandler); ebt.executeRequest(EBT.DESCRIBE_APPLICATIONS);
public function awsHandler(event:AWSEvent):void{ var data:Object = event.data; //XML形式のテキストが取得されます。 ta.text += data.toString(); }
- 注意
本ライブラリを使うには、AWSと契約を行って頂き、発行される Access Key ID と Secret Access Key を使用します。
事前にご準備ください。
- コントリビュータ
[@sato_shi](http://twitter.com/sato_shi/) - Classmethod,Inc. http://classmethod.jp/(http://classmethod.jp/)]
ActionScript API for AWS (Amazon Web Services)
https://github.com/satoshi7/ActionScript-API-for-AWS-Amazon-Web-Services-
2011-01-20 AWS Elastic Beanstalk を使ってみる
■[AWS]AWS Elastic Beanstalk を使う その3
Environmentのコンフィグ画面のContainerタブで、Environment Properties ってなんやねんっ!って思って調べました。結論から言いますとシステムプロパティを設定しているだけでした。
要は、DB接続先とかAWS接続先とか各種環境変数をBeanStalkのEnvironment Propertiesとして書いておけば、テスト用アプリ、本番用アプリ、テスト用DB、本番用DBなどの切り替えをソースの修正なしに画面のみで行える訳です。
勝手にDB接続してコネクションプールしてくれるとかは幻想でしたw。
んで、今度はBeanStalkに載せるアプリ側で値を取得してみましょう。
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>Hello AWS Web World!</title>
<link rel="stylesheet" href="styles/styles.css" type="text/css" media="screen">
</head>
<body>
<div id="content" class="container">
<div class="section grid grid15 gridlast ec2">
<h2>System Properties:</h2>
<ul>
<% Properties props = System.getProperties(); %>
<li><%= "AWS_ACCESS_KEY_ID : " + props.getProperty("AWS_ACCESS_KEY_ID") %></li>
<li><%= "AWS_SECRET_KEY : " + props.getProperty("AWS_SECRET_KEY") %></li>
<li><%= "JDBC_CONNECTION_STRING : " + props.getProperty("JDBC_CONNECTION_STRING") %></li>
<li><%= "PARAM1 : " + props.getProperty("PARAM1") %></li>
<li><%= "PARAM2 : " + props.getProperty("PARAM2") %></li>
<li><%= "PARAM3 : " + props.getProperty("PARAM3") %></li>
<li><%= "PARAM4 : " + props.getProperty("PARAM4") %></li>
<li><%= "PARAM5 : " + props.getProperty("PARAM5") %></li>
</ul>
</div>
</div>
</body>
</html>
実行結果はこれ。確かに値が取れていますね。
どうやって値を取るかどこにも載っていなかったのですが、
勘でどうにかなりました。。。これドキュメント載せるべきかと。
ではではー。
■[AWS]AWS Elastic Beanstalk を使う その2
続きましてオリジナルアプリをEclipseからアップするテスト。
Classic Eclipse にプラグイン入れて動かそうと思ったけど、
動きが微妙なので、素直にWeb Tools Platform All in Oneをダウンロード
んで、
AWS Toolkit for Eclipse をダウンロードぉ〜。
Eclipse 3.6 をインストールしてUpdateSiteの指定
アップデート完了して初期画面
AWSのAccess Key と Secret Key を入力します。
プロジェクトの新規作成から AWS Java Web Projectを選択
雛形プロジェクトを選択することもできる。
Basic Java Web Application はシンプルはJSPアプリで、
Travel LogはS3,SimpleDB,SNSを使っているみたい。
Run on Server で ローカルのWebアプリをBeanstalkにデプロイ
■[AWS]AWS Elastic Beanstalk を使う その1
AWS Management Console にタブが増えている〜。
んで、これは何でしょうw
どんだけーーー。
んじゃ、環境を変更してみよう。
ロードバランサのスティッキーセッションはデフォルトでOFFのようなのでONに設定
オートスケーリングはデフォルトでMax4になっているので1に設定w。
重要イベント発生時にAmazon SNS を使ってメール通知を設定
JVMのログ吐き出し先をAmazon S3 に設定とかすてきすぎる。
JDBC接続先のURL設定〜。これはTomcatのDataSource設定かなぁ。
Amazon RDSとかMySQLとかOracleのURL設定すればいいみたい。
Create New Applicationを選択
サブドメインの設定ができるのね。
とりあえずAdobe BlazeDSのsamples.warをアップしてみる。
はい。完成!
http://classmethod.elasticbeanstalk.com/
(そのうち消えるURLですw)
さくっとBlazeDS表示されましたねw
管理画面みて何となく分かったのですが、
1つのEnvironmentの中に複数のApplicationを置くような感じですかね?
いや、玉川さんのブログを見ると、1つのApplicationの中に複数のEnvironmentがあるんですねぇ。
Applicationごとにサブドメイン設定されたURLが割り当てられています。
Applicationを削除すると、EC2の管理コンソールでインスタンスが消えますので、1Applicationで最低1インスタンスってのがよくわかります。
2010-12-22
■AWS SDKs for ActionScript 0.1
まぁ名前はかっこ良いですが中身はまだまだですw。
ActionScriptでクラウドを操作できます。
何も考えずに気軽に使えるのがいいかなってことで短いソースでごにょごにょできますwww
var ec2:EC2 = new EC2(); ec2.setAWSCredentials(AWSKey.key,AWSKey.sec); ec2.addEventListener(AWSEvent.RESULT,awsHandler); ec2.executeRequest(EC2.DESCRIVE_REGIONS);
EC2,EMR,RDS,SNS,SimpleDB,CloudWatch,IAM,SQSあたりのAPIほぼ全てにアクセスできます。
次はgithubに上げるか。
2010-12-20
■FMS on AWS
___ _ _
/ | | | | |
/ /| | __| | ___ | |__ ___
/ /_| |/ _ |/ _ \| _ \ / _ \
/ ___ | (_| | (_) | |_) | __/
/_/ |_|\__,_|\___/|____/ \___|
Revolutionize Interactive Media Experiences
Adobe Systems Incorporated
Adobe Flash Media Server on Amazon Web Services
Version: 4.0.1.8011 AMI Version: r1
Product Information: http://www.adobe.com/go/fmsaws
Support Forums: http://forums.adobe.com/community/flash/flash_media_server
Paid Product Support: http://www.adobe.com/support/flashmediaserver/
2010-12-13
■GalaxyTab & AIR for Android 勉強会
RETWEETで話しきれなかった部分とか、
よろしければどうぞー。
■自宅にGoogleTVが来た
自宅にGoogleTVが来ました。
某米国の住所に送られてきたGoogleTVを日本に送り直しました。
なるほど、テレビとDVDプレイヤーの間にGoogleTVを挟んでHDMI接続ってことね。奇跡的にすんなりつながりました。米国ではさらにセットトップボックスが間に入りそうです。
起動したらロゴがでた!
更新中。。。
ハイビジョンテレビ映った!キレイ!!
さらにアップデート
おーメニューでたー。
初のテレビツイッター!
そのまま通販ページへ
株価情報
テレビ見ながら検索
amazonで映画購入
NBA試合結果
右下でテレビ観ながらメニュー使う
テレビ観ながらヤフー
トロン観ながら1,2,3,4
geso と検索
ゲソを視聴
Googleさんは国民全員にタダで配ろうとしているんじゃないかなぁ。
GoogleTV と Androidケータイ で生活できちゃいます。
パソコン詳しい必要全くありません。
そんな未来がすぐ近く。。。。
2010-11-28
■[Flex]Adobe MAX 2010 RETWEET 発表資料
皆様多くの方のご参加ありがとうございました。
遅くなりましたが資料をアップいたしました。
何ができるの?
AIR for Desktop
AIR for Android
どうやって作るの?
Flex SDK 4.5 Hero
Adobe AIR Launchpad
実用的なものを作るには?
カスタムURLスキーム for iOS
暗黙的インテント for Android
サーバー連携?
BlazeDS
Spring framework
Spring BlazeDS and Spring ActionScript
改めて何かの機会にご紹介させていただきますw。
2010-10-28
■[Flex]AIR for Android with Flex 4.5
MAXの熱をそのままにGetting Start!
簡単なアプリを作りながらAndroidアプリ開発を学びます。
レッスン1:Flex 4.5 を使った画面遷移。
<?xml version="1.0" encoding="utf-8"?> <s:MobileApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" firstView="views.FIrstView"> </s:MobileApplication>
中身は何も記述していません。ポイントはfirstViewの指定です。これは、ナビゲーションベースのUIを実現していて、最初に表示するページを指定します。
FirstView.mxmlを見てみます。
<?xml version="1.0" encoding="utf-8"?> <s:View xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" title="ホーム"> <s:Button label="go to SecondView" click="{navigator.pushView(views.SecondView)}" width="100%" /> </s:View>
ボタンをクリックした際に次のページへ遷移する記述をしています。navigator.pushViewというところがポイントです。
SecondView.mxmlを見てみます。
<?xml version="1.0" encoding="utf-8"?> <s:View xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" title="次のページ"> <s:Button label="go to FirstView" click="{navigator.popView()}" width="100%"/> </s:View>
一方、次のページでは、ボタンクリックした際に前のページに戻っています。navigator.popViewというところがポイントです。
これで簡単なAndroidアプリができました。約2分ですw。
実行結果を見てみましょう。
続いて、ウィンドウを横にしてみます。
■[Flex]Adobe MAX 2010 RETWEET
私の担当は、AIR for Android 上で動作する Flex SDK 4.5 (Hero)について、Flash Builder を用いながら何が実現できるのかどのように作るのか解説をします。
Adobe MAX 2010 RETWEET
〜 Adobe Flash Platform 最新情報 from MAX
開催日時 2010年11月25日(木)13:00〜17:40
開催場所 ベルサール汐留
定員 400〜500名
申し込み方法 下記リンクの[申し込み]ボタンをクリックして、申し込みページへお進み下さい。
「Adobe MAX 2010 Follow Up」
「Android携帯の取り組み」
Flash Player 3D / InMarket / AIR 2.5 (mobile + TV) / Roadmaps / XD / Sneak Peeks Demo : Amepigg Android
「次期Flexフレームワーク”Hero”:Sparkコンポーネント」
taiga.jp
廣畑大雅氏
「スマートフォンアプリ開発とフレームワークの活用」
clockmaker.jp
池田泰延氏
「進化するデザイン/開発ワークフロー : Flash Builder “Burrito” + Flash Catalyst “Panini”」
AKABANA
有川榮一氏
「Flash Player レンダリング」
cuaoar
上条彰宏氏
「スマートフォンアプリ開発 with “Hero”」
横田聡氏
「AIR for Androidアプリ開発」
浦野大輔氏/切通伸人氏
参加無料! Adobe MAX 2010 RETWEET 〜 Adobe Flash Platform 最新情報 from MAX
2010-10-25
■[Flex]Adobe MAX 受講予定 一覧
Monday, October 25, 2010
9:30 am - 11:30 am General Session: Welcome to the Revolution Nokia Theatre, L.A. Live
2:00 pm - 3:00 pm Developing Adobe AIR apps for the BlackBerry® Tablet OS
3:30 pm - 4:30 pm Advanced ActionScript with Apparat
5:00 pm - 6:00 pm Using Flash Catalyst CS5 to Design Rich User Experiences
8:00 pm - 10:00 pm Meet the Teams Los Angeles Convention Center
Tuesday, October 26, 2010
8:30 am - 9:30 am Developer Tips for Building Great Games using AIR for Android
10:00 am - 12:00 pm General Session: User Experience: The Next Generation Nokia Theatre, L.A. Live
1:30 pm - 2:30 pm Designing PDF Portfolio Layouts with Flash Builder 4
3:00 pm - 4:00 pm Building Language Learning Tools with Flash Catalyst, Flash Builder,
and Flash Media Server
4:30 pm - 5:30 pm New LiveCycle Data Services Support for HTML5/JavaScript,
Android, Apple iOS, Java, and .NET
6:00 pm - 8:00 pm Sneak Peeks Nokia Theatre, L.A. Live
Wednesday, October 27, 2010
8:00 am - 9:00 am Deep Dive into Mobile Development with the Flex SDK
9:30 am - 10:30 am Building Enterprise Adobe AIR Applications for Android
11:00 am - 12:00 pm Rapidly Building Flex RIAs with Spring BlazeDS Integration and
Spring Roo
1:30 pm - 2:30 pm Multiscreen Development Techniques with Flex and Adobe AIR
3:30 pm - 4:30 pm Having Fun with Layouts in Flex 4
5:00 pm - 6:00 pm Google + Flash Platform = Awesome
Locations are tentative and may change. Please check your schedule the week of October 18 for confirmed room locations.
この他にコミュニティブースに顔出したり、Japanセッションに参加したりと盛りだくさんです。。。
そして、落書きしてきました。





































































