- 投稿日:2019-05-24T23:36:07+09:00
AWS SSOを使ってCodeCommitを利用する
はじめに
メモとして残しておきます。
参考
https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/setting-up-https-unixes.html
https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/temporary-access.html前提
SSOでログインするときに使用するIAMロールが、CodeCommitへの操作権限を持っていること
AWS CLIとgitコマンドをインストールされていること手順
認証情報ヘルパーを設定する
Git 認証情報ヘルパーがAWS 認証情報を使用するように設定するgit config --global credential.helper '!aws codecommit credential-helper $@' git config --global credential.UseHttpPath trueアクセスキー、シークレットアクセスキー、トークンを設定する
SSOの画面で「Commandline or Programatic access」をクリック
git cloneしてみる
$ git clone https://git-codecommit.us-west-2.amazonaws.com/v1/repos/my-repo Cloning into 'my-repo'... $完了
おまけ
Macの場合、しばら作業しててgit pushしようとしたときに「fatal: unable to access 'https://git-codecommit.us-west-2.amazonaws.com/v1/repos/my-repo/': The requested URL returned error: 403」のようなエラーが発生することがあります。
これは、CodeCommitが発行する認証情報が15分で無効になるが、gitコマンドが使用するkeychainユーティリティが無効になった認証情報を使ってアクセスを試行するために発生します。
AWSマニュアルに対応方法の記載があります。対策1 gitコマンドがKeychainユーティリティを使わないようにする
1 Keychainユーティリティを開いて、CodeCommitの認証情報を検索する
2 対象の認証情報をダブルクリックする
3 git-credential-osxkeychainを削除する
4 gitコマンドを実行すると、keychainを使用するかのダイアログがでるのでDenyをクリックする
5 gitコマンドが使える上記だと毎回ダイアログでDenyをクリックしないといけない
対策2 osxkeychainを使わないようにする or 使用する対象をしぼる
sudo emacs /Library/Developer/CommandLineTools/usr/share/git-core/gitconfig使わないようにする。以下のテキストの行をコメントアウトします。
# helper = osxkeychain対象をしぼる。この例は、github.comに制限している。
[credential "https://github.com"] helper = osxkeychain参考
https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/setting-up-https-unixes.html
https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/troubleshooting-ch.html
- 投稿日:2019-05-24T21:11:58+09:00
YYPHP#85「皆さんPHPで高負荷の処理はどうしてる?」「サーバレスアーキテクチャについて」「gRPCってみんな使ってる?」「ネームスペースが無いプロジェクトにComposerを組み込むには」
これは2019年5月24日に開催したPHPerイベントYYPHP#85のイベントレポートです。
YYPHPは一言で「PHPerの部室」です。PHPについて、雑に、ゆるく、ワイワイ話し合う集いです。毎回お題を決めずに雑談を出発点にいろいろなことを突発的にやります。集まった人でコードリーディングをすることもあれば、一緒に開発ツールを触ってみたり、フレームワークについての情報交換をすることもあります。開催はほぼ毎週、高田馬場にて。
今回の配信動画
YYPHP | PHPerの雑談イベント@毎週金曜・高田馬場 https://t.co/xH5Ec04mQs
— suin❄️PHPでオブジェクト指向 (@suin) 2019年5月24日過去回の配信動画
https://www.youtube.com/playlist?list=PLpOeTEye3Bg6PodrLHHC72jWMJYZz8VbG
雑談
ネームスペースが無いプロジェクトにComposerを組み込む
- WordPressで独自のプラグインを開発納品することがある
- Composerでそのパッケージを管理したい
- WordPressはPSR-4に準拠してない
Composerを入れたい目的
- フォームのバリデーター、SNSのログインなどのパッケージを再利用したい。
WordPressのプラグインを開発しているが、そこにComposerパッケージを使いたい。
XOOPS CubeでComposer入れたことがある
- index.php でAutoLoaderが
- 複数ある場合、どのindex.phpからでも読み込まれるようにする
PHPからテンプレートに値を埋めていくのどうやっている?
- Bladeを使っている
- 不動産関係のアプリを作っていて項目が山のようにある
- 効率的に埋める方法を知りたい
みんなどうやってる?
配列にデータ入れて、回したらだめなの?
- Bladeの良きところに入れたい
- HTMLとCSSを見直せばバーっと行ける気がする
- あとで見せます
PHPで高負荷の処理を皆さんどうやっている?
- データベース
- Laravel
- Eloquentを外しちゃいがちだけど、あえて使いたいと考えている
- キャッシュをうまく使うのが良いのでは?
- イントランザクションにいる必要がある
- Writeが多い
- 台数増やす
- 一旦Queueにつむ
- 結果整合性は保てる
- 画面には投げたデータで画面を返すか待つしかない
- SSEで待たせるのが一番現実的かも
Node.jsの方が適してそう
- PHPはストリーム処理できない
Queue
- AWSだったらSQSかRedisが良さそう
Laravelでないといけない理由はあるか?
- Lamdaではだめ?
- Lamdaとかだと見積もりが出しにくい
PHPに限界を感じた時は?
- Goで書いたことがある
- PHPはスレッドが使えない、Goはスレッド化して複数プロセスを実行できる
GitLabのRunnerまわりのGo実装がチャンネルがちゃんとしている
PHPerが他の言語を学ぶ
- Scalaはちょっと時間かかりそう
- Goは割と学べると思う。だいたい38日間でw
Laravelの権限管理の機能について
- LaravelのMiddlewareで権限チェックするようにできる
- ルーティングで権限
- Authorizationという仕組みがある
ぬーぺっとさんのget-member.phpについて質問がある
- データを取ってくるInterfaceの名前ってどんな単語が適切?
collector
fetcher
retriever$event = new ConnpassEvent($url); $members = $event->getMembers();サーバレスアーキテクチャについて
- 実際に使ってるのかとか、興味があるのかとかを知りたい
- 使ったことある 3人
- 使っていきたい 6人
- KNative
- Kubernatesでvendorに依存しないFaaSが作れるやつ
- 金額が見積もれる
- Lamda
- 負荷に応じてスケールできる
- 金額が見積もりづらい
- CloudWatchから通知を受け取るときにLambdaで付加情報を加えるときに使っている
- SAM(Serverless Application Model)
AWS上で冗長化されてるWordPressをEFSでマウントしてるけど遅いよ!どうしたらいいの!?
- 画面からPluginをインストールしたら1つのサーバにしか配置されない。
- APCとかOPCache?でオンメモリにPHPのファイルがロードされたように設定する
- この方法の弱点はキャッシュが効くので新しいファイルが反映されない(されにくくなる)
- キャッシュの期間の設定を工夫
- EFSがびっくりするくらい重い
- 並行数が1とか2だと遅いのでメリットがでない
- 大量に読み書きするのに向いている
- 同じVPCだったらNFSを素で使ったほうが速い
gRPCってみんな使ってる?
- IDLっていいものだと思うので、ライブラリとか使ってるものがあれば聞きたい
- PHPで使ったことない
- gRPCって何? - Qiita
Pythonのフレームワークについて聞きたい
- PHPのフレームワークと比べて、おすすめのフレームワークはあるか?
django以外知らない
2018年大注目のPython!WEBフレームワーク3つを徹底比較 | 侍エンジニア塾ブログ(Samurai Blog) - プログラミング入門者向けサイト
- Bottle
- Flask
- Python用のマイクロフレームワーク
- Django
- 普通のMVCフレームワーク
わざわざPythonでWebする理由って?
GitHub - twisted/twisted: Event-driven networking engine written in Python.
YYPHPは毎週やってます
PHPについてワイワイ話したい方は、YYPHPのイベント情報をチェックしてみて下さい。
以上、YYPHPのレポートでした。次回もワイワイやっていきたいと思います! では、また来週!
- 投稿日:2019-05-24T20:25:00+09:00
AWS認定Big Data勉強記 - 8.3: Kinesis Data Analytics
こんにちは、えいりんぐーです
今回は Amazon Kinesis Data Analytics についてまとめます。
参考資料
- Black Beltオンラインセミナー資料
- 公式ドキュメント
- Analytics
- YouTube
全般
- ストリーミングデータの分析、実用的なインサイトの取得、ビジネスやお客様のニーズへのリアルタイムでの対応を行えるサービス
- 一般的な処理関数のための組み込みのテンプレートや演算子を利用し、SQL クエリと高度な Java アプリケーションを簡単に構築し、あらゆる規模のデータを整理、変換、集計、分析できる
- ログ分析、クリックストリーム分析、IoT、アドテク、ゲームなどを用途とするエンドツーエンドストリーム処理アプリケーションを簡単に構築できて、一般的なユースケースには、ストリーミング ETL 、継続的メトリック生成、応答分析の3つがある
- ストリーミングETL
- データレイクやデータウェアハウスを読み込む前に、未加工データを洗浄、拡充、整理、変換でき、一括 ETL 手順を減らすか無くすことができる。
- 継続的メトリック生成
- データの経時的な傾向を監視し、理解できる。アプリケーションでストリーミングデータを集めて重要な情報を引き出したり、報告用データベースや監視サービスとつなぎ目なく統合し、アプリケーションやユーザーにリアルタイムでサービスを提供したりできる
- リアルタイム応答分析
- 特定のメトリクスが事前定義しきい値に到達したときや、より高度な例では、機械学習アルゴリズムを使用してアプリケーションによって異常が検出されたときに、リアルタイムのアラームまたは通知を送信する
主要な要素
- Kinesis Data Analytics アプリケーション
- ユーザーが操作する Kinesis Data Analytics エンティティで、アプリケーションのコードは、SQL または Java を使用して、受信ストリーミングデータを処理し、出力を生成するように作成する。
- 入力
- 入力の設定では、ストリーミングソースをアプリケーション内データストリームにマッピングする
- アプリケーションコード
- 単純な形状では、アプリケーションコードは、ストリーミングソースに関連付けられているアプリケーション内データストリームから読み込み、出力に関連付けられているアプリケーション内データストリームに書き込む 1 つの Java 演算子か SQL ステートメント
- 出力
- 中間結果を格納する 1 つまたは複数のアプリケーション内ストリーム
- アプリケーション内データストリーム
- 処理の実行対象となるデータを絶えずアプリケーションに保存するエンティティ
管理
アクセス管理
Kinesis Data Analytics では、ユーザーがアプリケーション内で指定したストリーミングデータソース内のレコードに対する読み取り権限が必要になる。また、ユーザーがアプリケーション出力設定に指定した宛先にアプリケーション出力を書き込む権限も必要になる。これらの権限を付与するには、Kinesis Data Analytics が引き受けることのできる IAM ロールを作成する。
スケーリング
アプリケーションが大半のシナリオにおける複雑なクエリとソースストリームのデータスループットに対応できるように、伸縮自在にスケールされる。Kinesis Data Analytics は、Amazon Kinesis 処理単位 (KPU) 数で表すことができ、1 つの KPU で 1 vCPU と 4GB メモリが与えられる。
Java アプリケーションの場合、Kinesis Data Analytics によって、KPU あたり 50GB の稼働アプリケーションストレージが割り当てられる。
API の Parallelism パラメータと ParallelismPerKPU パラメータを利用し、Java アプリケーションタスクに対する Kinesis Data Analytics の並列実行を制御することもできる。
Parallelism によってタスクの同時実行インスタンスの数が定義され、ParallelismPerKPU によって、アプリケーションの Kinesis Processing Unit (KPU) 単位でスケジュールできる並列タスクの数が定義される。SQL アプリケーションの場合、各ストリーミングソースは対応するアプリケーション内ストリームにマッピングされる。入力並列処理パラメータを指定して、ソースがマッピングされるアプリケーション内ストリームの数を増やすことにより、KPU 数で表される能力をより効率的に使用することができる。
Kinesis Client Library との比較
KCL はビルド済みのライブラリであり、Amazon Kinesis Data Stream からデータを読み込んで処理するコンシューマアプリケーションの作成を支援する。KCL は、データストリームボリュームの変化への適応、ストリーミングデータの負荷分散、分散サービスの調整、データ処理の耐障害性などの複雑な問題に対応する。カスタム処理ソリューションを構築する必要がある場合は、KCL を使用する。
Kinesis Data Analytics を使用すると、標準的な SQL を使用するだけでデータストリームを処理できるため、新しいプログラミング言語を学習する必要はない。完全マネージド型のソリューションが必要であり、SQL を使ってデータストリーム内のデータを処理したい場合は、Kinesis Data Analytics を使用する。
その他
Apache Flink
Apache Flink はストリームと一括データ処理のためのオープンソースのフレームワーク/エンジン。用途の広い演算子を提供し、重複処理など、ストリーミングの中心的問題を効率的に解決するため、ストリーミングアプリケーションを簡単に構築できる。Apache Flink は、データストリーム全体の分散計算に対してデータ分配、通信、耐障害性を与える。アプリケーションの統合
次のようなアプリケーションと組み合わせることができる
- ストリーミングデータの配信元: Amazon Kinesis Data Streams
- 配信先またはシンク: Amazon Kinesis Data Streams、Amazon Kinesis Data Firehose、Amazon DynamoDB、Amazon S3
- Apache Kafka、Apache Casssandra、Elasticsearch などのコネクタ
カスタマイズ
ファイル、ディレクトリ、ソケット、あるいはインターネット経由でアクセスできるあらゆるものとの読み書きを可能にする一連のプリミティブの上に構築することで、アプリケーションに配信元と配信先を追加できる。プリミティブには、データを継続的、1 回限り、非同期、同期などの方法で読み書きする機能などの設定が付属する。バックアップ
チェックポイントとスナップショットを利用し、稼働アプリケーションの状態が自動的にバックアップされる。チェックポイントではアプリケーションの現在の状態が保存される。Java アプリケーション向け Kinesis Data Analytics では、アプリケーションの位置を回復できるため、障害なし実行と同じ意味になる。チェックポイントでは、稼働アプリケーションストレージが活用される。スナップショットによって、アプリケーションのポイントインタイムリカバリが保存され、スナップショットでは、永続的アプリケーションバックアップが活用される。Kinesis Data Analytics はデフォルトで、スナップショットに保存されているデータを暗号化する。
SQL アプリケーション
ストリーミングデータソースとリファレンスデータソースという 2 種類の入力がサポートされている。ストリーミングデータソースは絶えず生成されるデータであり、アプリケーションに読み込まれて処理される。リファレンスデータソースは静的データであり、アプリケーションで使用してストリーミングソースから配信されるデータを拡充する。ストリーミングデータソースには、Amazon Kinesis Data Stream または Amazon Kinesis Data Firehose 配信ストリームを指定でき、リファレンスデータソースには Amazon S3 オブジェクトを指定できる。
SQL アプリケーションでは、スキーマを検出し、UTF-8 でエンコードされた JSON レコードと CSV レコードを DiscoverInputSchema API を使用して自動解析できる。
SQL の結果は S3、Redshift、Elasticsearch Service (Amazon Kinesis Data Firehose 経由)、Amazon Kinesis Data Streams に保存できる。Kinesis Data Analytics で直接サポートされていない出力先に書き込むには、SQL 結果を Amazon Kinesis Data Streams に送信し、Amazon Kinesis Data Streams と AWS Lambda との統合を利用する。
Random Cut Forest
Kinesis Data Analytics では、Random Cut Forest アルゴリズムを使って異常検出を実行できる。詳細はこちらの記事を参考にする。
- 投稿日:2019-05-24T20:23:33+09:00
AlibabaCloud AWS Azure GoogleCloudPlatform サービス早見表
概要
AlibabaCloud , AWS , Azure , GoogleCloudPlatform の各種クラウドで提案の構成を検討する機会があり、備忘録として記載。
ECS?はいはいAWSの。。。え?AlibabaCloudの??という経験のある方におススメ?ご注意 :
情報は2019/05に見直したつもりなのですが、最新かは保障できません。
また「N/A」も無いというより、「調べ切れていない」、「比較し難い」ものだと考えてください。
例えばDatabase MigrationのGCPはN/Aですが、サービス名が思い浮かばないだけで、Migration方法のドキュメントありますし、出来ます。最終的には、それぞれの公式ドキュメントでご確認ください。
Compute
サービス種別 Alibaba AWS Azure GCP Virtual Servers Elastic Compute Service (ECS) Elastic Compute Cloud (EC2) Azure Virtual Machines Compute Engine(GCE) GPU Servers Elastic GPU Service (EGS) EC2 Elastic GPUs Azure Virtual Machines (NC, ND, NV series) Compute Engine(GCE)(Cloud Datala) Auto Scale Auto Scaling Auto Scaling Virtual Machine Scale Sets Auto Scaling Container Management Container Service Elastic Container Service (ECS) Azure Container Service (ECS) Azure Container Service for Kubernetes (EKS) Kubernetes Engine(GKE) Pre-emptible VMs Alibaba Batch Compute AWS Batch Azure Batch Compute Cloud Dataflow high-performance computing ECHP (Amazon EC2) Azure HPC Pack GPU Work management Batch Compute Batch HDInsight,Batch Cloud Dataproc,Cloud Dataflow Storage & CDN
サービス種別 Alibaba AWS Azure GCP Object Storage Object Storage Service (OSS) Amazon Simple Storage Services (S3) Azure Blob Storage / Azure Storage v2 Cloud Storage NoSQL Database Table Store DynamoDB ,SimpleDB Azure Table Storage, CosmosDB (supports MongoDB, Cassandra APIs) Cloud Datastore、Cloud Bigtable Content Delivery Alibaba Cloud CDN CloudFront Azure CDN (operated by Akamai and Verizon) Cloud Content Delivery Network Shared File Storage Network Attached Storage (NAS) Elastic File System (EFS) Azure File Storage, Data Lake Store (WebHDFS) Cloud Filestore Hybrid Storage Hybrid Cloud Storage Array N/A StorSimple VPC Service Control Networking
サービス種別 Alibaba AWS Azure GCP Networking Virtual Private Cloud (VPC) Virtual Private Cloud (VPC) Virtual Network (VNET) Virtual Private Cloud(VPC) Dedicated Network Express Connect Direct Connect ExpressRoute Google Cloud Interconnect NAT Gateway NAT Gateway NAT Gateway N/A (part of Network Load Balancer) Cloud NAT Load Balancing Server Load Balancer (SLB) Elastic Load Balancing (ELB) Network Load Balancer (Level 4) / Application Gateway (Level 7) Google Cloud Load Balancing Elastic IP Elastic IP Elastic IP Addresses Reserved IP 静的 IP Cross-premises Connectivity VPN Gateway VPN Gateway VPN Gateway Cloud VPN Databases
サービス種別 Alibaba AWS Azure GCP Relational Database ApsaraDB for RDS Relational Database Service (RDS) Azure MySQL / PostgreSQL, Azure SQL, Azure Managed SQL Instances Cloud SQL Caching ApsaraDB for Redis ElastiCache Azure Redis Cloud Memorystore Elastic Data Warehouse HybridDB for PostgreSQL RedShift Azure SQL Data Warehouse BigQuery NoSQL - Document Storage ApsaraDB for MongoDB DocumentDB CosmosDB for MongoDB,CosmosDB SQL (aka DocumentDB) Cloud Firestore NoSQL – Key/Value Table Store DynamoDB CosmosDB Table,CosmosDB Cassandra Cloud Datastore NoSQL – Graph N/A Neptune CosmosDB Graph (Tinkerpop, Gremlin) Cloud Datastore Time-series Database High-Performance Time Series Database (HiTSDB) Amazon Timestream Time Series Insights Cloud Bigtable Database Migration Data Transmission Service (DTS) Database Migration Services (DMS) Database Migration Service N/A Security
サービス種別 Alibaba AWS Azure GCP DDoS Mitigation Anti-DDoS Basic AWS Shield - Standard DDoS Protection Service Cloud Load Balancing DDoS Mitigation Anti-DDoS Pro AWS Shield - Advanced DDoS Protection Service Cloud Load Balancing Mobile Security Mobile Security N/A Visual Studio App Center N/A Web Application Security Web Application Firewall Web Application Firewall (WAF) Part of Application Gateway Cloud Armor Instance Security Server Guard N/A N/A Shielded VMs Certificate Service SSL Certificates Service Certificate Manager Part of Azure AppService, not standalone Google SSL証明書(GCE除く) Monitoring & Management
サービス種別 Alibaba AWS Azure GCP Monitoring CloudMonitor CloudWatch Azure Monitor Stackdriver Monitoring Authentication and Authorization Resource Access Management Identity & Access Manager (IAM) Azure Active Directory + Role-based Access Control Cloud IAM,Cloud Identity-Aware Proxy(IAP) Encryption Key Management Service Key Management Service Azure KeyVault Cloud Key Management Service(KMS) Resource Orchestration Resource Orchestration Service CloudFormation Azure Resource Manager Cloud Deployment Manager Domains & Websites
サービス種別 Alibaba AWS Azure GCP Web Applications Web Hosting Elastic Beanstalk Azure AppService App Engine(GAE) Domain Name Domains Route 53 Azure DNS Cloud DNS Domain Name System (DNS) Alibaba Cloud DNS Route 53 Azure DNS, Azure Traffic Manager Cloud DNS Analytics
サービス種別 Alibaba AWS Azure GCP Big Data Processing MaxCompute ,E-MapReduce Amazon EMR Azure Databricks Cloud Dataproc Data Visualization DataV ,QuickBI N/A PowerBI Googleデータポータル(旧Google Data Studio) Development Platform DataWorks N/A N/A N/A Application Service
サービス種別 Alibaba AWS Azure GCP Notification Service Message Service Amazon Simple Notification Service (SNS) Notification Hubs, Azure EventGrid Cloud Pub/Sub API Service API Gateway API Gateway API Management Google Cloud Endpoints Log Service Log Service Amazon Kinesis Data Firehose Log Analytics, App Insights Stackdriver Logging Email Sending and Receiving DirectMail Amazon Simple Email Service Through 3rd party offering SendGrid SendGrid Queues Message Queue N/A Azure Queue Storage, Azure Service Bus Cloud Pub/Sub FaaS Function Compute AWS Lambda Azure Functions Cloud Functions,Knative Media Services
サービス種別 Alibaba AWS Azure GCP Live Video Streaming ApsaraVideo Live AWS Elemental MediaLive Azure Media Services (Anvato) Media Transcoding Service ApsaraVideo for Media Processing AWS Elastic Transcoder Azure Media Services (Anvato) 参考
Alibaba Cloud Document Center(英語の方)
AWS ドキュメント
Microsoft Azure のドキュメント
Google Cloud Platform のドキュメント
- 投稿日:2019-05-24T19:02:51+09:00
EC2コンテナクラスターのAuto-Scalingを組んでみた。
EC2コンテナインスタンスのAutoScalingの構築した。スケールイン時に発生する504へのアプローチ
問題
EC2でECSクラスターを組んでいましたが、スケールインの時に、EC2コンテナインスタンスにコンテナ(ECSタスク)が稼働しているにも関わらず、EC2が削除されてしますため、504のエラーが発生してしまいます。
対策案
この問題に対して、ECSコンテナクラスター自身が自身で稼働中のコンテナ数を検出して削除保護を有効/無効に切り替えることで、コンテナが稼働中に削除されることを防ぎます。
参考リンク
EC2 Auto-ScalingでECS組んでますか?エラーレート高いですか?救ってあげてもいいですか?
現象も、対策の上記のリンクを同じですので参考にしてください。ECS Container Instance scale-in protector
上記のリンクのスクリプトでは、ECSコンテナクラスター自身が、自身で稼働しているコンテナの数を検出し、AutoScalingの削除保護をture/falseにするスクリプトをcronで定期実行します。
めちゃめちゃ初心者の方の手助けになればと思い手順をまとめます。動作
1枚目の画像で青く選択されている実行中のタスクが0のインスタンスが2枚目の画像で以下からの保護のタブが空白になっています。
その他のインスタンスは削除保護が有効になっているため、コンテナの稼働中に削除されることはありません。
方法
1,Permissions for EC2 IAM role
EC2にアタッチするRoleに下記の権限を持ったポリシーを作成しアタッチしてください。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "autoscaling:DescribeAutoScalingInstances", "autoscaling:SetInstanceProtection" ], "Resource": "*" } ] }2,スクリプトを持ったECSCluster用AMIの作成
(userdataを利用してECSClusterを起動するよりAMIを利用したほうが早いと思っています)
ECSCluster用のAMIを作成するためのECSCluster用のAMI(amzn-ami-2018.03.q-amazon-ecs-optimized - ami-0750ab1027b6314c7)をイメージに起動します!/bin/bash yum install -y amazon-efs-utils curl -o /usr/bin/jq -L https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux64 chmod a+x /usr/bin/jq curl -o /ecs_instance_scalein_protector.sh https://gist.githubusercontent.com/pseudobeer/2d0debe3ffd84d0710b18d2b1b19f94a/raw/bace2ac2afefa236ad181f9b5e227f32b5a46046/ecs_instance_scalein_protector.sh chmod a+x ./ecs_instance_scalein_protector.sh curl -O https://bootstrap.pypa.io/get-pip.py python get-pip.py --user echo 'export PATH=~/.local/bin:$PATH' >> /root/.bash_profile source /root/.bash_profile pip install awscli --upgrade --user echo 'PATH=/root/.local/bin:/usr/bin:/bin' >> cron.conf echo '*/1 * * * * /ecs_instance_scalein_protector.sh' >> cron.conf crontab cron.confuserdata内で、
jqコマンドのダウンロード
ecs_instance_scalein_protector.shのダウンロード
aws cliのインストール
cronの設定
EFSのマウントするためにamazon mountヘルパーのインストール
を行っています。AMIを作成します。
3,ECSクラスターインスタンスのAutoScalingGroupの作成
ECSクラスターのスタンスの起動時のuserdata
#!/bin/bash echo ECS_CLUSTER=<ClusterName> >> /etc/ecs/ecs.config;echo ECS_BACKEND_HOST= >> /etc/ecs/ecs.config; mkdir efs mount -t efs <efsendpoint>:/ efsまとめ
これでEC2コンテナインスタンスがタスクの稼働中にAutoScalingで削除されることを防げます。
簡単に有効的な解決策が取れました。
タスクの配置戦略をbinpackにしているとなお有効的だと思います。もう少しAutoScalingのAlarmを調整しようと思います。
- 投稿日:2019-05-24T17:09:37+09:00
[WIP] Amazon DynamoDBをおさえる
DynamoDBってなに
AWS SAAの試験勉強をしていて、RDSやAuroraと何が違うの、よく知らない、
と思ったのでDynamoDBは何ができて、何ができないのか整理しようと思います特徴
ストレージの容量が無制限
- 自動的にスケーリング
- 25GBまで無料。超過分は1GBごとに課金
読み込み/書き込みキャパシティーモード
- プロビジョニング
- プロビジョニングした リソース分に対する課金
- 書き込み負荷が高い場合 or 読み込み負荷が高い場合
- Read : 500
- Write : 1,000
- オンデマンド
- 読み込み/書き込み リクエスト単位に対する従量課金
完全マネージド型の NoSQL データサービス
- 設定や構成を決める必要がない
- 内部的に自動で3箇所のAZにレプリカを作成
- ソフトウェアパッチの自動適用
- クラスタスケーリングが自動化
出典
https://aws.amazon.com/jp/dynamodb/
https://www.slideshare.net/AmazonWebServicesJapan/20170809-black-belt-dynamodb
https://japan.techrepublic.com/article/35073751.htm
- 投稿日:2019-05-24T17:09:37+09:00
[WIP] Amazon DynamoDB をおさえる
DynamoDB ってなに
AWS SAA の試験勉強をしていて、 RDS や Aurora と何が違うの、よく知らない、
と思ったので DynamoDB は何ができて、何ができないのか整理しようと思います
特徴
1. ストレージの容量が無制限
- 自動的にスケーリング
- 25GB まで無料。超過分は 1GB ごとに課金
2. 読み込み/書き込みキャパシティーモード
- プロビジョニング
- プロビジョニングした リソース分に対する課金
- 書き込み負荷が高い場合 or 読み込み負荷が高い場合
- Read : 500
- Write : 1,000
- オンデマンド
- 読み込み/書き込み リクエスト単位に対する従量課金
3. 完全マネージド型の NoSQL データサービス
- 設定や構成を決める必要がない
- 内部的に自動で3箇所の AZ にレプリカを作成
- ソフトウェアパッチの自動適用
- クラスタスケーリングが自動化
NoSQL の種類
リレーショナルデータベース(RDB)はともかく、
まず NoSQL が何なのか知りませんでした。NoSQL に分類される DB
1. キー・バリュー型
- キーとバリューの組み合わせ。単純な構造でデータを格納
- DynamoDB. Redis, Riak, Hibari
2. カラムストア型
- 列方向のデータのまとまりをファイルシステム上の連続した位置に格納
- Google BigTable, Apache Cassandra, Apache HBase
3. ドキュメント型
- キーに対し XML や JSON といった、データ構造を柔軟に変更できるドキュメントデータを格納
- MongoDB, Couchbase
4. グラフ型
- グラフ理論に基づいてノード、リレーション、プロパティの3要素によってノードかんの関係性を表現
- 上記 3つの型とは異なり、関係性を持つが RDBMS とは異なる表現のため NoSQL に分類される
- Neo4j
RDBMS に分類される DB
Aurora, MySQL, Oracle, Microsoft SQL Server, PostgreSQL
RDB との違い
出典
https://aws.amazon.com/jp/dynamodb/
https://www.slideshare.net/AmazonWebServicesJapan/20170809-black-belt-dynamodb
https://japan.techrepublic.com/article/35073751.htm
https://blog.codecamp.jp/what-is-nosql
- 投稿日:2019-05-24T16:48:54+09:00
Rocket.Chatを1行でAWS上に導入
Rocket.Chatとは
Lightblue Technologyではこれまで社内のコミュニケーションツールとしてslackを使ってきました。
しかし、インターン生が増えたため、無料枠で使うには限界が来ていました。そこで、有料化を考えたのですが、1人あたり850円/月かかるんです。インターン生が多く在籍するLightblue Technologyでは「1人あたり」という課金体系が使いづらいです。そこで、RocketChatの導入を決めました。RocketChatは、slackのようなチャット機能を有するOSSです。
RocketChatはdockerイメージが提供され、また、様々なPaaSに対応しているため、比較的容易に導入することができます。
導入手順
- EC2立ち上げ
- Rocket.Chatインストール
- Route53、ロードバランサー、AWS Certificate Managerで独自ドメイン化・SSL化
EC2立ち上げ
Rocket.Chatのミニマム要件を見ると、
VPS (minimal)
Single core (2 GHz)
1 GB RAM
30 GB of SSD
The above minimal virtual configuration, when not over-provisioned by provider, is ideal for small deployments of up to 200 users, up to 50 concurrently active and minimal level of mixed uploads, sharing, and bot activities.とあるので、t2.microを選んで、イメージにはUbuntu, 16.04 LTSを選びました。
セキュリティグループでは、設定時にssh用の22番とRocket.Chat用の3000番をあけました。
そして、ElasticIPを設定し、完了です。Rocket.Chatインストール
PaaS Deploymentsやdocker containerもあるのですが、ここではRocket.Chatを1行でAWS上に導入するために、マニュアルインストールにあるUbuntu向けの
Snapsを用います。すると、
sudo snap install rocketchat-server
これだけでインストール終了です。
あとは、
http://[EC2のIPアドレス]:3000
にアクセスするだけでRocket.Chatの設定ウィザードが開きます。ちなみに最初に開いたユーザが管理者となります。これは注意が必要です。
他のインストール方法では、事前にホスト先のURL等を設定しますが、これはアクセスした後のRocket.Chatの管理画面から変更可能です。独自ドメイン・SSL化
あとは、Route53、ロードバランサー、AWS Certificate Managerで独自ドメイン・SSL化します。
これをやらなくても、Rocket.Chatは使えますが、警告が出たり、招待メールが迷惑メールに送られたりするので、やったほうがいいです。
僕の場合はこれを機に、お名前.comで管理していたドメインのDNSとドメインをRoute53に移管しました。ドメインの移管は時間がかかるイメージでしたが、10分くらいで反映されていました。基本的にはRoute53の設定ウィザードに従います。AWS Certificate Managerから証明書のリクエストを行い、DNSをRoute53に変更したので、DNSによる認証を選び、Route53で指定されたCNAMEを編集します。
EC2の設定画面からロードバランサーを設定し、クライアントからのリスナーをTLSプロトコルで443ポートを指定し、証明書にAWS Certificate Managerで取得したSSL証明書を指定します。
そして、ターゲットグループにRocket.ChatをたてたEC2インスタンスを指定し、TCPプロトコルで3000ポートを指定します。おわり
以上で、独自ドメイン・SSL化された状態でRocket.Chatが使えます。
t2.microであれば無料枠の範囲だったりするので、かなり安く運用できそうです。
次はRocket.Chatの初期設定のベストプラクティスを書きたいと思います。
初期設定では招待メールが送れなかったり、新規登録が自由にできたりするので。。。
- 投稿日:2019-05-24T16:04:57+09:00
AWS のクラウドサービス活用資料集が更新されたのでまとめてみた
AWSの資料を調べていたら公式の活用資料集のリンクがアップデートされて見やすくなっていたので備忘録的に紹介したいと思います。
AWS クラウドサービス活用資料集
AWSが開催したBlack Belt OnlineSeminarやWebinar、初心者向けの資料から最新のAWSUpdateまで確認できるのがAWS活用資料集です。
トップを開くと下記のような画面に遷移します。
主な掲載内容は
・Webinar申し込み
・初心者向け資料
・業種・ソリューション別資料
・サービス別資料
・AWS Service Update
・JAWS-UG 発表資料上記の様になっています。※2019年5月現在
Webinar申し込みとサービス別資料はそれぞれ別リンクにアクセスします。
サービス別資料は特に見失いやすい(私だけ?)なのでリンクを残しておきます。活用資料集のページをスクロールしていくと申込みとは別にWebinar 資料や、
JAWS-UGの発表資料も掲載されています(AWS発表分のみ)。
AWSは「試してみたいけどドキュメント探すのが大変」「製品ページだけだとよくわからない」などよくある問題をこういった細かく、かつわかりやすい資料でまとめてくれてるので大変素晴らしいですね、わかりやすい。
また参考までに活用資料集とは別に個人的におすすめのページも記載します。
・AWS の最新情報
最新のUpdate状況を確認できます。ブログに遷移したり「分析」「パートナーネットワーク」「MachineLearning」などカテゴリごとにも別れているので気になるジャンルに合わせてチェックできます。
https://aws.amazon.com/jp/new/?nc1=f_cc・AWS アーキテクチャセンター
こちらはWordPress のホスティングやバッチ処理など目的に合わせてAWSの推奨アーキテクチャをGitHubやPDF形式で確認できます。
https://aws.amazon.com/jp/architecture/?nc1=f_cc&awsf.quickstart-architecture-page-filter=highlight%23new・AWS Well-Architected
Well-ArchitectedフレームワークはAWSを利用する上で高可用性の担保やコスト最適化を行うためのベストプラクティスをまとめたものになります。これからAWSを導入する方も、すでに導入されてる方も必見のフレームワークです。
https://aws.amazon.com/jp/architecture/well-architected/
https://aws.amazon.com/jp/blogs/news/aws-well-architected-whitepaper/さいごに
資料やリンクはは2019年5月現在のもので更なるアップデートもされると思いますが、最新の資料置き場やリンクを探す手間が少しでも省けたら幸いです。
もしここもおすすめだよ、というのがあればぜひ追記したいと思いますのでご意見お待ちしております。
- 投稿日:2019-05-24T15:57:08+09:00
[2019年5月版] Alibaba Cloudの中国版/国際版/日本版比較表(and AWS/Azure/GCP)
Alibaba Cloudとは
AlibabaCloudは中国発サービスで、中国人口が約14億人もいる中で唯一シェアを伸ばしているパブリッククラウドです。
中国では、毎年11月11日「独身の日」にセールを開催しますが、AlibabaCloudによるインフラでECサイトとして世界一の規模を発揮しています。スタートから2分5秒で、100億元(日本円で約1600億円、1元16円換算)を突破。1日で過去最高となる2135億元(日本円で3兆4160億円、1元16円換算)を記録
参照:https://netshop.impress.co.jp/node/5944AlibabaCloudはEC2、リテール、交通、医療、製造業、オリンピック、FIFAワールドカップ2018、など様々なサービスを提供しています。
参照:https://nissenad-digitalhub.com/articles/ai-for-chinese-retail/
参照:http://digital-innovation-lab.jp/etbrain/
参照:https://www.alibabacloud.com/blog/alibaba-cloud-supports-70%25-of-total-online-streaming-traffic-for-the-2018-fifa-world-cup_593781サービスは基本的にAWSやAzure、GCPとあまり変わらなく、またAlibabaCloudの様々なblog記事によれば現場経験から苦労し培った様々なサービスが展開されてることや、Apacheらオープンソース関連が多数入ってること(Apache Flink(RealtimeCompute) や EMRにてImpala最新バージョン、Tensorflow、などAWSにはないOSSが多数入ってることはびっくり)、そして各クラウドサービスの中でセキュリティサービスが最も強く、コストも一番安い 傾向があります。
参照:https://www.alibabacloud.com/blog
参照:https://jp.alibabacloud.com/products/realtime-compute
参照:https://jp.alibabacloud.com/help/doc-detail/28073.htm
参照:https://www.quora.com/How-good-is-Alibaba-Cloud-compared-to-AWS-Azure-and-GCPAlibabaCloudでどんなサービスがあるか
閑話休題、AlibabaCloudというクラウドサービスにて2019年5月現在、中国版、国際版、日本版の3つのサービスが展開されているので、それぞれのサービス比較をWebスクレで取得し、まとめてみました。
基本は一覧表からWebスクレで取得。なので完璧ではないため、サービス漏れがある場合はご容赦ください。
(今後も新プロダクトサービス追加など更新があればどこかで定期的アウトプットしたい)ちなみに、AlibabaCloudのサービスiconはこちらからダウンロードしてみました(Alibabaさんicon整理してほしい。。むしろ文化?)
https://www.iconfont.cn/plus/user/detail?&uid=41718※ 私自身中国語読めないのでGoogle翻訳。そのためおかしいところがあれば指摘いただけると嬉しいです。
※一部iconが無いものもあり、AlibabaCloud HPのjsソースをパースし、以下iconからトリミング。なので間違いがあればこれも指摘いただけると嬉しいです。
https://g.alicdn.com/aliyun/www-dpl/0.6.10/knight/css/product.icons.png※ iconの色違いはプロダクトのカテゴリによって区別してるらしく、こちらは上記サイトにて色を塗り替えるだけで修正が可能です。ちなみにデフォルトの色が
#00c1de
です。
他クラウドサービスとの比較について
※ AlibabaCloud公式によるAWSとの比較はこちらを参照。
https://help.aliyun.com/document_detail/65455.html※ AlibabaCloud公式によるAzureとの比較はこちらを参照。
https://help.aliyun.com/document_detail/74242.html以降、GCP、AzureはAWSをベースに割り当ててみました。こちら@hayao_k 様のqitta記事も参考になりました。
参考:AWS/Azure/GCPサービス比較 2019.05
https://qiita.com/hayao_k/items/906ac1fba9e239e08ae8参考:AWS to Azure services comparison
https://docs.microsoft.com/ja-jp/azure/architecture/aws-professional/services参考:AWS プロフェッショナルのための Google Cloud Platform
https://cloud.google.com/docs/compare/awsコンピューティング(弹性计算)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP 云服务器 ECS クラウドサーバ Elastic Compute Service Elastic Compute Service EC2 Virtual Machines Compute Engine 弹性裸金属服务器(神龙) Bare Metalクラウドサーバ ECS Bare Metal Instance ECS Bare Metal Instance EC2 Bare Metal Virtual Machines Compute Engine 轻量应用服务器 軽量アプリケーションサーバー Simple Application Server GPU 云服务器 GPUクラウドサーバ Elastic GPU Service Elastic GPU Service EC2 Elastic GPUs Virtual Machines Compute Engine FPGA 云服务器 FPGAクラウドサーバ AWS EC2 FPGA Virtual Machines Compute Engine 专有宿主机 専有ホスト Dedicated Host Dedicated Host 超级计算集群 スーパーコンピューティングクラスター(SCC) Super Computing Cluster Super Computing Cluster 弹性高性能计算 E-HPC 高性能コンピューティング(E-HPC) E-HPC E-HPC High Performance Computing (HPC) 批量计算 バッチ計算 Batch Compute 容器服务 コンテナオーケストレータ Container Service Container Service Elastic Container Registry Container Registry Google Container Registry 容器服务 Kubernetes 版 コンテナサービスKubernetes版 Container Service for Kubernetes Container Service for Kubenetes Elastic Container Service for Kubernetes Kubernetes Service Google Kubernetes Engine 弹性容器实例 ECI コンテナレジストリ Elastic Container Instance Elastic Container Registry Container Registry Container Registry 容器镜像服务 コンテナミラーリングサービス Container Registry 弹性伸缩 Auto Scaling Auto Scaling Auto Scaling EC2 Auto Scaling Virtual Machine Scale Sets Autoscaling 资源编排 リソースの作成と管理サービス Resource Orchestration Service Resource Orchestration Service AWS CloudFormation Resource Manager Cloud Deployment Manager 函数计算 Function as a Service Function Compute Function Compute AWS Lambda Functions Cloud Functions 图形工作站 GPUワークステーション ストレージ(存储服务)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP 对象存储 OSS オブジェクトストレージ Object Storage Service Object Storage Service S3 Blob Storage Cloud Storage 块存储 ブロックストレージ EBS Managed Disk 永続ディスク 文件存储 NAS ファイルストレージNAS Network Attached Storage Network Attached Storage Elastic File System (EFS) File Storage Cloud Filestore 文件存储 CPFS クラウドパラレルファイルストレージ 文件存储 HDFS HDFSファイルストレージ 智能云相册 クラウドフォトアルバム 智能媒体管理 インテリジェントメディア管理 云存储网关 クラウドストレージゲートウェイ AWS Storage Gateway StorSimple 混合云存储阵列 ハイブリッドクラウドストレージアレイ Hybrid Cloud Storage Array CDN配信(CDN与边缘)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP CDN Content Delivery Network Alibaba Cloud CDN Alibaba Cloud CDN CloudFront CDN Cloud CDN 安全加速 SCDN Secure Content Delivery Network 全站加速 DCDN Dynamic Route for CDN Dynamic Route for CDN Dynamic route for CDN PCDN P2P CDN 边缘节点服务 ENS Edge Node Service データベース(数据库)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP 云数据库 POLARDB MySQL、Oracle、PostgreSQLの互換性があるクラウドデータベース Aurora Cloud Spanner 云数据库 RDS MySQL 版 MySQL ApsaraDB RDS for MySQL ApsaraDB for RDS(MySQL) RDS for MySQL/Aurora Database for MySQL Cloud SQL for MySQL 云数据库 RDS MariaDB TX 版 MariaDB ApsaraDB for MariaDB TX RDS for MariaDB Database for MariaDB 云数据库 RDS SQL Server 版 SQLServer ApsaraDB RDS for SQL Server ApsaraDB for RDS(SQL Server) RDS for SQL Server SQL Database Cloud SQL for SQL Server 云数据库 RDS PostgreSQL 版 PostgreSQL ApsaraDB RDS for PostgreSQL ApsaraDB for RDS(PostgreSQL) RDS for PostgreSQL/Aurora Database for PostgreSQL Cloud SQL for PostgreSQL 云数据库 RDS PPAS 版 Oracle ApsaraDB RDS for PPAS ApsaraDB for RDS(PPAS) RDS for Oracle 分布式关系型数据库服务 DRDS 分散リレーショナルデータベースサービス Distributed Relational Database Service Aurora Cloud Spanner 云数据库 Redis 版 Redis ApsaraDB for Redis ApsaraDB for Redis ElastiCache (Redis) Cache for Redis Cloud Memorystore 云数据库 MongoDB 版 MongoDB ApsaraDB for MongoDB ApsaraDB for MongoDB DocumentDB (with MongoDB compatibility) Cosmos DB(API for MongoDB) TSDB 时序时空数据库 時系列データベース High-Performance Time Series Database Timestream Time Series Insights 云数据库 HBase 版 Apache Hbase Cloud Bigtable iconなし 图数据库 GDB グラフデータベース Neptune Cosmos DB(API for Gremlin) 云数据库 Memcache 版 Memcache ApsaraDB for Memcache ApsaraDB for Memcache ElastiCache (Memcached) Cloud Memorystore 表格存储 TableStore TableStore(NoSQL) Table Store Table Store DynamoDB Cosmos DB Cloud Datastore 分析型数据库 MySQL版 MySQLをベースにした分析データベース 分析型数据库 PostgreSQL版 DWH分析データベース HybridDB for PostgreSQL AnalyticDB for PostgreSQL Redshift SQL Data Warehouse Google BigQuery HybridDB for MySQL HybridDB for MySQL Data Lake Analytics データレイクアナリティクス Data Lake Analytics Athena Data Lake Analytics Google BigQuery 数据管理 DMS データ管理サービス 混合云数据库管理 HDM ハイブリッドクラウドデータベース管理サービス クラウド通信サービス(云通信)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP 短信服务 ショートメッセージサービス 语音服务 音声メッセージサービス 流量服务 移動体通信データパッケージ 物联网无线连接服务 IoT無線通信接続サービス iconなし 号码隐私保护 モバイルプライバシー保護サービス 号码认证服务 番号認証サービス ネットワーク(网络)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP iconなし 云通信网络加速 クラウド通信ネットワーク高速化サービス 专有网络 VPC 専用ネットワークVPC Virtual Private Cloud Virtual Private Cloud VPC Virtual Network Cloud VPN 云解析 PrivateZone VPCのDNSサービス Alibaba Cloud PrivateZone 负载均衡 SLB 負荷分散ロードパランサ Server Load Balancer Server Load Balancer AWS Global Accelerator Traffic Manager Cloud Load Balancing NAT 网关 NATゲートウェイ NAT Gateway NAT Gateway Internet Gateway、NAT Instance、NAT Gateway 弹性公网 IP パブリックIPリソース Elastic IP Elastic IP Elastic IP Addresses iconなし IPv6 转换服务 IPv6変換サービス IPv6 网关 IPv6ゲートウェイ 全局流量管理 Global Traffic Manager iconなし 共享带宽 帯域幅共有サービス 共享流量包 クラウド間のデータ転送 Data Transfer Plan Cloud Storage Transfer Service 云企业网 Cloud Enterprise Network Cloud Enterprise Network Cloud Enterprise Network VPN 网关 VPNゲートウェイ VPN Gateway VPN Gateway VPN Gateway 智能接入网关(邀测中) オンプレミスからのデータ転送 Smart Access Gateway AWS DataSync 高速通道 専用線接続 Express Connect Express Connect AWS Direct Connect ExpressRoute Dedicated Interconnect 基本的なセキュリティ(基础安全)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP DDoS高防IP DDoS 対策 (DDoS Pro) Anti-DDoS Pro DDoS基础防护服务 DDoS 対策 (DDoS Basic) Anti-DDoS Basic Anti-DDoS Basic AWS Shield Standard DDoS Protection DDoS高防(国际) DDoS 対策 (Premium) Anti-DDoS Premium AWS Shield Advanced DDoS Protection Cloud Armor 新BGP高防IP DDoS 対策 (DDoS BGP) Web应用防火墙 Webアプリケーションファイアウォール Web Application Firewall Web Application Firewall AWS WAF Application Gateway Cloud Armor 云安全中心(态势感知) クラウドセキュリティセンター Threat Detection Service 云盾混合云 クラウド、IDC、ハイブリッドクラウドでのセキュリティ保護サービス 云安全中心(安骑士) ホストセキュリティソフトウェア Server Guard 云防火墙 クラウドファイアウォール AWS Firewall Manager Firewall 堡垒机 セキュリティ監査管理プラットフォーム 漏洞扫描 脆弱性スキャンサービス 网站威胁扫描系统 Webサイト脅威スキャンサービス Website Threat Inspector GuardDuty Security Center Cloud Security Command Center アイデンティティ管理(身份管理)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP 访问控制 アカウント権限管理 Resource Access Management Resource Access Management AWS Identity and Access Management Active Directory Cloud IAM データセキュリティ(数据安全)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP SSL 证书 SSL/TLS証明書管理サービス SSL Certificates Service SSL Certificates Service AWS Certificate Manager App Service Certificates Google-managed SSL certificates 数据库审计 データベース監査サービス 加密服务 暗号化サービス iconなし 敏感数据保护 機密データ保護サービス AWS Secrets Manager Key Vault ビジネスセキュリティ(业务安全)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP 游戏盾 ゲームシールド GameShield 内容安全 コンテンツセキュリティ Content Moderation 风险识别 リスク識別と特定サービス 实人认证 人物識別・認証サービス 爬虫风险管理 Webクローラーやbotから防御するサービス Anti-Bot Service セキュリティサービス(安全服务)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP 安全管家 セキュリティテクノロジおよびコンサルティングサービス Managed Security service iconなし 渗透测试 侵入テスト 安全众测 セキュリティテスト Inspector Security Center Cloud Security Command Center iconなし 等保咨询 セキュリティコンサルティングサービス Inspector Security Center Cloud Security Command Center iconなし 应急响应 セキュリティ緊急対応サービス iconなし 漏洞扫描 脆弱性スキャンサービス iconなし 安全培训 セキュリティトレーニング iconなし 安全评估 セキュリティ評価サービス iconなし 代码审计 ソースコード監査 iconなし 安全加固 セキュリティ強化サービス iconなし 安全通告 セキュリティ監視通知サービス iconなし PCI DSS合规咨询 PCI DSSサービス ビッグデータ計算(大数据计算)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP MaxCompute MaxCompute MaxCompute MaxCompute Redshift SQL Data Warehouse BigQuery E-MapReduce E-MapReduce、Hadoopクラスタの展開 E-MapReduce E-Mapreduce EMR HDInsight Cloud Datalab, Cloud Dataproc 实时计算 Realtime Compute(元はApache Flink) Realtime Compute Realtime Compute データの可視化(数据可视化)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP DataV数据可视化 DataV、データの可視化 ビッグデータの検索と分析(大数据搜索与分析)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP 开放搜索 分散検索エンジンプラットフォーム CloudSearch Search 日志服务 各種ログの一元管理 Log Service Log Service Kinesis, SQS Event Hubs, Stream Analytics Cloud Dataflow, Cloud Pub/Sub Elasticsearch ElasticSearch Elasticsearch Elasticsearch Elasticserach Service 关系网络分析 リレーショナルネットワーク分析 画像分析 画像分析サービス 公众趋势分析 トレンド分析サービス Quick BI BIツール Quick BI Quick BI QuickSight Power BI Data Studio データ開発(数据开发)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP DataWorks データの可視化 DataWorks DataWorks Dataphin データ構築と管理サービス Dataphin 阿里云DataHub ストリーム処理 Kinesis, SQS Event Hubs, Stream Analytics Cloud Dataflow, Cloud Pub/Sub 数据集成 データ統合 Data Integration Data Integration データのレコメンデーション(数据开发)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP 企业图谱 コーポレートマップ iconなし 智能推荐 スマートレコメンデーション インテリジェントな音声対話(智能语音交互)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP 录音文件识别 録音ファイルの認識(Speech-to-Text) Transcribe Speech Services Cloud Speech-to-Text 实时语音转写 リアルタイム音声転写 一句话识别 一文認識(Text-to-Speech) Polly Speech Services Cloud Text-to-Speech 语音合成 音声合成 语音合成声音定制 音声データの合成およびカスタマイズ 语音模型自学习工具 音声モデル自己学習ツール 画像検索(图像搜索)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP 图像搜索 画像検索 Image Search Image Search 自然言語処理(自然语言处理)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP 多语言分词 テキスト上の多言語の単語・分詞の分割サービス Comprehend Language Understanding Cloud Natural Language 词性标注 品詞タグ付けの一部 命名实体 名前付きエンティティ 情感分析 感情分析 中心词提取 中心語抽出 智能文本分类 インテリジェントテキスト分類 文本信息抽取 テキスト情報抽出 商品评价解析 製品レビューの評価分析 印刷テキスト認識(印刷文字识别)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP 通用型卡证类 IDカード、銀行カード、パスポートなどカード識別サービス 汽车相关识别 免許証・ナンバープレートなど自動車関連データの識別サービス 行业票据识别 請求書・領収書の識別サービス 资产类识别 資産証明書など各証明書識別サービス 通用文字识别 画像データのテキスト認識 行业文档类识别 業界文書データのテキスト認識サービス 视频类文字识别 ビデオデータ内の字幕および文字テキスト認識サービス 自定义模板识别 ORCカスタムテンプレートを作成し認識するサービス 顔認識(人脸识别)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP 人脸识别 顔認識 機械翻訳(机器翻译)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP 机器翻译 機械翻訳 Translate Translator Text Cloud Translation 画像認識(图像识别)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP 图像识别 画像認識 Rekognition Computer Vision Cloud Vision コンテンツセキュリティ(内容安全)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP 图片鉴黄 ポルノコンテンツ認識 图片涉政暴恐识别 写真データからテロ画像や政治的問題画像識別サービス 图片Logo商标检测 画像からロゴ検出サービス 图片垃圾广告识别 画像スパム認識 图片不良场景识别 薬物使用、ギャンブルなどの不適切なコンテンツ認識サービス 图片风险人物识别 画像から人物特定リスク識別サービス 视频风险内容识别 ビデオリスクのコンテンツ認識 文本反垃圾识别 テキストリスクのコンテンツ認識 语音垃圾识别 音声データのリスク識別サービス 機械学習プラットフォーム(机器学习平台)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP 机器学习平台 PAI 機械学習プラットフォームPAI Machine Learning Platform For AI SageMaker Machine Learning Service Cloud ML Engine iconなし 人工智能众包 AIによるクラウドソーシング ドメイン名とウェブサイト(域名与网站)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP 域名注册 ドメイン登録サービス 域名交易 ドメイン名取引サービス 网站建设 ウェブサイト構築サポートサービス 云虚拟主机 クラウド仮想ホスト Web Hosting 海外云虚拟主机 国外Webホスティング設置サービス 云解析 DNS DNS Domains Alibaba Cloud DNS Route 53 DNS Cloud DNS 弹性Web托管 柔軟なWebホスティング Elastic Beanstalk App Service App Engine iconなし 备案 ドメイン登録(IPC)のためのICP代替申請サービス 知的財産サービス(知识产权服务)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP 商标注册 商標登録サービス 商标交易 商標登録されてるものを購入するサービス 申請サービス(应用服务)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP iconなし 机器人流程自动化 RPA RPA 云桌面 クラウドデスクトップ 云AP クラウドAP API 网关 API管理 API Gateway API Gateway API Gateway API Management Cloud Endpoints/Apigee 企业邮箱 ビジネスメールボックス Alibaba Mail 邮件推送 メール送受信サービス DirectMail Simple Email Service インテリジェントデザインサービス(智能设计服务)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP iconなし 鹿班 画像自動生成サービス モバイルクラウド(移动云)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP 移动推送 モバイルアプリの通知とメッセージングサービス 移动热修复 モバイルサービスのhot-fixサービス 移动测试 モバイルテストサービス AWS Device Farm Cloud Test Lab 移动数据分析 モバイルアプリデータ統計サービス 移动用户反馈 モバイルアプリからのフィードバックサービス iconなし HTTPDNS モバイル開発者向けのドメイン名解決サービス ビデオクラウド(视频云)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP 音视频通信 RTC オーディオとビデオ通信RTC 视频直播 ライブビデオ ApsaraVideo Live ApsaraVideo Live AWS Elemental MediaLive Media Services - Live and On-demand Streaming 视频监控 ビデオ監視サービス 视频点播 オンデマンドオーディオ/ビデオストリーミングサービス ApsaraVideo VOD AWS Elemental MediaPackage Media Services 媒体处理 メディア変換 ApsaraVideo for Media Processing ApsaraVideo for Media Processing Elastic Transcoder/AWS Elemental MediaConvert Media Services - Encoding (Anvato) 视频审核 ビデオ検閲サービス。ポルノや政治など禁止事項の特定をメイン 视频DNA ビデオ監査サービス。映像データから重複排除をメイン 视频智能生产 ビデオ制作サービス。映像を識別しリアルタイムでハイライトを生成 视频多模态内容理解 ビデオコンテンツ識別サービス。視覚情報、テキスト、音声および動作から家庭用品、自動車、動物、植物など1000以上のカテゴリを特定 智能封面 ビデオデータやコンテンツから最適なビデオカバー提供 智能视觉 ビデオインテリジェント。画像分類、画像検出、ビデオ分類、ビデオ認識、ライブ識別 プライベートクラウド(专有云)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP Apsara Stack オンプレミスによるAlibabaCloudサービス Apsara Stack AWS Outposts Stack Cloud Platform Service メッセージキューMQ(消息队列 MQ)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP 消息队列 RocketMQ 分散メッセージミドルウェア Simple Queue Service Queue Storage 消息队列 AMQP RabbitMQによるメッセージキュー 微消息队列 for IoT IoT向けマイクロメッセージキュー 消息队列 Kafka kafkaによるメッセージキュー Managed Streaming for Kafka 消息服务 MNS 分散型メッセージキューサービス Message Service Message Service SQS (Simple Queue Service), SNS (Simple Notification Service), MQ Queue Storage, Service Bus Google Pub/Sub, GAE の Task Queue iconなし 微服务 マイクロサービス 企业级分布式应用服务 EDAS エンタープライズ分散アプリケーションサービスEDAS Enterprise Distributed Application Service 应用配置管理 ACM アプリケーション構成管理ACM Application Configuration Management 全局事务服务 GTS グローバルトランザクションサービス インテリジェントカスタマーサービス(智能客服)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP 云呼叫中心 クラウドコールセンター 云小蜜 NLPベースの会話ロボットサービス Lex Bot Service (Dialogflow) 智能对话分析 知的対話分析 云客服 クラウドカスタマーサービス ブロックチェーン(区块链)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP 区块链服务 ブロックチェーンサービス Blockchain as a Service Blockchain as a Service Managed Blockchain、Quantum Ledger Database Blockchain Service、Blockchain Workbench SaaSアクセラレータ(SaaS加速器)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP 宜搭 GUIベース開発サービス モノのインターネットプラットフォーム(物联网平台)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP 物联网设备接入 IoTデバイスへのアクセス 生活物联网平台 Life Internet of Thingsプラットフォーム 物联网设备管理 IoTデバイス管理 物联网数据分析 モノのインターネットデータ分析 AWS IoT Analytics Stream Analytics/Time Series Insights iconなし 物联网一站式开发 IoT 開発Studio AWS IoT Things Graph IoT Central 低電力WAN(低功耗广域网)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP 物联网络管理平台 IoTネットワーク管理プラットフォーム 物联网无线连接服务 IoT無線通信接続サービス エッジサービス(边缘服务)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP 物联网边缘计算 IoTエッジコンピューティング AWS Greengrass IoT Edge Cloud IoT Edge iconなし 视频边缘智能服务 ビデオエッジインテリジェンスサービス 設備サービス(设备服务)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP iconなし AliOS Things Alibaba Cloud用IoTオペレーティングシステム IoTセキュリティ(物联安全)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP iconなし 物联网设备身份认证 IoTデバイスアイデンティティ認証 AWS IoT Core IoT Hub Cloud IoT Core iconなし 物联网安全运营中心 IoTセキュリティオペレーションセンター AWS IoT Device Defender iconなし 物联网可信执行环境 IoT実行環境アプリケーション AWS IoT 1-Click iconなし 物联网可信服务管理 IoTサービス集約管理プラットフォーム AWS IoT Device Management IoT Hub Cloud IoT Core ソフトとハードの統合アプリケーション(软硬一体化应用)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP iconなし 魔笔 手書きデータの認識サービス(マジックペン) 云投屏 クラウドプロジェクションスクリーン 関連クラウド製品(相关云产品)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP 智联车管理云平台 Zhilian自動車メーカー向けの自動車管理クラウドプラットフォーム エコロジー(生态)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP iconなし 物联网市场 IoTアプリケーション購入市場 iconなし ICA物联网标准联盟 IoTConnectivityAlliance、IoTアライアンス iconなし 物联网测试认证服务 IoTテストおよび認証サービス バックアップ、移行、および災害復旧(备份、迁移与容灾)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP 混合云备份服务 ハイブリッドクラウドのバックアップサービス 混合云容灾服务 ハイブリットクラウドの災害復旧サービス 数据库备份 DBS データベースバックアップ 数据传输 DTS データ転送サービス AWS Database Migration Service, AWS Schema Conversion Tool Database Migration Service 数据库和应用迁移 ADAM データベースとアプリケーション移植サービス 闪电立方 オンラインとオフラインのデータ転送サービス(Lightning Cube) iconなし 迁移工具 Qianyun移植ツール 開発者プラットフォーム(开发者平台)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP 云效 DevOpsサービス iconなし 开发者中心 デベロッパーセンター 物联网开发者平台 IoTプラットフォーム APIとツール(API与工具)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP iconなし Cloud Toolkit クラウド開発ツールキット AWS CodeStar DevOps OpenAPI Explorer OpenAPI Explorer iconなし API 控制中心 APIコンソール iconなし API 全集 APIプラットフォーム iconなし API 错误中心 APIエラーセンター iconなし SDK 全集 Alibaba Cloud SDKプラットフォーム AWS Cloud9 (Visual Studio Online) (Cloud Shell Code editor) 云命令行 Cloud Shell Cloud Shell AWS Systems Manager Session Manager Cloud Shell Cloud Shell プロジェクトコラボレーション(项目协作)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP iconなし 项目协作 クラウドエンタープライズコラボレーション コードホスティング、倉庫(代码托管、仓库)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP 代码托管 Gitライブラリホスティングサービス AWS CodeCommit Repos Cloud Source Repositories iconなし Maven公共仓库 Maven Public Warehouse iconなし 制品仓库 Maven製品管理サービス 統合配送(集成交付)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP iconなし 持续交付 継続的配信サービス CodePipline パイプライン AWS CodePipeline Pipelines Cloud Build テスト(测试)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP 性能测试 PTS パフォーマンステストサービス iconなし 测试平台 クラウドサービス上のテストプラットフォーム 開発と運用(开发与运维)
icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP 应用实时监控服务 アプリケーションリアルタイム監視サービス 云监控 クラウドモニタリング CloudWatch Events Event Grid、Monitor Stackdriver Monitoring iconなし 智能顾问 AlibabaCloudコンサルティングサービス 应用高可用服务 AHAS Application High Availability Service Node.js性能平台 Node.jsパフォーマンスプラットフォーム 链路追踪 TracingAnalysis
- 投稿日:2019-05-24T12:55:44+09:00
EC2上で、Packerを用いてAMIを作成する方法メモ
概要
EC2上から、Packerを用いてマシンイメージ(AMI)を作りましたが、いくつかハマりどころがあったため、メモしておきます。
尚、認証はシークレットキーなどを用いずにIAMロールで行いました。AMIのベースイメージはCentOSのものを用いました。
手順
最初に、軽く作業の手順を記しておきます。
Packerのインストール
curlを用いてPackerをダウンロードして、それを解凍、パスに置きます。
curl https://releases.hashicorp.com/packer/1.4.1/packer_1.4.1_linux_amd64.zip -o packer.zip unzip packer.zip mv packer /usr/local/bin設定ファイルの記述
設定ファイルをjson形式で記述します。
最低限の設定は、以下のような感じです。{ "builders": [ { "type":"amazon-ebs", "ami_name": "test-ami", "region": "ap-northeast-1", "source_ami": "ami-25bd2743", "instance_type": "t2.micro", "ssh_username": "centos", "security_group_id":"sg-something", "subnet_id":"subnet-something" } ] }
source_ami
は、CentOSのものを、ここからとってきました。実行
実行します。
packer validate
でエラーが出なければ、packer build
を行います。ハマりどころ
no_proxyの設定
社内でプロキシ環境下で作業を行っていたのですが、その場合、EC2インスタンスに紐づけられたIAMロールの情報(インスタンスメタデータ)が取得できませんでした。
具体的には、以下のようなエラーが出ていました。Build 'amazon-ebs' errored: No valid credential sources found for AWS Builder. Please see https://www.packer.io/docs/builders/amazon.html#specifying-amazon-credentials for more information on providing credentials for the AWS Builder.このエラーの対策として、環境変数
no_proxy
に169.254.169.254
を設定しました。
169.254.169.254
にアクセスすることで、EC2インスタンスはインスタンスメタデータを取得しているようでした。subnet_idとsecurity_groupの設定
最初私はPackerの設定ファイルに
subnet_id
とsecurity_group
を設定していなかったのですが、そうするとPackerが自動的にそれらを設定し、それらがエラーを起こすことがあるようです。具体的には、以下のようなエラーが出ました。
Build 'amazon-ebs' errored: Error launching source instance: InvalidParameter: Security group sg-something and subnet subnet-something belong to different networks.
subnet-id
とsecurity_group
が別のネットワークにある、と怒っています。これを避けるために、Packerの設定ファイルに同一ネットワーク上に存在する二者を設定しておきます。ssh_usernameの設定
PackerでCentOSのイメージを作成する方法を調べると、
ssh_username
をec2-user
としているものが多くありますが、私の場合はその設定で以下のようなエラーが出て、sshがうまくできませんでした。Build 'amazon-ebs' errored: ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain原因は、こちらに書いてある通り、CentOSがSSH用の公開鍵をAWSから取得する手順に問題があるようです。
私の場合、
ssh_username
をroot
もしくはcentos
にしたところ、正常に鍵が取得されるようになりました。
- 投稿日:2019-05-24T12:48:33+09:00
【ハマり】S3事前署名で発行されたURLがAccessDeniedで弾かれる事象について
説明
個人開発中にS3の事前署名URL関連でハマった。
本当にクソしょーもないハマり方なので、記事にするべきか判断に迷いました。
でも塵も積もればということで。先言っておくと、原因はバケットポリシー関連のやらかしです。
事象説明
Node.js。
zizen.js//事前署名URL取得 var params = { Bucket: 'バケット名', Expires: 3600, Key: 'test.png', ContentType: 'image/png' }; var res = await new Promise((resolve, reject)=>{ S3.getSignedUrl('putObject', params, (err,url)=> { if(err){ logger.level='error'; logger.error(err); return reject(err); } else{ logger.info(url); return resolve(url) } }); }) const response={'statusCode':'200', 'body':JSON.stringify({'sign_url':res }), 'headers': {'Content-Type':'application/json'}, }; callback(null,response);https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getSignedUrl-property
上記の公式リファレンスに沿ってPutObjectオペレーションに対して、3600秒の有効期限を持った事前署名urlを発行。
そして、3600秒以内に以下のコマンドでtest.pngのアップロードを試みるもcurl -H "Content-Type: image/png" --data-binary "@test.png" -X PUT "発行されたURL"(^ω))))))))^<なんで~っ
結論
パケットポリシーで明示的にPutObjectを禁止していると、事前署名Urlに対してのアクションも禁止されます。
されました。
この明示的禁止ポリシーを削除する事で無事アップロードに成功します。
デフォルトでも禁止なのですが、バケットポリシーの明示的禁止とデフォルトの禁止には違いがあるようです。
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/example-bucket-policies.html明示的な拒否は、ACL やユーザーポリシーなどの他の方法を使用して examplebucket バケット内のオブジェクトに付与したすべてのアクセス許可よりも優先されます。
へ~…ふ~ん…そうなんすか…
以上です。
- 投稿日:2019-05-24T11:25:10+09:00
WAF を使って hot-linking 対応
strempack の Tana です。
概要
動画や画像などを配信しているリンクなどがあると思いますが、外部サービスにリンクを貼られるなど、使われたくないケースがあるかと思います。サーバサイドでは nginx などで制御できますが、急激なスパイクやトラフィックなどを意識したくないので、CDN(CloudFront) できればなぁっと思ってたら、AWS WAF で制御することができることをつい最近知りました(汗)
AWF WAF
https://console.aws.amazon.com/waf/home細かな IP制限、パラメータ制限、地域制限なども可能ですし、
対象リソースを CloudFront だけでなく、ALB や API Gateway も連携対象にすることができます。今回は直リンク(Hot-linking防止)ではアクセスできないようにし、s3のドメインからのみ許可してみます。
設定方法
Web ACLs から作成するとわかりにくいので、String and regex matching から作成します。
String and regex matching: 条件設定
どういう条件を対象にするかを設定します。
URLやパラメータ、Header など細かな条件を指定できます。
domain-check という名前で作成し、今回はHeaderのリファラーをチェックします。Rule
ルールを作成します。複数の条件を紐づけることができます。
domain-rule という名前で新規に作成、先ほど作成した条件の domain-check というのを紐付けます。Web ACLs 設定
domain-rule を紐付けし、今回事前に作成しておいた、CloudFrontを指定します。
Edit ACLs
Edit ACLs にて、条件を指定します。
条件にマッチしたもののみ許可! という設定にしてます。
つまり、s3 経由でないとアクセスさせません。直リンクでアクセスしてみる
期待通りに、アクセスできません。
s3 経由で html にアクセス
下記の html を作成し、CloudFront の動画を参照してみます。
test.html<video width="640" height="360" controls> <source src="http://xxxxx.cloudfront.net/tmp/test.mp4" type="video/mp4"> </video>動画にアクセスすることができました。
結論
WAFを使えば、UI上で簡単に登録し、制限をかけることができました。
もっと細かにルール・条件を作成すれば、より強固なものが提供できそうです。
リクエスト数によって課金されるようなので、必要なリソースのみ制限をかけるのが良さそうです。
- 投稿日:2019-05-24T08:56:23+09:00
Amazon VPC から Private Space 内の Heroku Postgres へ PrivateLink で接続
Connecting to a Private Heroku Postgres Database from an Amazon VPCの記事を書こうと思ったんですが、DevCenter の記事がやっぱりよくできているので、ざっくり翻訳してみました。そのほうが便利。なんか英語部分で違和感を感じる部分を、わいの感覚で修正していますが、まちがってはないはずです。
AWS PrivateLinkを使って、AWS VPCとPrivate Space内で動作する Heroku Postgres データベースを安全に接続する方法について紹介します。主に次の3つのステップでできちゃいます。
- Private Space 内の Heroku Postgresに Endpointを作成
- AWS VPC側に Endpoint Network Interfaceを作成
- それぞれのEndpointの接続
接続の設定で、許可されているアカウントのリストを指定して、VPCからPostgresへのアクセスを制御できます。
この機能を利用するには、接続先のHeroku Postgresと同じリージョンのサブネットで Amazon VPC Endpointを作成できなければなりません
Heroku 前提条件
PrivateLinkのEndpointを作成するためには、次の前提条件を満たす必要があります
- Private Spaceが必要 - Heroku ダッシュボードかCLIで、Private Spaceを作れること
- Private Space 内で動作する Heroku Postgresを利用するHerokuアプリがあること - privateプランのHeroku Dynoが対象の Private Space内で動かせること
Heroku側にEndpointを作成する
1. PrivateLink CLIプラグインを導入する
heroku plugins:install pg-privatelink2. AWSのAccount ID情報を取得する
次のAWS CLIコマンドでAccount ID情報を取得できます。
aws sts get-caller-identity --output text --query 'Account' 123456789101'123456789101'というAccount IDはサンプルです
AWSのダッシュボードからでも、
Account Settings
からAccount IDを取得することができます。3. PrivateLink endpointを作成する
PrivateLink endpointを作成するには、次のコマンドを実行します(置き換える値については気をつけること)。
heroku pg:privatelink:create POSTGRESQL_ADDON_NAME --aws-account-id ACCOUNT_ID --app APP_NAME
POSTGRESQL_ADDON_NAME
は、今回接続先となる Heroku Postgresのデータベース名です(例えばpostgresql-sushi-12345
みたいな)。APP_NAME
は、対象のHerokuアプリ名です。ACCOUNT_ID
は、先程確認したAWS Account IDです。このIDは次のいずれかのパターンにマッチしたものです。
- account-id
- account-id:user/username
- account-id:role/rolename
--aws-account-id
フラグを複数指定することで、複数のアカウントの指定が可能です出力結果は、次のようなものになります
heroku pg:privatelink:create postgresql-sushi-12345 --aws-account-id 123456789101:user/abc.xyz --app privatelink-vpc-endpoint-demo Creating privatelink... done Service Name: Provisioning Status: Provisioning The privatelink is now being provisioned for postgresql-sushi-12345. Run heroku pg:privatelink:wait -a APP to check the creation process.だいたい 5分から10分でPrivateLink endpointが利用可能になります。Provisionの状況は
heroku pg:privatelink:wait --app APP_NAME
でわかります。4. endpoint のサービス名を取得する
PrivateLinkのendpointが利用可能になったら、次のコマンドで詳細を確認できます。
heroku pg:privatelink POSTGRESQL_ADDON_NAME --app APP_NAME
POSTGRESQL_ADDON_NAME
は該当のPrivate Space内の Heroku Postgres名へ、APP_NAME
は該当のHerokuアプリ名へ置き換えてください実行すると、次のような結果が帰ってきます
heroku pg:privatelink postgresql-sushi-12345 --app privatelink-vpc-endpoint-demo === privatelinks for postgresql-sushi-12345 Service Name: com.amazonaws.vpce.us-east-1.vpce-svc-0410a2e25933fe8ec Status: Operational === Whitelisted Accounts ARN Status arn:aws:iam::123456789101:user/abc.xyz Active Your privatelink is now operational. You must now copy the Service Name and follow the rest of the steps listed in https://devcenter.heroku.com/articles/heroku-postgres-via-privatelink.
Service Name
項目の内容(ここではcom.amazonaws.vpce.us-east-1.vpce-svc-0410a2e25933fe8ec
となっている部分)をコピーしておいてください。Amazon VPC endpointを作成するときに必要になります。Amazon VPC endpointを作成する
次に、Amazon VPCダッシュボードで以下の手順を実行していきます。
1. セキュリティグループの設定
endpointには、適切なセキュリティルールを持つセキュリティグループが必要になりますので、Amazon VPCダッシュボードの[Security Groups]タブで[Create security group]をクリックしましょう。
ここで、適切な(テキトーな)セキュリティグループ名と詳細を入力して、[Create]ボタンをクリックします
次に、できあがったセキュリティグループを選択して、[Actions]から[Edit inbound rules]を実行します
接続元のIPアドレス(CIDR)を入力して、
Port Range
内に5432-5433
と指定したら[Save rules]をクリックします。2. endpointを作成する
VPCダッシュボードから[Endpoints]タブを選択して、[Create Endpoint]をクリックします。
Create Endpoint
画面になったら、Find service by name
を選択して、Service Name
項目へ、先程確認(コピー)したService Name
を入力(ペースト)します。次に、
Verify
ボタンをクリックして、利用可能なサブネットリストを確認します。[Security group]で、先ほど作成したセキュリティグループを指定して、[Create endpoint]ボタンをクリックします。
endpointの作成して
Available
になるまで、だいたい5分から10分程度かかります。Amazon VPC endpointからHerokuへ接続する
Amazon VPC endpointが利用可能(Available)になったら、VPCがPrivate Space内のHeroku Postgresへ接続するためのURLを取得できるようになります。
まず、PrivateLink endpoint から、後半の17桁の
Endpoint ID
を取得します。また、このIDは大文字にして利用します。もし
Endpoint ID
がvpce-01c87ae3c05563935
だったときは、01C87AE3C05563935
というようになります。次のコマンドを実行して、必要なIDを取得します。
heroku config --app your_app_name | grep ENDPOINT_ID_HEREこのコマンドを実行することによって、接続先のHeroku Postgresへ接続するためのAWS VPC Endpoint URLが、次のフォーマット形式で表示されます。
postgres://user:password@vpc-endpoint-dns-name:5432/database
このURLを使用して、AWS VPC内のアプリケーションからPrivate Heroku Postgresへ接続できます。コマンドの実行例は次の通り。
訳者補足:
privatelink-vpc-endpoint-demo
がHerokuアプリ名、01C87AE3C05563935
が先程取得した Endpoint IDの後半17桁を大文字に変換したもの、です。heroku config --app privatelink-vpc-endpoint-demo | grep 01C87AE3C05563935 DATABASE_ENDPOINT_01C87AE3C05563935_URL: postgres://abcdefghijklmn:abcdefghijklmnopqrstuvwxyz123456789101112131415161718192021222324@ec2-3-83-63-168.compute-1.amazonaws.com:5432/dd0k757ojc5qtこの機能を利用する場合に懸念事項があれば、サポートチケットを上げてください
VPC endpointでEC2からHeroku Postgresへ接続する
VPC endpointが設定できたら、Heroku Postgresへ接続するためのEC2インスタンスを作成しましょう。
EC2ダッシュボード内の
Launch Instance
をクリックして、AMIとインスタンスタイプを選択します。ここでは、Ubuntu t2.micro
インスタンスを指定しています。インスタンスの詳細を設定するときに、VPCネットワークでは、先ほど作成したセキュリティグループを指定します。まちがいないことを確認できたら、
Review and Launch
をクリックしてEC2インスタンスを起動します。インスタンスのステータスが
running
になったら、インスタンス作成時に指定したSSHキーペアを使ってインスタンスへssh接続してみましょう。最初の段階で、postgresクライアントコマンドを次のようにインストールして設定します。
sudo apt-get -qq update && sudo apt-get install -y curl ca-certificates curl -s https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' sudo apt-get -qq update sudo apt-get install -y postgresql-client-10EC2インスタンスから、Heroku Postgresへ接続するには、次のコマンドを実行します。
psql postgres://user:password@vpc-endpoint-dns-name:5432/database正常に接続できると、次の画面のようになります。
制限事項
- 作成するAmazon VPC endpointは、Heroku Postgresデータベースと同一リージョンにあるsubnetへ作成しなければなりません
- 共通するAmazon VPCとHeroku Postgres VPCのAZ内に存在する Private Space Heroku Postgresへ接続できます
- Heroku Postgresへ安全にアクセスできるように、VPCのセキュリティを担保するのは、お客さまの役割となります
Private Space trusted IP ranges
との違いPrivate Spaces では、
trusted IP ranges for data services
をβサービスとしてサポートしています。この機能は、Private Space外からHeroku Postgresへ接続する場合のオプションです。しかし、この機能を利用するにはHerokuチームへ依頼することが必要で、細かいアクセス制御を実施することができません。AWS PrivateLinkで接続することによって、Heroku PostgresはVPCの一部として扱われ、ユーザー・ロールによるアクセス制御を実施できます。PrivateLinkにより接続できる場合には、この方式での接続を推奨します。
怪しい意訳があったら、とっととご連絡を。
- 投稿日:2019-05-24T08:00:15+09:00
AWS DeepRacerの仮想サーキットでランキング50位圏内に入るまでに得たノウハウを晒してみる
AWS DeepRacerで仮想サーキットのランキング上位を目指そうと試行錯誤していますが、なんとか50位圏内に入ることができました。(パチパチ-
AWS DeepRacerの仮想サーキットに参戦できたー
— 甲斐甲?️ヴェポライザーとDeepRacer楽しい (@k_aik_ou) May 23, 2019
ここからが本当の戦いだー(白目 pic.twitter.com/YQVPU2ZxyYAWS DeepRacerで良いモデル作るには報酬設計とハイパーパラメータ設定をそれこそ網羅的に試行錯誤してなんぼって考えてるから、Leagueがあって競い合いつつもノウハウ共有しないと、モデル作成に費やした時間分だけAWSさんが課金で(゚д゚)ウマーするだけから、みんな頑張ろうな!
— 甲斐甲⛅C++とブロックチェーン勉強中 (@k_aik_ou) May 11, 2019なので、ここまでに得たノウハウを共有してみます。
以下の記事もよろしければご参考ください。
AWS DeepRacerを利用する際に覚えておいたほうがよいこと - Qiita
https://qiita.com/kai_kou/items/5ebf54ef41d38d16f24dAWS DeepRacerで報酬関数の実装をあれこれ試してみた - Qiita
https://qiita.com/kai_kou/items/8a45c687baca8c9465f6AWS DeepRacer関連情報まとめ【随時更新】 - Qiita
https://qiita.com/kai_kou/items/5c02d0dca26a33dd8761強化学習の特性を考えて報酬設計する
報酬関数の実装やハイパーパラメータを適当に触って試行錯誤するにも、暗中模索しないように公式ドキュメントなどからAWS DeepRacerで使われているアルゴリズムの特性を知った上で報酬設計しています。
AWS DeepRacer モデルのトレーニングと評価 - AWS DeepRacer
https://docs.aws.amazon.com/ja_jp/deepracer/latest/developerguide/create-deepracer-project.htmlざくっと抜粋。
観察データとアクションを想定される報酬にマッピングする関数
モデルをトレーニングすることは、想定される報酬を最大化する関数を見つける、または学習すること
最適化されたモデルによって車両が最初から最後までトラックで走行するためにどのようなアクション (速度とステアリング角度のペア) を取れるかを規定
高速なトレーニングパフォーマンスのための近位ポリシー最適化 (PPO) アルゴリズムのみがサポート
トレーニング強化学習モデルは反復プロセス
一度にある環境でのエージェントのすべての重要な動作をカバーする報酬関数を定義するのは困難
賢明な方法は、単純な報酬関数から始めて、段階的に強化していく方法
報酬関数を設計するポイントは下記が参考になります。
和訳:Environment Design Best Practices - Qiita
https://qiita.com/Alt_Shift_N/items/2c37fbb26d739b7f3046より深くPPOアルゴリズムについて知りたい方は下記が参考になります。
【強化学習】実装しながら学ぶPPO【CartPoleで棒立て:1ファイルで完結】 - Qiita
https://qiita.com/sugulu/items/8925d170f030878d6582トレーニングの過学習に気をつける
AWS ReepRacer コンソールの報酬グラフでトレーニングし過ぎかどうか確認するのに活用しました。
AWS DeepRacer コンソールの報酬グラフは標準設定だと過去1時間のグラフが表示されますが、CloudWatchとおなじで、グラフの表示期間が変更できます。私もよくわかってなくて感覚で申し訳ありませんが、実装した報酬関数のままトレーニング継続するか、実装を見直すかなどの判断に報酬グラフを参考にしています。
モデルのクローンを活用する
公式ドキュメントにあるように、1つの報酬関数で完結するのではなくて、段階的にトレーニングするのがよさそうです。
AWS DeepRacer モデルのトレーニングと評価 - AWS DeepRacer
https://docs.aws.amazon.com/ja_jp/deepracer/latest/developerguide/create-deepracer-project.html
一度にある環境でのエージェントのすべての重要な動作をカバーする報酬関数を定義するのは困難
賢明な方法は、単純な報酬関数から始めて、段階的に強化していく方法
クローン時に報酬関数をそのままでトレーニングを継続するのか実装を変更するのかを選択できます。
アクションは変更できないので気をつけましょう。アクション設定でスピードを最速にする
仮想サーキットのランキングで上位を狙うならば、スピードはMAXのみで良いです。
実機の場合にどうなるかは試したことがないので不明です。ハイパーパラメータは変更しなくても50位圏内に入れる
いまのところのハイパーパラメータは初期設定のままでなんとかなっています。
おそらく報酬関数の実装とトレーニングでタイムに限界が来たら学習率を高めるのに手を入れる感じでしょうか?
ガチ勢にコツを伺いたいところです。PPO で学習させる際のベストプラクティス - Qiita
https://qiita.com/dora-gt/items/18440bea7aa0fc8aa17f100%完走できるモデルにこだわらない
トレーニング完了後の試走で5周すればすべて完走できるモデルにしなくても(いまのところは)良いと思います。
LondonLoopだと2周連続で完走すればラップタイムが記録されるルールになっています。
なので、5周のうち2,3回完走できるようになったら仮想サーキットに挑むのもありです。3周完走できたモデルをSubmitしたらうまい具合に2周連続で完走してくれてラップタイム記録されました。
試走結果は変動する
トレーニング後に試走ができますが、必ずしも同じような完走率、タイムにはなりません。
際どい結果になった場合は試走しなおして確認するのもありです。モデル作成時に詳細項目を活用する
トレーニングを繰り返しているとどのモデルが何だったか忘れます。
詳細からアクション設定や報酬関数の実装は確認できますが、クローンしてトレーニングする場合、経緯を詳細にメモっておくと役に立ちます。
仮想サーキットのレーサー名は変更できない
仮想サーキットへモデルをSubmitする際に初回のみレーサー名の入力ができます。
初回以降は変更不可で開催される全レースで共通のレーサー名になるので気をつけましょう。
1度仮想サーキットにSubmitしたモデルは再Submitできない
5周のうち2,3回完走できるモデルを仮想サーキットにSubmitした場合、運次第で完走するしないが起こりえます。
なので、ラップタイムが記録される条件になるまで同じモデルをSubmitしたいところですが、できないみたいです。
(未確認ですが、)再度Submitしたモデルをクローンして5分くらいトレーニングすれば別モデルとみなされるかもしれません。やっぱりコストが高い
仮想サーキットのLondonLoopで50位圏内に入るまでに費やしたコストはこちら。
いやーきついっす。最後に
AWS DeepRacerのLondonLoopで12〜13秒台3/5で完走できるようになったけどそこからのトレーニングがむずい。多分ここが本当のスタートラインっぽい。
— 甲斐甲☀ヴェポライザーとDeepRacer楽しい (@k_aik_ou) May 22, 2019
これは課金がとまらなさそうだ… pic.twitter.com/4r5dXpefkNみんなで(出せるところまでは)ノウハウを共有して、ランキング上位目指しましょう!!!
参考
AWS DeepRacerを利用する際に覚えておいたほうがよいこと - Qiita
https://qiita.com/kai_kou/items/5ebf54ef41d38d16f24dAWS DeepRacerで報酬関数の実装をあれこれ試してみた - Qiita
https://qiita.com/kai_kou/items/8a45c687baca8c9465f6AWS DeepRacer関連情報まとめ【随時更新】 - Qiita
https://qiita.com/kai_kou/items/5c02d0dca26a33dd8761AWS DeepRacer モデルのトレーニングと評価 - AWS DeepRacer
https://docs.aws.amazon.com/ja_jp/deepracer/latest/developerguide/create-deepracer-project.html和訳:Environment Design Best Practices - Qiita
https://qiita.com/Alt_Shift_N/items/2c37fbb26d739b7f3046【強化学習】実装しながら学ぶPPO【CartPoleで棒立て:1ファイルで完結】 - Qiita
https://qiita.com/sugulu/items/8925d170f030878d6582PPO で学習させる際のベストプラクティス - Qiita
https://qiita.com/dora-gt/items/18440bea7aa0fc8aa17f
- 投稿日:2019-05-24T00:19:10+09:00
Lambdaのリソースポリシーについて
AWS Lambdaのリソースポリシー
Lambdaの権限設定にはリソースポリシー・IAMポリシーの2つがあります。
リソースポリシーは、簡単に言えばLambdaを呼び出す側に対するパーミッションを与えます。
また、IAMポリシーはLambdaに対してリソースを呼び出し操作するためのパーミッションを与えるものです。両者の違いや、AWS CLIを利用したポリシーの設定などに関してはClassMethodさんの「AWS LambdaのIAMポリシーとリソースポリシーを理解しよう」という記事が非常にわかりやすいです。
ちなみに、2019年5月23日現在のマネジメントコンソールでは、
Designerの鍵マークのアイコンをクリックすると関数のポリシーを閲覧することができます。
変更はAWS CLIから行う必要があります(つまりマネジメントコンソールの"関数のポリシー"は参照用の機能となっている)。AWS CLI AddPermisionの公式リファレンス(英語)はこちらです。
本稿は前者、リソースポリシーに関する具体的な話です。
概要
本稿で取り上げるケースは以下の3つです。
- CloudWatch EventsからLambda関数をトリガーする場合
- ALB(Application Load Balancer)からLambda関数をトリガーする場合
- SNS(Simple Notification Service)を利用してクロスアカウントでLambdaをトリガーする場合
1. CloudWatch EventsからLambda関数をトリガーする場合
Lambda関数をスケジュールされたイベントによって実行するようなケースでは、Cloud Watch Eventsが主に用いられるかと思います。
特定のLambda関数をトリガーするCloudWatch Eventsの設定方法は主に以下のようなものが考えられます。
- Lambdaマネジメントコンソールでトリガーを設定する。
- CloudWatchマネジメントコンソールで新規ルールを作成し、そのターゲットとしてLambda関数を指定する。
- CloudFormation(SAM)によるデプロイ
このうち、CloudFormationによるデプロイ時には明示的にリソースポリシーを作成しなければいけません。
# 明示的にリソースポリシーを定義する LambdaEventPermission: Type: 'AWS::Lambda::Permission' Properties: Action: 'lambda:InvokeFunction' FunctionName: !Ref Lambda Principal: 'events.amazonaws.com' SourceArn: !GetAtt Rule.Arnまた、すでにCloudWatchマネジメントコンソールででルールを作成したLambdaのエイリアスを削除し、同名で作り直した場合などもAWS CLIを利用してAddPermission APIをコールして再設定をしたり、マネジメントコンソール上でルールの更新や再作成を行う必要があります。
2. ALB(Application Load Balancer)からLambda関数をトリガーする場合
ALBはパスベースのルーティングによってLambda関数をトリガーすることが可能ですが、ターゲットとなるLambda関数のリソースポリシーではALBからのInvokeを許可する必要があります。
ALBからLambdaを呼び出すようにしているケースで、ログに"Access Denied"などと出力されてトリガーされていない場合はLambda関数においてリソースベースのポリシーが設定されていない可能性があります。
公式リファレンス「Lambda関数の準備」では、
aws lambda add-permission \ --function-name lambda-function-arn-with-alias-name \ --statement-id elb1 \ --principal elasticloadbalancing.amazonaws.com \ --action lambda:InvokeFunction \ --source-arn target-group-arn上記のようなコマンドによる設定方法が紹介されています。
構成管理としては、JSONファイルで設定を保存しておき、
--cli-input-json
オプションを利用することをお勧めします。また、同リファレンスにもあるようにLambda関数名にエイリアスを指定することで特定のバージョンを指定することも可能ですが、こちらもエイリアスを同名で再作成した場合などは再設定が必要となることに注意が必要です。
3. SNS(Simple Notification Service)を利用してクロスアカウントでLambdaをトリガーする場合
SNSを利用すると、クロスアカウント間でのLambdaトリガーが可能です。
例えば、アカウントAのLambda関数Aにおいて処理結果をSNSによって特定のトピックに対してPublishします。
そのサブスクリプションのエンドポイントをアカウントBのLambda関数Bとして指定し、アカウントB側においてそのサブスクリプションの確認(Confirm)を行います。さて、同一アカウントにおいてこのような連携を行った際はリソースポリシーに特定の記述をする必要はないのですが、クロスアカウントでは設定を直接してあげる必要があります。
$ aws lambda add-permission \ --function-name Lambda関数B \ --statement-id SID(sns-x-accountなど) \ --action "lambda:InvokeFunction" \ --principal sns.amazonaws.com \ --source-arn arn:aws:sns:[regeon]:[アカウントAのID]:[トピック名]詳しくは、ClassMethodさんのクロスアカウントなLambdaをSNS TopicにSubscribeするがわかりやすいです。