Contenu connexe
Similaire à Cloud Programing for beginner
Similaire à Cloud Programing for beginner (20)
Plus de Satoru Ishikawa (14)
Cloud Programing for beginner
- 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のサービスを効果的に活用