タケユー・ウェブ日報

Webシステム受託会社の業務の中での気づきや調べごとのメモ。

AWS

cron の代わり CloudWatch Events + Lambda + RunCommand でタスク実行を冗長化するCloudFormationテンプレート

AWSでサーバーレスなcron代替を構成する方法を紹介します。 この構成ではスケジューリングサーバーの管理なしに、冗長な定期タスク実行の仕組みを実現できます。

cron の代わり CloudWatch Events + Lambda + RunCommand でタスク実行を冗長化する

AWSでサーバーレスなcron代替を構成する方法を紹介します。 この構成ではスケジューリングサーバーの管理なしに、冗長な定期タスク実行の仕組みを実現できます。

EC2インスタンスにSSH接続せずに任意のLinuxコマンドを実行する

AWS Systems Managerを利用すると、任意のLinuxコマンドを、外部から実行することもできます。

AWS WAF v2 を使って特定のURLパスにアクセス元IPアドレス制限をかける

やりたかったこと ALB 配下のWebサーバーの特定のURLパス( /admin/ )には特定のIPアドレスからのみアクセスできるようにする IPアドレスの数は1個~たくさん 断念したこと ALBのリスナールールで制限 リスナールールの条件の数は上限が5個で許可対象のIPア…

Lambda から EC2 インスタンス内でコマンドを実行する

Amazon SSM を利用することで、Lambda を使って、EC2インスタンス内で任意のコマンドを実行することができます。 これを CloudWatch Events と組み合わせると、従来CRONによって行っていたような定期実行タスクを、特定のEC2インスタンスをSPOFにすることな…

CloudFormation で CloudWatch Events + Lambda による定期実行タスクを作成する

AWSで定期的な処理を行いたいときは、CloudWatch Events を使い、 Lambda ファンクションの実行をスケジューリングすることで行います。 docs.aws.amazon.com 設定画面 CloudWatch Events のルール Lambdaファンクションの実行権限設定 CloudFormation テン…

aws-sdk-ruby で AWS CodeCommit の SSH キーを登録する

まとめ SSHキーペア生成は OpenSSL::PKey::RSA#generate を使う アップロードは Aws::IAM::Client#upload_ssh_public_key を使う 事の起こり 開発中のWebシステムでは、必要に応じてAWS上のリソースを生成しています。 CodeCommitへのコミットに使用するIAM…

AWS SDK for Ruby で EC2 ImageBuilder のパイプラインを作成する

まとめ Aws::Imagebuilder::Client クラスを使う 事の起こり EC2 ImageBuilder でゴールデンAMIを作成している EC2 ImageBuilder のコンポーネントを変更する際、それを使うようにパイプラインを更新するには、コンポーネント、レシピ、パイプラインとそれぞ…

ApplicationLoadBalancer で Basic認証

まとめ リスナールールで Authorization ヘッダーをチェックする Lambda で WWW-Authenticate: Basic を返す アプリケーションの実装なしに簡易認証できて便利 事の起こり ALB をフロントに置いたWebサイト 全体に認証をかけたい サーバー側コード等の変更は…

ACMでCAAエラーが発生したとき

まとめ CAAレコードが1つでも指定されている場合、指定にない認証局によるSSLサーバ証明書発行は失敗する CAAレコードに amazon.com が必要 事の起こり AWS Certificate Manager を使い、クライアント指定のドメインのサブドメインで Amazon 発行のSSLサー…

CodePipeline のアクションで AWS Lambda を実行する

まとめ CodePipeline のアクションとして AWS Lambda を実行すれば、いろいろなことができる たとえばRailsのdb:migrateをデプロイ時に自動設定したり、ECSスケジュールタスクを登録したり Lambdaのタスクロールを適切に指定すればAWSアクセスキーなしにAWS …

EC2 ImageBuilder コンポーネントのデバッグ

まとめ Terminate instance on failure を false にしてもテスト用のインスタンスは殺される S3へのログ保存は絶対に有効にしろ ステップはなるべく小分けに 事の起こり EC2 ImageBuilder でゴールデンAMIを作っている ある日昨日まで成功してたテストをパス…

AMI(EBSスナップショット)の使用量と料金を確認する

まとめ ボリュームサイズとスナップショットの使用量は別 スナップショットの使用量を知るにはコストエクスプローラーを使う EBS:SnapshotUsage (GB-Month) 使用タイプとコスト配分タグを組み合わせる 事の起こり 現在、EC2 ImageBuilder で作成したGolden A…

AmazonLinux2にgcc6をインストール(標準のgcc7と共存させる)

AmazonLinux2 標準の gcc は 7.x ですが、6.xがほしいときもあります。そんなときは Environment modules を使います。

Shinjuku.rb #37 でSQSとかについて話してきました

shinjukurb.doorkeeper.jp Shinjuku.rb に参加して話をしてきました。 非同期処理は管理画面とかに比べるとちょっと取っつきづらいのか人少なめでしたけど、そのぶんしっかりディスカッションできた気がします。

AmazonLinux 2015.09 に Qt5 WebKit をインストール

まとめ sudo yum install ftp://ftp.riken.jp/Linux/centos/6/os/x86_64/Packages/geoclue-0.11.1.1-0.13.20091026git73b6729.el6.x86_64.rpm \ ftp://ftp.riken.jp/Linux/centos/6/os/x86_64/Packages/NetworkManager-glib-0.8.1-99.el6.x86_64.rpm \ ftp:/…

Amazon SNS + SQS な構成をAWS Ruby SDK V2で自動化する

Amazon SQSへのキューイングの際、直接SQSを使っても良いですが、SNSを使うと抽象度が高くなり捗ることもあります。 CloudWatchを使ってログを残すこともできますし、便利です。 http://dev.classmethod.jp/cloud/aws/sns-topic-should-be-placed-behind-sqs…

Amazon Auroraメモ

クライアント様が使いたいということで調べたことメモ。 aws.amazon.com 費用について Auroraは最低プランでもメモリ15GBぐらいのプランになるので、現在開発サーバで使っているm3.mediumに比べると3倍ほど。 同じr3.largeだと2割ほど高いです。 MySQL Singl…

Aws::S3::Clientでリージョンをまたぐコピーをするときは、コピー先のリージョンを明示してやる。

たとえばダウンロード販売のコンテンツを置く場合など 長期間ホストするファイルの容量が大きい 頻繁なリージョン間転送(EC2など)は発生せず、インターネットへの転送がメイン そこまでダウンロード速度を要求しない こんなとき、S3バケットを価格の安いリ…

Amazon Cognito Identity でFacebookやTwitterログインの名寄せをしてみた

この記事はQiitaに書いた奴のコピーです。 AWS SDK for Ruby V2のCognitoIdentity::Clientクラスを使ってみました。 サンプルコード logins = { 'graph.facebook.com' => 'facebook_oauth2_access_token', 'api.twitter.com' => ['twitter_user_token', 'twi…

Amazon Cognito + AWS JavaScript SDKで作るサーバ不要のアップローダ

ずっと気になってたAmazon Cognitoを使ってみました。 Cognitoを使うと、アプリ側だけでAWSへのアクセス権を与えることができます。 これを利用して、サーバインスタンスなしにいろいろなことができるようになります。 ありがちな例ですが、今日はブラウザか…

OpsWorks + Rails でロールモデル的な役割分担をインスタンスにもたせるBK

OpsWorks + Rails OpsWorksでRailsアプリを運用しようとした場合、通常の方法では、すべてのRailsアプリインスタンスが同じ設定になり、たとえば つねに1つのインスタンスでのみcronを実行する バックグラウンドタスク専用のインスタンス群を用意したい とい…

OpsWorks + Whenever

cron設定をバージョン管理に含めることができるのでありがたいWheneverをOpsWorksで使ったときのメモです。

S3 あるディレクトリ(プレフィクス)のオブジェクトを一括削除(AWS SDK for Ruby)

railsのaws-sdk gemを使ってs3のフォルダ(folder)を削除する 上記記事の方法はSDK v1のものなので。 削除対象のkeyのリスト作成回りとが非常にダサいですが、取り急ぎこんな感じでしょうか。 s3 = Aws::S3::Client.new pager = s3.list_objects(bucket: buck…

Elastic Transcoder ジョブをキャンセルする(AWS SDK for Ruby)

Elastic Transcoder ジョブをキャンセルする http://docs.aws.amazon.com/ja_jp/elastictranscoder/latest/developerguide/canceling-a-job.html ステータスがまだ [Submitted] になっているジョブをキャンセルできます。このステータスは、Elastic Transcod…

aws-flow-ruby でheartbeartを使ってタスクの進捗率を把握したり死活監視できるようにしておく

Amazon Simple Workflow Service (SWF) from Amazon Web Services Japan 実⾏行行時間の長いアクティビティのサポート ・定期的なハートビートの実⾏ というわけでその方法を調べたのでメモ。 default_task_heartbeat_timeout Activityクラスでハートビート…

AWS::SimpleWorkflow::Errors::ValidationException 1 validation error detected: Value '' at 'decisions.1.member.scheduleActivityTaskDecisionAttributes.activityType.version' failed to satisfy constraint: Member must have length greater than or equal to 1

[AWS SimpleWorkflow 400 0.470025 0 retries] respond_decision_task_completed(:decisions=>[{:decision_type=>"ScheduleActivityTask",:schedule_activity_task_decision_attributes=>{:activity_id=>"Activity7",:activity_type=>{:name=>"EncodeActivit…

aws-flow-ruby で失敗したタスクを失敗の種類に応じて繰り返す

SWFでタスクが実行できなかった場合はリトライ、エラーならそこで終了など、コントロールしたい。

CloudFront + 署名付きURL でFlashのcrossdomain.xml に対応する方法(マルチオリジン編)

Why? CloudFrontを通してHLS動画配信などを行う場合、JWPlayerなどFlashを使うのが一般的です。(PCの場合) ただし、Flashでは設置するページと、読み込みソースのドメインが異なる場合、/crossdomain.xmlが要求されます。 もし、例えば一部の課金ユーザに…

CloudFront で Origin のパスが指定できるようになってる件

Amazon CloudFront What's New? Amazon CloudFront Now Allows Directory Path as Origin Name For example, if you're using an Amazon S3 bucket as your origin, you can specify bucket-name.s3.amazonaws.com/production instead of just bucket-name.s…