cloud programing for beginner
TRANSCRIPT
1Copylight © Classmethod, Inc.
使ってわかるクラウドプログラミング
AWS勉強会 in 北海道
Developers.IO Meetup 05(LT)
2014/06/28クラスメソッド株式会社
石川 覚
2Copylight © Classmethod, Inc.
自己紹介
石川 覚 (いしかわ さとる)• SIer、IP電話開発会社を経て
• CMに2014/06 join
• 札幌出身、東京に8年
• Linux, Java, MySQL
• 自称 何でも屋
• 当然 AWS好き
クラスメソッド株式会社
ソリューションアーキテクト
3Copylight © Classmethod, Inc.
概要
• クラウドプログラミングとは
• AWS SDKの紹介
• AWS SDK for Java の開発環境
• アプリ用のアカウント作成
• EC2〜起動してみよう!
• S3〜DropBoxを垣間見る
• EC2上で動作させる時の違い
• 他のAWSサービスとの比較
• 最後に
4Copylight © Classmethod, Inc.
クラウドプログラミングとは
• “Programmable Infrastructure”
クラウドが提供するサービスやマシーンリソースの制御や監視ができる。
• 自社のサービスにクラウドサービスを取り込む
S3をストレージサービスのバックエンドとして取り込んだり、SaaS/PaaS/IaaSのバックエンドのインフラとして取り込む。
AWS SDK
5Copylight © Classmethod, Inc.
AWS SDKの紹介(1)
• AWS SDKとは
– AWSの様々なサービスを操作できるSDK
– 各サービスの各操作にAPIが定義
– 細かい制御や自動化が魅力
• 対応言語• AWS SDK for Java
• AWS SDK for .Net
• AWS SDK for Ruby
• AWS SDK for PHP
• AWS SDK for Node.js
• AWS SDK for Android
• AWS SDK for iOS
• AWS SDK for Python(boto)
• AWS SDK for Javascript(Browser)
※ 正式なSDK以外にもあります
6Copylight © Classmethod, Inc.
AWS SDKの紹介(2)
• AWS SDKの動作イメージ
以下、PCからAWSの通信の例
(EC2の場合はIAMRole)
通信/HTTPS
起動・停止
Put、Get
DB起動バックアップ
情報取得
REST/SOAPAWS SDK
Credential
APIロギング
7Copylight © Classmethod, Inc.
AWS SDK for Java の開発環境
• Eclipse IDE for Java EE Developers
– http://www.eclipse.org/downloads/
• AWS SDK & AWS Toolkit for Eclipse
– 導入手順
[Help] > [Install New Software...][Work with]にhttp://aws.amazon.com/jp/eclipseと入力して [return]を押す。「AWS Toolkit for Eclipse」を選択してインストールする。
8Copylight © Classmethod, Inc.
アプリ用のアカウント作成(1)
• プログラミングその前に...IAMユーザ
普段Management Consoleに接続しているアカウントは、Unixの世界の”root”ユーザのようなもので、セキュリティリスクが高く、公開された場合に回避するすべがありません。そのためユーザ権限でアプリを動作させてはいけません。
以降、IAMユーザアカウントを登録します。
※IAMとは
IAM(Identity and Access Management)により、AWSサービスおよびリソースへのアクセスを安全にコントロールすることができます。IAM を使用すると、AWS のユーザーとグループを作成および管理し、アクセス権を使用して AWSリソースへのアクセスを許可および拒否できます。
9Copylight © Classmethod, Inc.
アプリ用のアカウント作成(2)
• アカウントの作成Management Consoleで”IAM”の画面を開き、
“Users”をクリックします。
[Create New Users]ボタンを押すと、ダイアログが表示されるので、ユーザ名を入力する。
今回は「hokkaido」。
10Copylight © Classmethod, Inc.
アプリ用のアカウント作成(3)
• Credential ファイルの取得と設定
アカウントを作成すると、上記のダイアログが表示されます。[Download Credentials] ボタンを押し、Credentialsファイルをダウンロードしてください。ホームディレクトリの.aws/credentialsファイルに “Access Key Id”と“Secret Access Key”を以下の形式で書いてください。
[default]
aws_access_key_id = AAAAAAAAAAAAAAAAAAA
aws_secret_access_key = abCDEfghIJKlMNopqRSVwxyZ01234567890
※Eclipseはプロパティファイルを生成するが上記のファイルを参照。
11Copylight © Classmethod, Inc.
アプリ用のアカウント作成(4)
• 権限の付与“hokkaido”アカウントをチェック、“Permissions”タブを選択して、[Attched User Policy]ボタンを押す。
今回は”Power User Access” 権限を付与、[Select]ボタンを押す。ダイアログが表示された後、[Apply Policy]ボタン押すと適用されます。
12Copylight © Classmethod, Inc.
EC2~起動してみよう!(1)
• AMIからEC2インスタンスを起動させる
– EC2Clientインスタンスの生成
– AMIからEC2インスタンスを生成
– EC2インスタンスを起動
実行した回数分インスタンスが起動される。
13Copylight © Classmethod, Inc.
EC2~起動してみよう!(2)
• EC2Clientインスタンスの生成
※リージョンを指定しないとインスタンスの情報取得に失敗する。
// EC2 Clientインスタンスの生成
ec2 = new AmazonEC2Client();
ec2.setRegion("ap-northeast-1");
“Access Key Id”と“Secret Access Key”をコードやプロパティに書かない!
String accessKey = "AAAAAAAAAAAAAAAAAAA";
String secretKey = "abCDEfghIJKlMNopqRSVwxyZ01234567890";
credentials = new BasicAWSCredentials(accessKey, secretKey);
// EC2 Clientインスタンスの生成
ec2 = new AmazonEC2Client(credential);
ec2.setRegion(NORTHEAST_1);
14Copylight © Classmethod, Inc.
EC2~起動してみよう!(3)
• AMIからEC2インスタンスを生成
• EC2インスタンスを起動// EC2インスタンス起動
RunInstancesResult result = ec2.runInstances(rir);
// AMIからEC2インスタンス生成
RunInstancesRequest rir = new RunInstancesRequest();
rir.withSubnetId("subnet-549756926");
rir.withSecurityGroupIds("sg-37968362");
rir.withImageId(“ami-a3d23745");
rir.withKeyName(“key.pem");
rir.withInstanceType("t1.micro");
rir.withMonitoring(true);
rir.withMinCount(1);
rir.withMaxCount(1);
… サブネット… セキュリティグループ… AMIのID
… keypairのkey
… インスタンスタイプ… モニタリング(CloudWatch)
15Copylight © Classmethod, Inc.
S3〜DropBoxを垣間見る (1)
• バケットにディレクトリ、ファイルを順に保存
– S3Clientインスタンスの生成
– Bucketの作成
– ファイルの保存
– ファイルの取得
– 期限付きURLによるファイル公開
16Copylight © Classmethod, Inc.
S3〜DropBoxを垣間見る (2)
• S3Clientインスタンスの生成
• バケットの作成
• ファイルの保存
※リージョンを指定しないとインスタンスの情報取得に失敗する。
// S3 Clientインスタンスの生成
s3 = new AmazonS3Client();
s3.setRegion("ap-northeast-1");
// S3 Clientインスタンスの生成
String bucketName = "hokkaido-" + UUID.randomUUID();
s3.createBucket(bucketName);
// ファイルの保存
s3.putObject(new PutObjectRequest(bucketName, "data/hoge",
new File("/data/hoge.txt")));
17Copylight © Classmethod, Inc.
S3〜DropBoxを垣間見る (3)
• ファイルの取得S3Object object = s3.getObject(new GetObjectRequest(bucketName, "data/hoge"));InputStream is = null;FileOutputStream fos = null;try {
is = object.getObjectContent();fos = new FileOutputStream("/tmp/hoge.bin");byte[] buffer = new byte[1024*1024];int readSize = -1;while( (readSize = is.read(buffer, 0, buffer.length)) != -1) {
fos.write(buffer, 0, readSize);}fos.flush();
} finally {if (is != null) is.close();if (fos != null) fos.close();
}
データ受信中はS3ClientのインスタンスがGCされないようにスコープに注意する
18Copylight © Classmethod, Inc.
S3〜DropBoxを垣間見る (4)
• 期限付きURLによるファイル公開Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, 30);
Date expiration = cal.getTime();
URL url = s3.generatePresignedUrl(bucketName, "data/hoge", expiration);
制限付きURLの例https://hokkaido-123456a71-f2c2-468a-be84-3bb9911ce123.s3-ap-northeast-1.amazonaws.com/data/aaa?AWSAccessKeyId=ABDEFGHHJKLMNOPSQ&Expires=1403919669&Signature=ejejfqfqjfMP669IfcuHEz%2BduniFs%3D
30秒経過後は“AccessDenied”と
なります。
19Copylight © Classmethod, Inc.
EC2上で動作させる時の違い(1)
• IAMロールの利用
– IAMロールとはAWSのサービスやアクセスコントロール基盤。
– EC2に対してアクセス権限を割り当てることでインスタンスのファイルシステム上にCredentialsファイルを持たない。
– 侵入されCredentials奪われた場合に悪用されるリスクが回避できる他に、EC2のAMIのポータビリティが向上する。
20Copylight © Classmethod, Inc.
EC2上で動作させる時の違い(2)
• IAMロールに作成と権限の付与
• EC2の起動設定時にIAMロールの指定EC2をLaunchの”Step 3: Configure Instance Details” にて、作成したIAMロールを指定する。
• Credentialファイルは不要ホームディレクトリの.aws/credentialファイルは不要
Management Consoleで”IAM”の画面を開き、
“Roles”をクリックします。
以降は、IAMユーザを作成した方法で作成する。
21Copylight © Classmethod, Inc.
他のAWSサービスとの比較
• 他のAWSの制御や自動化との相違点
– AWS CLI
Amazon Linuxではインストール済みなので、shellコマンドと容易に組み合わせることができる。AWS SDKのような細かな制御には向かない。
– CloudFormation
構成をテンプレート化により、一発で環境構築ができる。構築後の変更に対応していないので、使い捨ての環境や基本的な構成の構築に向いている。
– OptWorks(ベータ)
AWS版のchef。今後の改善を期待する。
22Copylight © Classmethod, Inc.
最後に
• SDKのAPIに触れることでAWSの仕組みを理解
• IAMユーザ/IAMロールを使いこなして安心・安全なAWSの利用
• Management Console以上にAWSを制御する手段
• これまで以上にAWSのサービスを効果的に活用
23Copylight © Classmethod, Inc.
ご清聴ありがとうございました。