cloud programing for beginner

23
1 Copylight © Classmethod, Inc. 使ってわかる クラウドプログラミング AWS勉強会 in 北海道 Developers.IO Meetup 05(LT) 2014/06/28 クラスメソッド株式会社 石川

Upload: satoru-ishikawa

Post on 25-Jun-2015

558 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Cloud Programing for beginner

1Copylight © Classmethod, Inc.

使ってわかるクラウドプログラミング

AWS勉強会 in 北海道

Developers.IO Meetup 05(LT)

2014/06/28クラスメソッド株式会社

石川 覚

Page 2: Cloud Programing for beginner

2Copylight © Classmethod, Inc.

自己紹介

石川 覚 (いしかわ さとる)• SIer、IP電話開発会社を経て

• CMに2014/06 join

• 札幌出身、東京に8年

• Linux, Java, MySQL

• 自称 何でも屋

• 当然 AWS好き

クラスメソッド株式会社

ソリューションアーキテクト

Page 3: Cloud Programing for beginner

3Copylight © Classmethod, Inc.

概要

• クラウドプログラミングとは

• AWS SDKの紹介

• AWS SDK for Java の開発環境

• アプリ用のアカウント作成

• EC2〜起動してみよう!

• S3〜DropBoxを垣間見る

• EC2上で動作させる時の違い

• 他のAWSサービスとの比較

• 最後に

Page 4: Cloud Programing for beginner

4Copylight © Classmethod, Inc.

クラウドプログラミングとは

• “Programmable Infrastructure”

クラウドが提供するサービスやマシーンリソースの制御や監視ができる。

• 自社のサービスにクラウドサービスを取り込む

S3をストレージサービスのバックエンドとして取り込んだり、SaaS/PaaS/IaaSのバックエンドのインフラとして取り込む。

AWS SDK

Page 5: Cloud Programing for beginner

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以外にもあります

Page 6: Cloud Programing for beginner

6Copylight © Classmethod, Inc.

AWS SDKの紹介(2)

• AWS SDKの動作イメージ

以下、PCからAWSの通信の例

(EC2の場合はIAMRole)

通信/HTTPS

起動・停止

Put、Get

DB起動バックアップ

情報取得

REST/SOAPAWS SDK

Credential

APIロギング

Page 7: Cloud Programing for beginner

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」を選択してインストールする。

Page 8: Cloud Programing for beginner

8Copylight © Classmethod, Inc.

アプリ用のアカウント作成(1)

• プログラミングその前に...IAMユーザ

普段Management Consoleに接続しているアカウントは、Unixの世界の”root”ユーザのようなもので、セキュリティリスクが高く、公開された場合に回避するすべがありません。そのためユーザ権限でアプリを動作させてはいけません。

以降、IAMユーザアカウントを登録します。

※IAMとは

IAM(Identity and Access Management)により、AWSサービスおよびリソースへのアクセスを安全にコントロールすることができます。IAM を使用すると、AWS のユーザーとグループを作成および管理し、アクセス権を使用して AWSリソースへのアクセスを許可および拒否できます。

Page 9: Cloud Programing for beginner

9Copylight © Classmethod, Inc.

アプリ用のアカウント作成(2)

• アカウントの作成Management Consoleで”IAM”の画面を開き、

“Users”をクリックします。

[Create New Users]ボタンを押すと、ダイアログが表示されるので、ユーザ名を入力する。

今回は「hokkaido」。

Page 10: Cloud Programing for beginner

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はプロパティファイルを生成するが上記のファイルを参照。

Page 11: Cloud Programing for beginner

11Copylight © Classmethod, Inc.

アプリ用のアカウント作成(4)

• 権限の付与“hokkaido”アカウントをチェック、“Permissions”タブを選択して、[Attched User Policy]ボタンを押す。

今回は”Power User Access” 権限を付与、[Select]ボタンを押す。ダイアログが表示された後、[Apply Policy]ボタン押すと適用されます。

Page 12: Cloud Programing for beginner

12Copylight © Classmethod, Inc.

EC2~起動してみよう!(1)

• AMIからEC2インスタンスを起動させる

– EC2Clientインスタンスの生成

– AMIからEC2インスタンスを生成

– EC2インスタンスを起動

実行した回数分インスタンスが起動される。

Page 13: Cloud Programing for beginner

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);

Page 14: Cloud Programing for beginner

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)

Page 15: Cloud Programing for beginner

15Copylight © Classmethod, Inc.

S3〜DropBoxを垣間見る (1)

• バケットにディレクトリ、ファイルを順に保存

– S3Clientインスタンスの生成

– Bucketの作成

– ファイルの保存

– ファイルの取得

– 期限付きURLによるファイル公開

Page 16: Cloud Programing for beginner

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")));

Page 17: Cloud Programing for beginner

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されないようにスコープに注意する

Page 18: Cloud Programing for beginner

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”と

なります。

Page 19: Cloud Programing for beginner

19Copylight © Classmethod, Inc.

EC2上で動作させる時の違い(1)

• IAMロールの利用

– IAMロールとはAWSのサービスやアクセスコントロール基盤。

– EC2に対してアクセス権限を割り当てることでインスタンスのファイルシステム上にCredentialsファイルを持たない。

– 侵入されCredentials奪われた場合に悪用されるリスクが回避できる他に、EC2のAMIのポータビリティが向上する。

Page 20: Cloud Programing for beginner

20Copylight © Classmethod, Inc.

EC2上で動作させる時の違い(2)

• IAMロールに作成と権限の付与

• EC2の起動設定時にIAMロールの指定EC2をLaunchの”Step 3: Configure Instance Details” にて、作成したIAMロールを指定する。

• Credentialファイルは不要ホームディレクトリの.aws/credentialファイルは不要

Management Consoleで”IAM”の画面を開き、

“Roles”をクリックします。

以降は、IAMユーザを作成した方法で作成する。

Page 21: Cloud Programing for beginner

21Copylight © Classmethod, Inc.

他のAWSサービスとの比較

• 他のAWSの制御や自動化との相違点

– AWS CLI

Amazon Linuxではインストール済みなので、shellコマンドと容易に組み合わせることができる。AWS SDKのような細かな制御には向かない。

– CloudFormation

構成をテンプレート化により、一発で環境構築ができる。構築後の変更に対応していないので、使い捨ての環境や基本的な構成の構築に向いている。

– OptWorks(ベータ)

AWS版のchef。今後の改善を期待する。

Page 22: Cloud Programing for beginner

22Copylight © Classmethod, Inc.

最後に

• SDKのAPIに触れることでAWSの仕組みを理解

• IAMユーザ/IAMロールを使いこなして安心・安全なAWSの利用

• Management Console以上にAWSを制御する手段

• これまで以上にAWSのサービスを効果的に活用

Page 23: Cloud Programing for beginner

23Copylight © Classmethod, Inc.

ご清聴ありがとうございました。