KEMBAR78
Cloud Programing for beginner | PDF
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/SOAP
AWS 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.
ご清聴ありがとうございました。

Cloud Programing for beginner

  • 1.
    1Copylight © Classmethod,Inc. 使ってわかる クラウドプログラミング AWS勉強会 in 北海道 Developers.IO Meetup 05(LT) 2014/06/28 クラスメソッド株式会社 石川 覚
  • 2.
    2Copylight © Classmethod,Inc. 自己紹介 石川 覚 (いしかわ さとる) • SIer、IP電話開発会社を経て • CMに2014/06 join • 札幌出身、東京に8年 • Linux, Java, MySQL • 自称 何でも屋 • 当然 AWS好き クラスメソッド株式会社 ソリューションアーキテクト
  • 3.
    3Copylight © Classmethod,Inc. 概要 • クラウドプログラミングとは • AWS SDKの紹介 • AWS SDK for Java の開発環境 • アプリ用のアカウント作成 • EC2〜起動してみよう! • S3〜DropBoxを垣間見る • EC2上で動作させる時の違い • 他のAWSサービスとの比較 • 最後に
  • 4.
    4Copylight © Classmethod,Inc. クラウドプログラミングとは • “Programmable Infrastructure” クラウドが提供するサービスやマシーンリソースの制御 や監視ができる。 • 自社のサービスにクラウドサービスを取り込む S3をストレージサービスのバックエンドとして取り込 んだり、SaaS/PaaS/IaaSのバックエンドのインフラと して取り込む。 AWS SDK
  • 5.
    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以外にもあります
  • 6.
    6Copylight © Classmethod,Inc. AWS SDKの紹介(2) • AWS SDKの動作イメージ 以下、PCからAWSの通信の例 (EC2の場合はIAMRole) 通信/HTTPS 起動・停止 Put、Get DB起動 バックアップ 情報取得 REST/SOAP AWS SDK Credential APIロギング
  • 7.
    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」を 選択してインストールする。
  • 8.
    8Copylight © Classmethod,Inc. アプリ用のアカウント作成(1) • プログラミングその前に...IAMユーザ 普段Management Consoleに接続しているアカウント は、Unixの世界の”root”ユーザのようなもので、セ キュリティリスクが高く、公開された場合に回避する すべがありません。そのためユーザ権限でアプリを動 作させてはいけません。 以降、IAMユーザアカウントを登録します。 ※IAMとは IAM(Identity and Access Management)により、AWSサービス およびリソースへのアクセスを安全にコントロールすることができ ます。IAM を使用すると、AWS のユーザーとグループを作成およ び管理し、アクセス権を使用して AWSリソースへのアクセスを許可 および拒否できます。
  • 9.
    9Copylight © Classmethod,Inc. アプリ用のアカウント作成(2) • アカウントの作成 Management Consoleで”IAM”の画面を開き、 “Users”をクリックします。 [Create New Users]ボタンを押す と、ダイアログが表示されるので、 ユーザ名を入力する。 今回は「hokkaido」。
  • 10.
    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はプロパティファイルを生成するが上記のファイルを参照。
  • 11.
    11Copylight © Classmethod,Inc. アプリ用のアカウント作成(4) • 権限の付与 “hokkaido”アカウントをチェック、 “Permissions”タブを選択して、 [Attched User Policy]ボタンを押す。 今回は”Power User Access” 権限を付与、[Select]ボタンを押す。ダ イアログが表示された後、[Apply Policy]ボタン押すと適用されます。
  • 12.
    12Copylight © Classmethod,Inc. EC2~起動してみよう!(1) • AMIからEC2インスタンスを起動させる – EC2Clientインスタンスの生成 – AMIからEC2インスタンスを生成 – EC2インスタンスを起動 実行した回数分インスタンスが起動される。
  • 13.
    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);
  • 14.
    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)
  • 15.
    15Copylight © Classmethod,Inc. S3〜DropBoxを垣間見る (1) • バケットにディレクトリ、ファイルを順に保存 – S3Clientインスタンスの生成 – Bucketの作成 – ファイルの保存 – ファイルの取得 – 期限付きURLによるファイル公開
  • 16.
    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")));
  • 17.
    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されない ようにスコープに注意する
  • 18.
    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”と なります。
  • 19.
    19Copylight © Classmethod,Inc. EC2上で動作させる時の違い(1) • IAMロールの利用 – IAMロールとはAWSのサービスやアクセスコント ロール基盤。 – EC2に対してアクセス権限を割り当てることでインス タンスのファイルシステム上にCredentialsファイル を持たない。 – 侵入されCredentials奪われた場合に悪用されるリス クが回避できる他に、EC2のAMIのポータビリティが 向上する。
  • 20.
    20Copylight © Classmethod,Inc. EC2上で動作させる時の違い(2) • IAMロールに作成と権限の付与 • EC2の起動設定時にIAMロールの指定 EC2をLaunchの”Step 3: Configure Instance Details” に て、作成したIAMロールを指定する。 • Credentialファイルは不要 ホームディレクトリの.aws/credentialファイルは不要 Management Consoleで”IAM”の画面を開き、 “Roles”をクリックします。 以降は、IAMユーザを作成した方法で作成する。
  • 21.
    21Copylight © Classmethod,Inc. 他のAWSサービスとの比較 • 他のAWSの制御や自動化との相違点 – AWS CLI Amazon Linuxではインストール済みなので、shellコマンドと 容易に組み合わせることができる。AWS SDKのような細かな 制御には向かない。 – CloudFormation 構成をテンプレート化により、一発で環境構築ができる。構築 後の変更に対応していないので、使い捨ての環境や基本的な構 成の構築に向いている。 – OptWorks(ベータ) AWS版のchef。今後の改善を期待する。
  • 22.
    22Copylight © Classmethod,Inc. 最後に • SDKのAPIに触れることでAWSの仕組みを理解 • IAMユーザ/IAMロールを使いこなして安心・ 安全なAWSの利用 • Management Console以上にAWSを制御する 手段 • これまで以上にAWSのサービスを効果的に活用
  • 23.
    23Copylight © Classmethod,Inc. ご清聴ありがとうございました。