AWS

DynamoDBのお手軽バックアップ

AWS

アプリの状態だけ保持しているようなあまり大きくないDynamoDBのテーブルを バックアップするのにDataPipeline使うのもどうかと思うのでツール作ろうかと考えていたら 既にあった。 bchew/dynamodumpgithub.com 使ってみたら結構便利だったので使い方をまと…

AWS CLIを使用してEC2のバックアップを定期的に取得する

AWS CLIとjqを使用した実装です。 設定した世代数分保持して古いバックアップから消していきます。 設定値 説明 MAX_IMAGE_NUM バックアップのイメージを保持する世代数 INSTANCE_ID バックアップを取得する対象のEC2インスタンスID AMI_NAME 取得するAMIの…

Packer + Jenkins(on EC2)で自動AMI作成

Packerを使用してAMIの作成を自動化が出来たのでJenkinsでCIしてみようと思います。 Packerの使い方やJenkinsの使い方は割愛して簡単にポイントのみまとめます。 Jenkinsの設定 Gitリポジトリを指定 こちらのようなリポジトリを作成します。 template.jsonが…

AmazonSNS通知の内容を電話で通知する

Twilioという電話通知を行えるAPIサービスを使用して、 SNS通知 -> Lambda -> Twilio -> 携帯電話 という流れで電話通知を行う仕組みを作ってみます。 使用するサービス Amazon SNS AWS Lambda Twilio Twilioのアカウントを作成する サインアップからアカウ…

他のアカウントへS3バケットへのアクセスを許可する

クロスアカウントと外部ID このあたりに書いてあることを実践してみます。 外部 ID について - AWS Security Token Service 一時的なセキュリティ認証情報を使用して AWS リソースをリクエストする - AWS Security Token Service 準備 アクセス元のアカウン…

re:Invent 2014スライドのメモ

AWS

re:Invent 2014のスライドが少しずつ登録されているようなので気になるものをメモ。 サービス別 Amazon Key Management Service (SEC301) Encryption and Key Management in AWS | AWS re:Invent 2014 (SEC406) NEW LAUNCH: Building Secure Applications wi…

CloudFormationのテンプレートをVelocityで生成する

CloudFormationのテンプレートは変数を定義したり他のコンポーネントを参照させたり結構いろいろなことが出来ますが汎用的に書こうとすると複雑になってしまい慣れてない人だと読みづらいテンプレートになってしまうため、 テンプレートのテンプレートを作成…

Amazon ElasticBeanstalkインスタンスをNewRelicでモニタリングする

NewRelicのServersデータ収集用のデーモンをインストールします。 プログラミング言語とか関係なく「.ebextensions」に設定ファイルを置くだけ。 Node.jsでもJavaでも同じ設定ファイルが使えます。 configファイルを作成 設定ファイルの書き方とか置き方とか…

Node.js on ElasticBeanstalkインスタンス上にキャッシュ用のRedisを設置する

前回に続きBeanstalkネタですがBeanstalkでは構成管理ツールのような起動時に環境の初期化を行う機能が備わっています。 EC2 インスタンス上のソフトウェアのカスタマイズ - AWS Elastic Beanstalk Node.jsのアプリケーションをホスティングするだけでなくRe…

Tomcat on ElasticBeanstalkへCloudWatchカスタムメトリクスを簡単に追加する

今までEC2でゴリゴリ作っていたのですが最近ElasticBeanstalkの便利さに気付き始めました。 初期の頃に少しだけ触って初心者向けの機能だと今まで侮っていたのですがEclipseのプラグインも発達してサクサク開発できるので楽しいです。 ElasticBeanstalkでJav…

Chromeの「Secure Shell」を使用してAmazonEC2に接続する

AWS

Secure ShellはChromeからSSHするアプリ。 Windowsの開発環境では普段TeraTermを使用しているのですが、 接続先も保存できて便利そうなので試しに使ってみました。 公開鍵を作成 EC2に接続する際に使用する秘密鍵から公開鍵を生成します。 >ssh-keygen -y -f…

DynamoDB Localをaws-java-sdkから操作

ダウンロードと起動 Additional Tools and Libraries For Amazon DynamoDB - Amazon DynamoDB ここまでは公式ドキュメントに載ってる通り。 $ java –Djava.library.path=. -jar DynamoDBLocal.jar aws-java-sdkから呼び出す 基本的にエンドポイントを"http:/…

Amazon Elastic Transcorderメモ

AWS

今のところ使う予定は無いのですが試しに使って見ました。 思ったより変換速度が早くかなり良いサービスだと思います。 ジョブの設定が少しわかりづらかったので使い方をメモ。 パイプライン作成 S3にテスト用のバケットを1つ作成してInput及びOutputに同じ…

AmazonLinux + GlassFish4 OpenSource版インストールメモ

基本的にこちらの手順に沿ってインストールします。 JDK7ののインストール Java SE Downloadsのページから。ここでは「jdk-7u25-linux-x64.rpm」を選択します。 $ wget http://download.oracle.com/otn-pub/java/jdk/7u25-b15/jdk-7u25-linux-x64.rpm?AuthPa…

EC2インスタンス自身に設定されたタグを取得する

AWS

EC2インスタンスから「http://169.254.169.254/latest/meta-data/」にアクセスすることで 呼び出し元インスタンスのメタ情報が取得出来ますが(参考) aws-java-sdkに見当たらなかったので自分で作ってみた。 package jp.yustam.aws.ec2.util; import java.io.…

リージョン指定をsetEndpointからsetRegion/RegionUtilsに変える

AWS

aws-java-sdkを1.4.1にしたら追加されていたのでメモ 東京リージョンを使ってるとエンドポイントの指定が地味に面倒だったので嬉しい 今まで public AmazonEC2Client ec2client(AWSCredentials cre) { AmazonEC2Client client = new AmazonEC2Client(cre); c…

Amazon ElasticMapreduceメモ

Amazon ElasticMapreduceのテストを兼ねて性能測定を行ったので分かったことをメモ ジョブフローの起動 ジョブフローを登録してからステータスが「RUNNING」に変わるまで4分~6分かかる 立ち上げるインスタンスの数が変わってもこの時間は変わらない MapTask…

EntityTooLarge Your proposed upload exceeds the maximum allowed size

AWS

以前作成したブラウザからS3へ直接ファイルをアップロードする画面を使って 300MBほどのデータをアップロードしたところ以下のようなエラーが発生した HTTP/1.1 400 Bad Request <html> <head> <title></title> </head> <body> <code>EntityTooLarge</code>Your proposed upload exceeds the maximu…</body></html>

java.lang.NoClassDefFoundError: org/codehaus/jackson/map/deser/std/StdDeserializer

Jersey-JSONとAWS-Java-SDKの併用時はjacksonのバージョンに注意 java.lang.NoClassDefFoundError: org/codehaus/jackson/map/deser/std/StdDeserializer StdDeserializer.StringDeserializer (Jackson JSON Processor) 1.9系からはStdDeserializerを使用し…

APIからS3のディレクトリを削除する

AWS

S3のディレクトリを配下のオブジェクトごと一括で削除したいと思ったのですが ディレクトリを削除するというAPIは用意されていないようでオブジェクトを ひとつずつ削除する必要があるそうです AWS Developer Forums: Delete folder using Java API ... if (…

SQSを使って定期的にAPIをコールする仕組みを作ってみる

AWS

今回作る仕組みの概要 SQSにあらかじめメッセージを1つ登録しておきCloudWatchがそれを監視する 取得可能なメッセージ(Available)が閾値(1個)を超えるとAlarmを発生 SNSを通してEC2インスタンスへHTTPリクエストを送信 受信したAPIでSQSのメッセージを取得し…

Amazon SNSからSQSへメッセージを送信する

AWS

通知サービスSNSからSQSへは無料でメッセージを送れるみたいです SNSのメッセージは8KBの制限があるためSQSへメッセージを直接転送できるなら そっちの方が良い。主にCloudWatchと連携して使うことになると思います SQSキューを作成 前回と同様名前を入力す…

Amazon SQSのステータス遷移を確認する

AWS

Amazon Simple Queue Service(Amazon SQS)を少し触ってみたのでメモ 64KBまでの文字列を登録するだけのシンプルなサービス メッセージを追加して取得してみる キューの作成は名前を入力するだけなので省略。作成するとURLが生成される AWS-SDKforJavaにてメ…

Amazon ElasticMapReduceのjarからS3上のファイルを参照する

Hadoopの制御を設定の変更で行う場合にコマンドライン引数で文字列を渡すことはできるが パラメータが増えると引数が長くなってしまうのでファイルから設定を読み込むようにしたいここでは実行するjarファイルからS3上に配置したプロパティファイル読み込ん…

S3の制限付きダウンロードURLにIPアドレス制限をかける

AWS

前回のソースでは有効期限のみの制限となるのでリンクを知っている人なら 誰でもダウンロードできてしまう問題があるもう一段回セキュリティを強化する方法として時間の制限に加えてIPアドレスの制限をかける IPアドレスの制限はIAMのポリシーで行うことがで…

制限付きURLを発行しS3からファイルをダウンロードしてみる

AWS

CloudデザインパターンのPrivate DistributionパターンをJavaで作る際のメモ CDP:Private Distributionパターン - AWS-CloudDesignPattern AWSCredentials cre = new BasicAWSCredentials(【AWSアクセスキー】, 【AWSシークレットキー】); AmazonS3Client cl…

S3アップロード専用のAWSアクセスキーを作成する

AWS

先日S3にブラウザから直接アップロードする機能を作成しましたがAWSアクセスキーが クライアントに見えてしまうのはセキュリティ的に望ましくないのでS3アップロード専用の アカウントを作成します。ここではIAMを使用する IAMポリシーを作成する AWS Policy…

ブラウザからS3に直接ファイルをアップロードする(リダイレクト)

AWS

先日の続きでリダイレクトしたときにリダイレクト先に渡される情報をチェックしました。変数「request」はjavax.servlet.http.HttpServletRequestを使用 <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency> サーバ側のソース System.out.println("[Method]\t" + request.getMe…

ブラウザからS3に直接ファイルをアップロードする

AWS

CloudデザインパターンのDirect Object UploadパターンをJavaで作る際のメモ CDP:Direct Object Uploadパターン - AWS-CloudDesignPatternBrowser Uploads to S3 using HTML POST Forms : Articles & Tutorials : Amazon Web Services こちらを参考にHTMLを…

EMR使用時のSimpleDBを確認

Amazon Elastic MapReduce(EMR)を使用するとSimpleDBが使用されるということだったので確認してみました。 public class SimpleDB { public static void main(String[] args) throws ParseException { String accessKey = "XXXXXXXXXXXXXXXXXXXX"; String se…