20190524のAWSに関する記事は16件です。

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」をクリック
image.png

Option1をコピーしてTerminalにペースト
image.png

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の認証情報を検索する
image.png

2 対象の認証情報をダブルクリックする
3 git-credential-osxkeychainを削除する
image.png

4 gitコマンドを実行すると、keychainを使用するかのダイアログがでるのでDenyをクリックする
image.png
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

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

YYPHP#85「皆さんPHPで高負荷の処理はどうしてる?」「サーバレスアーキテクチャについて」「gRPCってみんな使ってる?」「ネームスペースが無いプロジェクトにComposerを組み込むには」

これは2019年5月24日に開催したPHPerイベントYYPHP#85のイベントレポートです。

YYPHPは一言で「PHPerの部室」です。PHPについて、雑に、ゆるく、ワイワイ話し合う集いです。毎回お題を決めずに雑談を出発点にいろいろなことを突発的にやります。集まった人でコードリーディングをすることもあれば、一緒に開発ツールを触ってみたり、フレームワークについての情報交換をすることもあります。開催はほぼ毎週、高田馬場にて。

今回の配信動画

過去回の配信動画

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が他の言語を学ぶ

Laravelの権限管理の機能について

ぬーぺっとさんの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のフレームワークについて聞きたい

YYPHPは毎週やってます

PHPについてワイワイ話したい方は、YYPHPのイベント情報をチェックしてみて下さい。

以上、YYPHPのレポートでした。次回もワイワイやっていきたいと思います! では、また来週!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS認定Big Data勉強記 - 8.3: Kinesis Data Analytics

こんにちは、えいりんぐーです

今回は Amazon Kinesis Data Analytics についてまとめます。

参考資料

全般

  • ストリーミングデータの分析、実用的なインサイトの取得、ビジネスやお客様のニーズへのリアルタイムでの対応を行えるサービス
  • 一般的な処理関数のための組み込みのテンプレートや演算子を利用し、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 アルゴリズムを使って異常検出を実行できる。詳細はこちらの記事を参考にする。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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 のドキュメント

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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枚目の画像で以下からの保護のタブが空白になっています。
その他のインスタンスは削除保護が有効になっているため、コンテナの稼働中に削除されることはありません。
clusterautoscaling5.png
clusterautoscaling4.png

方法

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.conf

userdata内で、
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を調整しようと思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[WIP] Amazon DynamoDBをおさえる

DynamoDB.png

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

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[WIP] Amazon DynamoDB をおさえる

DynamoDB.png

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

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Rocket.Chatを1行でAWS上に導入

Rocket.Chatとは

Lightblue Technologyではこれまで社内のコミュニケーションツールとしてslackを使ってきました。
しかし、インターン生が増えたため、無料枠で使うには限界が来ていました。そこで、有料化を考えたのですが、1人あたり850円/月かかるんです。インターン生が多く在籍するLightblue Technologyでは「1人あたり」という課金体系が使いづらいです。

そこで、RocketChatの導入を決めました。RocketChatは、slackのようなチャット機能を有するOSSです。
RocketChatはdockerイメージが提供され、また、様々なPaaSに対応しているため、比較的容易に導入することができます。
スクリーンショット 2019-05-24 15.05.11.png

導入手順

  1. EC2立ち上げ
  2. Rocket.Chatインストール
  3. 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 Deploymentsdocker 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の初期設定のベストプラクティスを書きたいと思います。
初期設定では招待メールが送れなかったり、新規登録が自由にできたりするので。。。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS のクラウドサービス活用資料集が更新されたのでまとめてみた

AWSの資料を調べていたら公式の活用資料集のリンクがアップデートされて見やすくなっていたので備忘録的に紹介したいと思います。

AWS クラウドサービス活用資料集

AWSが開催したBlack Belt OnlineSeminarやWebinar、初心者向けの資料から最新のAWSUpdateまで確認できるのがAWS活用資料集です。

トップを開くと下記のような画面に遷移します。

top.png

主な掲載内容は
・Webinar申し込み
・初心者向け資料
・業種・ソリューション別資料
・サービス別資料
・AWS Service Update
・JAWS-UG 発表資料

上記の様になっています。※2019年5月現在

Webinar申し込みとサービス別資料はそれぞれ別リンクにアクセスします。
サービス別資料は特に見失いやすい(私だけ?)なのでリンクを残しておきます。

活用資料集のページをスクロールしていくと申込みとは別にWebinar 資料や、

webinar.png

JAWS-UGの発表資料も掲載されています(AWS発表分のみ)。
JAWS.png

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月現在のもので更なるアップデートもされると思いますが、最新の資料置き場やリンクを探す手間が少しでも省けたら幸いです。
もしここもおすすめだよ、というのがあればぜひ追記したいと思いますのでご意見お待ちしております。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[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/5944

AlibabaCloudは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-GCP

AlibabaCloudでどんなサービスがあるか

閑話休題、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 です。
color.png

他クラウドサービスとの比較について

※ 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.png 云服务器 ECS クラウドサーバ Elastic Compute Service Elastic Compute Service EC2 Virtual Machines Compute Engine
ebm.png 弹性裸金属服务器(神龙) Bare Metalクラウドサーバ ECS Bare Metal Instance ECS Bare Metal Instance EC2 Bare Metal Virtual Machines Compute Engine
swas.png 轻量应用服务器 軽量アプリケーションサーバー Simple Application Server
gpu.png GPU 云服务器 GPUクラウドサーバ Elastic GPU Service Elastic GPU Service EC2 Elastic GPUs Virtual Machines Compute Engine
fpga.png FPGA 云服务器 FPGAクラウドサーバ AWS EC2 FPGA Virtual Machines Compute Engine
ddh.png 专有宿主机 専有ホスト Dedicated Host Dedicated Host
scc.png 超级计算集群 スーパーコンピューティングクラスター(SCC) Super Computing Cluster Super Computing Cluster
ehpc.png 弹性高性能计算 E-HPC 高性能コンピューティング(E-HPC) E-HPC E-HPC High Performance Computing (HPC)
batchcompute.png 批量计算 バッチ計算 Batch Compute
ContainerServie.png 容器服务 コンテナオーケストレータ Container Service Container Service Elastic Container Registry Container Registry Google Container Registry
ContainerServie.png 容器服务 Kubernetes 版 コンテナサービスKubernetes版 Container Service for Kubernetes Container Service for Kubenetes Elastic Container Service for Kubernetes Kubernetes Service Google Kubernetes Engine
ContainerServie.png 弹性容器实例 ECI コンテナレジストリ Elastic Container Instance Elastic Container Registry Container Registry Container Registry
acr.png 容器镜像服务 コンテナミラーリングサービス Container Registry
ess.png 弹性伸缩 Auto Scaling Auto Scaling Auto Scaling EC2 Auto Scaling Virtual Machine Scale Sets Autoscaling
ros.png 资源编排 リソースの作成と管理サービス Resource Orchestration Service Resource Orchestration Service AWS CloudFormation Resource Manager Cloud Deployment Manager
fc.png 函数计算 Function as a Service Function Compute Function Compute AWS Lambda Functions Cloud Functions
gws.png 图形工作站 GPUワークステーション

ストレージ(存储服务)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
oss.png 对象存储 OSS オブジェクトストレージ Object Storage Service Object Storage Service S3 Blob Storage Cloud Storage
disk.png 块存储 ブロックストレージ EBS Managed Disk 永続ディスク
nas.png 文件存储 NAS ファイルストレージNAS Network Attached Storage Network Attached Storage Elastic File System (EFS) File Storage Cloud Filestore
nas.png 文件存储 CPFS クラウドパラレルファイルストレージ
alidfs.png 文件存储 HDFS HDFSファイルストレージ
cloudphoto.png 智能云相册 クラウドフォトアルバム
imm.png 智能媒体管理 インテリジェントメディア管理
hcs_sgw.png 云存储网关 クラウドストレージゲートウェイ AWS Storage Gateway StorSimple
hgw.png 混合云存储阵列 ハイブリッドクラウドストレージアレイ Hybrid Cloud Storage Array

CDN配信(CDN与边缘)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
cdn.png CDN Content Delivery Network Alibaba Cloud CDN Alibaba Cloud CDN CloudFront CDN Cloud CDN
SCDN.png 安全加速 SCDN Secure Content Delivery Network
dcdn.png 全站加速 DCDN Dynamic Route for CDN Dynamic Route for CDN Dynamic route for CDN
PCDN.png PCDN P2P CDN
ens.png 边缘节点服务 ENS Edge Node Service

データベース(数据库)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
POLARDB.png 云数据库 POLARDB MySQL、Oracle、PostgreSQLの互換性があるクラウドデータベース Aurora Cloud Spanner
rds_mysql.png 云数据库 RDS MySQL 版 MySQL ApsaraDB RDS for MySQL ApsaraDB for RDS(MySQL) RDS for MySQL/Aurora Database for MySQL Cloud SQL for MySQL
rds_mariadb.png 云数据库 RDS MariaDB TX 版 MariaDB ApsaraDB for MariaDB TX RDS for MariaDB Database for MariaDB
rds_sqlserver.png 云数据库 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.png 云数据库 RDS PostgreSQL 版 PostgreSQL ApsaraDB RDS for PostgreSQL ApsaraDB for RDS(PostgreSQL) RDS for PostgreSQL/Aurora Database for PostgreSQL Cloud SQL for PostgreSQL
rds_ppas.png 云数据库 RDS PPAS 版 Oracle ApsaraDB RDS for PPAS ApsaraDB for RDS(PPAS) RDS for Oracle
drds.png 分布式关系型数据库服务 DRDS 分散リレーショナルデータベースサービス Distributed Relational Database Service Aurora Cloud Spanner
redis.png 云数据库 Redis 版 Redis ApsaraDB for Redis ApsaraDB for Redis ElastiCache (Redis) Cache for Redis Cloud Memorystore
mongodb.png 云数据库 MongoDB 版 MongoDB ApsaraDB for MongoDB ApsaraDB for MongoDB DocumentDB (with MongoDB compatibility) Cosmos DB(API for MongoDB)
hitsdb.png TSDB 时序时空数据库 時系列データベース High-Performance Time Series Database Timestream Time Series Insights
hbase.png 云数据库 HBase 版 Apache Hbase Cloud Bigtable
iconなし 图数据库 GDB グラフデータベース Neptune Cosmos DB(API for Gremlin)
memcache.png 云数据库 Memcache 版 Memcache ApsaraDB for Memcache ApsaraDB for Memcache ElastiCache (Memcached) Cloud Memorystore
ots.png 表格存储 TableStore TableStore(NoSQL) Table Store Table Store DynamoDB Cosmos DB Cloud Datastore
ads-data.png 分析型数据库 MySQL版 MySQLをベースにした分析データベース
HybridDB_for_Postgre.png 分析型数据库 PostgreSQL版 DWH分析データベース HybridDB for PostgreSQL AnalyticDB for PostgreSQL Redshift SQL Data Warehouse Google BigQuery
HybridDB_for_MySQL.png HybridDB for MySQL HybridDB for MySQL
data.png Data Lake Analytics データレイクアナリティクス Data Lake Analytics Athena Data Lake Analytics Google BigQuery
dms.png 数据管理 DMS データ管理サービス
hdm.png 混合云数据库管理 HDM ハイブリッドクラウドデータベース管理サービス

クラウド通信サービス(云通信)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
dysms.png 短信服务 ショートメッセージサービス
dyvms.png 语音服务 音声メッセージサービス
dycdp.png 流量服务 移動体通信データパッケージ
dyiot.png 物联网无线连接服务 IoT無線通信接続サービス
iconなし 号码隐私保护 モバイルプライバシー保護サービス
dypns.png 号码认证服务 番号認証サービス

ネットワーク(网络)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
iconなし 云通信网络加速 クラウド通信ネットワーク高速化サービス
vpc.png 专有网络 VPC 専用ネットワークVPC Virtual Private Cloud Virtual Private Cloud VPC Virtual Network Cloud VPN
pvtz.png 云解析 PrivateZone VPCのDNSサービス Alibaba Cloud PrivateZone
slb.png 负载均衡 SLB 負荷分散ロードパランサ Server Load Balancer Server Load Balancer AWS Global Accelerator Traffic Manager Cloud Load Balancing
nat.png NAT 网关 NATゲートウェイ NAT Gateway NAT Gateway Internet Gateway、NAT Instance、NAT Gateway
eip.png 弹性公网 IP パブリックIPリソース Elastic IP Elastic IP Elastic IP Addresses
iconなし IPv6 转换服务 IPv6変換サービス
ipv6gateway.png IPv6 网关 IPv6ゲートウェイ
alidnsgtm.png 全局流量管理 Global Traffic Manager
iconなし 共享带宽 帯域幅共有サービス
flowbag.png 共享流量包 クラウド間のデータ転送 Data Transfer Plan Cloud Storage Transfer Service
cen.png 云企业网 Cloud Enterprise Network Cloud Enterprise Network Cloud Enterprise Network
VPN.png VPN 网关 VPNゲートウェイ VPN Gateway VPN Gateway VPN Gateway
smartag.png 智能接入网关(邀测中) オンプレミスからのデータ転送 Smart Access Gateway AWS DataSync
expressconnect.png 高速通道 専用線接続 Express Connect Express Connect AWS Direct Connect ExpressRoute Dedicated Interconnect

基本的なセキュリティ(基础安全)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
ddospro.png DDoS高防IP DDoS 対策 (DDoS Pro) Anti-DDoS Pro
ddos.png DDoS基础防护服务 DDoS 対策 (DDoS Basic) Anti-DDoS Basic Anti-DDoS Basic AWS Shield Standard DDoS Protection
ddosdip.png DDoS高防(国际) DDoS 対策 (Premium) Anti-DDoS Premium AWS Shield Advanced DDoS Protection Cloud Armor
ddosbgp.png 新BGP高防IP DDoS 対策 (DDoS BGP)
waf.png Web应用防火墙 Webアプリケーションファイアウォール Web Application Firewall Web Application Firewall AWS WAF Application Gateway Cloud Armor
sas.png 云安全中心(态势感知) クラウドセキュリティセンター Threat Detection Service
shc.png 云盾混合云 クラウド、IDC、ハイブリッドクラウドでのセキュリティ保護サービス
aegis.png 云安全中心(安骑士) ホストセキュリティソフトウェア Server Guard
cfw.png 云防火墙 クラウドファイアウォール AWS Firewall Manager Firewall
bastionhost.png 堡垒机 セキュリティ監査管理プラットフォーム
avds.png 漏洞扫描 脆弱性スキャンサービス
avds.png 网站威胁扫描系统 Webサイト脅威スキャンサービス Website Threat Inspector GuardDuty Security Center Cloud Security Command Center

アイデンティティ管理(身份管理)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
ram.png 访问控制 アカウント権限管理 Resource Access Management Resource Access Management AWS Identity and Access Management Active Directory Cloud IAM

データセキュリティ(数据安全)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
cas.png SSL 证书 SSL/TLS証明書管理サービス SSL Certificates Service SSL Certificates Service AWS Certificate Manager App Service Certificates Google-managed SSL certificates
dbaudit.png 数据库审计 データベース監査サービス
hsm.png 加密服务 暗号化サービス
iconなし 敏感数据保护 機密データ保護サービス AWS Secrets Manager Key Vault

ビジネスセキュリティ(业务安全)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
gameshield.png 游戏盾 ゲームシールド GameShield
lvwang.png 内容安全 コンテンツセキュリティ Content Moderation
saf.png 风险识别 リスク識別と特定サービス
cloudauth.png 实人认证 人物識別・認証サービス
antibot.png 爬虫风险管理 Webクローラーやbotから防御するサービス Anti-Bot Service

セキュリティサービス(安全服务)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
sos.png 安全管家 セキュリティテクノロジおよびコンサルティングサービス Managed Security service
iconなし 渗透测试 侵入テスト
xianzhi.png 安全众测 セキュリティテスト 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
odps-data.png MaxCompute MaxCompute MaxCompute MaxCompute Redshift SQL Data Warehouse BigQuery
emr.png E-MapReduce E-MapReduce、Hadoopクラスタの展開 E-MapReduce E-Mapreduce EMR HDInsight Cloud Datalab, Cloud Dataproc
sc-data.png 实时计算 Realtime Compute(元はApache Flink) Realtime Compute Realtime Compute

データの可視化(数据可视化)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
datav-data.png DataV数据可视化 DataV、データの可視化

ビッグデータの検索と分析(大数据搜索与分析)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
graphanalytics.png 开放搜索 分散検索エンジンプラットフォーム CloudSearch Search
sls.png 日志服务 各種ログの一元管理 Log Service Log Service Kinesis, SQS Event Hubs, Stream Analytics Cloud Dataflow, Cloud Pub/Sub
elasticsearch.png Elasticsearch ElasticSearch Elasticsearch Elasticsearch Elasticserach Service
graphanalytics-data.png 关系网络分析 リレーショナルネットワーク分析
porana-data.png 画像分析 画像分析サービス
prophet-data.png 公众趋势分析 トレンド分析サービス
bi-data.png Quick BI BIツール Quick BI Quick BI QuickSight Power BI Data Studio

データ開発(数据开发)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
dide.png DataWorks データの可視化 DataWorks DataWorks
dataphin.png Dataphin データ構築と管理サービス Dataphin
datahub-data.png 阿里云DataHub ストリーム処理 Kinesis, SQS Event Hubs, Stream Analytics Cloud Dataflow, Cloud Pub/Sub
cdp-data.png 数据集成 データ統合 Data Integration Data Integration

データのレコメンデーション(数据开发)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
eprofile-data.png 企业图谱 コーポレートマップ
iconなし 智能推荐 スマートレコメンデーション

インテリジェントな音声対話(智能语音交互)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
nlsfilebag.png 录音文件识别 録音ファイルの認識(Speech-to-Text) Transcribe Speech Services Cloud Speech-to-Text
nlsasrbag.png 实时语音转写 リアルタイム音声転写
nlsshortasrbag.png 一句话识别 一文認識(Text-to-Speech) Polly Speech Services Cloud Text-to-Speech
nlsttsbag.png 语音合成 音声合成
nls.png 语音合成声音定制 音声データの合成およびカスタマイズ
nlsasrcustommodel.png 语音模型自学习工具 音声モデル自己学習ツール

画像検索(图像搜索)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
imagesearch.png 图像搜索 画像検索 Image Search Image Search

自然言語処理(自然语言处理)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
nlpws.png 多语言分词 テキスト上の多言語の単語・分詞の分割サービス Comprehend Language Understanding Cloud Natural Language
nlppos.png 词性标注 品詞タグ付けの一部
nlpner.png 命名实体 名前付きエンティティ
nlpsa.png 情感分析 感情分析
nlpke.png 中心词提取 中心語抽出
nlpke.png 智能文本分类 インテリジェントテキスト分類
nlpke.png 文本信息抽取 テキスト情報抽出
nlpra.png 商品评价解析 製品レビューの評価分析

印刷テキスト認識(印刷文字识别)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
ocr_card.png 通用型卡证类 IDカード、銀行カード、パスポートなどカード識別サービス
ocr_card.png 汽车相关识别 免許証・ナンバープレートなど自動車関連データの識別サービス
ocr_card.png 行业票据识别 請求書・領収書の識別サービス
ocr_card.png 资产类识别 資産証明書など各証明書識別サービス
ocr_card.png 通用文字识别 画像データのテキスト認識
ocr_card.png 行业文档类识别 業界文書データのテキスト認識サービス
ocr_card.png 视频类文字识别 ビデオデータ内の字幕および文字テキスト認識サービス
ocr_card.png 自定义模板识别 ORCカスタムテンプレートを作成し認識するサービス

顔認識(人脸识别)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
face.png 人脸识别 顔認識

機械翻訳(机器翻译)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
alimt.png 机器翻译 機械翻訳 Translate Translator Text Cloud Translation

画像認識(图像识别)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
Image.png 图像识别 画像認識 Rekognition Computer Vision Cloud Vision

コンテンツセキュリティ(内容安全)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
Image.png 图片鉴黄 ポルノコンテンツ認識
Image.png 图片涉政暴恐识别 写真データからテロ画像や政治的問題画像識別サービス
Image.png 图片Logo商标检测 画像からロゴ検出サービス
Image.png 图片垃圾广告识别 画像スパム認識
Image.png 图片不良场景识别 薬物使用、ギャンブルなどの不適切なコンテンツ認識サービス
Image.png 图片风险人物识别 画像から人物特定リスク識別サービス
Image.png 视频风险内容识别 ビデオリスクのコンテンツ認識
Image.png 文本反垃圾识别 テキストリスクのコンテンツ認識
Image.png 语音垃圾识别 音声データのリスク識別サービス

機械学習プラットフォーム(机器学习平台)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
learn.png 机器学习平台 PAI 機械学習プラットフォームPAI Machine Learning Platform For AI SageMaker Machine Learning Service Cloud ML Engine
iconなし 人工智能众包 AIによるクラウドソーシング

ドメイン名とウェブサイト(域名与网站)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
wanwang.png 域名注册 ドメイン登録サービス
ews.png 域名交易 ドメイン名取引サービス
jianzhan.png 网站建设 ウェブサイト構築サポートサービス
hosting.png 云虚拟主机 クラウド仮想ホスト Web Hosting
chinaglobal_promotion_virtual2017.png 海外云虚拟主机 国外Webホスティング設置サービス
domain_dns.png 云解析 DNS DNS Domains Alibaba Cloud DNS Route 53 DNS Cloud DNS
hosting_elastic.png 弹性Web托管 柔軟なWebホスティング Elastic Beanstalk App Service App Engine
iconなし 备案 ドメイン登録(IPC)のためのICP代替申請サービス

知的財産サービス(知识产权服务)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
trademark.png 商标注册 商標登録サービス
trademark.png 商标交易 商標登録されてるものを購入するサービス

申請サービス(应用服务)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
iconなし 机器人流程自动化 RPA RPA
clouddesktop.png 云桌面 クラウドデスクトップ
cloudap.png 云AP クラウドAP
apigatewayapi.png API 网关 API管理 API Gateway API Gateway API Gateway API Management Cloud Endpoints/Apigee
mail.png 企业邮箱 ビジネスメールボックス Alibaba Mail
directmail.png 邮件推送 メール送受信サービス DirectMail Simple Email Service

インテリジェントデザインサービス(智能设计服务)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
iconなし 鹿班 画像自動生成サービス

モバイルクラウド(移动云)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
cps.png 移动推送 モバイルアプリの通知とメッセージングサービス
hotfix.png 移动热修复 モバイルサービスのhot-fixサービス
mobiletesting.png 移动测试 モバイルテストサービス AWS Device Farm Cloud Test Lab
mas.png 移动数据分析 モバイルアプリデータ統計サービス
feedback.png 移动用户反馈 モバイルアプリからのフィードバックサービス
iconなし HTTPDNS モバイル開発者向けのドメイン名解決サービス

ビデオクラウド(视频云)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
rtc.png 音视频通信 RTC オーディオとビデオ通信RTC
live.png 视频直播 ライブビデオ ApsaraVideo Live ApsaraVideo Live AWS Elemental MediaLive Media Services - Live and On-demand Streaming
vs.png 视频监控 ビデオ監視サービス
vod.png 视频点播 オンデマンドオーディオ/ビデオストリーミングサービス ApsaraVideo VOD AWS Elemental MediaPackage Media Services
mts.png 媒体处理 メディア変換 ApsaraVideo for Media Processing ApsaraVideo for Media Processing Elastic Transcoder/AWS Elemental MediaConvert Media Services - Encoding (Anvato)
mtscensor.png 视频审核 ビデオ検閲サービス。ポルノや政治など禁止事項の特定をメイン
mtsdna.png 视频DNA ビデオ監査サービス。映像データから重複排除をメイン
mtsproduce.png 视频智能生产 ビデオ制作サービス。映像を識別しリアルタイムでハイライトを生成
mtsmultimod.png 视频多模态内容理解 ビデオコンテンツ識別サービス。視覚情報、テキスト、音声および動作から家庭用品、自動車、動物、植物など1000以上のカテゴリを特定
mtscover.png 智能封面 ビデオデータやコンテンツから最適なビデオカバー提供
ivision.png 智能视觉 ビデオインテリジェント。画像分類、画像検出、ビデオ分類、ビデオ認識、ライブ識別

プライベートクラウド(专有云)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
ApsaraStack.png Apsara Stack オンプレミスによるAlibabaCloudサービス Apsara Stack AWS Outposts Stack Cloud Platform Service

メッセージキューMQ(消息队列 MQ)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
mq.png 消息队列 RocketMQ 分散メッセージミドルウェア Simple Queue Service Queue Storage
amqp.png 消息队列 AMQP RabbitMQによるメッセージキュー
onsmqtt.png 微消息队列 for IoT IoT向けマイクロメッセージキュー
alikafka.png 消息队列 Kafka kafkaによるメッセージキュー Managed Streaming for Kafka
mns.png 消息服务 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.png 企业级分布式应用服务 EDAS エンタープライズ分散アプリケーションサービスEDAS Enterprise Distributed Application Service
acm.png 应用配置管理 ACM アプリケーション構成管理ACM Application Configuration Management
gts.png 全局事务服务 GTS グローバルトランザクションサービス

インテリジェントカスタマーサービス(智能客服)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
ccc.png 云呼叫中心 クラウドコールセンター
beebot.png 云小蜜 NLPベースの会話ロボットサービス Lex Bot Service (Dialogflow)
sca.png 智能对话分析 知的対話分析
ccs.png 云客服 クラウドカスタマーサービス

ブロックチェーン(区块链)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
baas.png 区块链服务 ブロックチェーンサービス Blockchain as a Service Blockchain as a Service Managed Blockchain、Quantum Ledger Database Blockchain Service、Blockchain Workbench

SaaSアクセラレータ(SaaS加速器)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
yida.png 宜搭 GUIベース開発サービス

モノのインターネットプラットフォーム(物联网平台)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
iot.png 物联网设备接入 IoTデバイスへのアクセス
livinglink.png 生活物联网平台 Life Internet of Thingsプラットフォーム
iot.png 物联网设备管理 IoTデバイス管理
iot.png 物联网数据分析 モノのインターネットデータ分析 AWS IoT Analytics Stream Analytics/Time Series Insights
iconなし 物联网一站式开发 IoT 開発Studio AWS IoT Things Graph IoT Central

低電力WAN(低功耗广域网)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
linkwan.png 物联网络管理平台 IoTネットワーク管理プラットフォーム
dyiot.png 物联网无线连接服务 IoT無線通信接続サービス

エッジサービス(边缘服务)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
iot.png 物联网边缘计算 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なし 魔笔 手書きデータの認識サービス(マジックペン)
cd.png 云投屏 クラウドプロジェクションスクリーン

関連クラウド製品(相关云产品)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
iovcc.png 智联车管理云平台 Zhilian自動車メーカー向けの自動車管理クラウドプラットフォーム

エコロジー(生态)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
iconなし 物联网市场 IoTアプリケーション購入市場
iconなし ICA物联网标准联盟 IoTConnectivityAlliance、IoTアライアンス
iconなし 物联网测试认证服务 IoTテストおよび認証サービス

バックアップ、移行、および災害復旧(备份、迁移与容灾)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
hbr.png 混合云备份服务 ハイブリッドクラウドのバックアップサービス
hdr.png 混合云容灾服务 ハイブリットクラウドの災害復旧サービス
dbs.png 数据库备份 DBS データベースバックアップ
dts.png 数据传输 DTS データ転送サービス AWS Database Migration Service, AWS Schema Conversion Tool Database Migration Service
adam.png 数据库和应用迁移 ADAM データベースとアプリケーション移植サービス
mgw.png 闪电立方 オンラインとオフラインのデータ転送サービス(Lightning Cube)
iconなし 迁移工具 Qianyun移植ツール

開発者プラットフォーム(开发者平台)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
yunxiao.png 云效 DevOpsサービス
iconなし 开发者中心 デベロッパーセンター
iot.png 物联网开发者平台 IoTプラットフォーム

APIとツール(API与工具)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
iconなし Cloud Toolkit クラウド開発ツールキット AWS CodeStar DevOps
openapiexplorer.png 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)
cloudshell.png 云命令行 Cloud Shell Cloud Shell AWS Systems Manager Session Manager Cloud Shell Cloud Shell

プロジェクトコラボレーション(项目协作)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
iconなし 项目协作 クラウドエンタープライズコラボレーション

コードホスティング、倉庫(代码托管、仓库)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
codepipeline.png 代码托管 Gitライブラリホスティングサービス AWS CodeCommit Repos Cloud Source Repositories
iconなし Maven公共仓库 Maven Public Warehouse
iconなし 制品仓库 Maven製品管理サービス

統合配送(集成交付)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
iconなし 持续交付 継続的配信サービス
codepipeline.png CodePipline パイプライン AWS CodePipeline Pipelines Cloud Build

テスト(测试)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
pts.png 性能测试 PTS パフォーマンステストサービス
iconなし 测试平台 クラウドサービス上のテストプラットフォーム

開発と運用(开发与运维)

icon 中国サイト コメント 国際サイト 日本サイト AWS Azure GCP
arms.png 应用实时监控服务 アプリケーションリアルタイム監視サービス
cms.png 云监控 クラウドモニタリング CloudWatch Events Event Grid、Monitor Stackdriver Monitoring
iconなし 智能顾问 AlibabaCloudコンサルティングサービス
ahas.png 应用高可用服务 AHAS Application High Availability Service
node-js.png Node.js性能平台 Node.jsパフォーマンスプラットフォーム
xtrace.png 链路追踪 TracingAnalysis
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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_proxy169.254.169.254を設定しました。
169.254.169.254にアクセスすることで、EC2インスタンスはインスタンスメタデータを取得しているようでした。

subnet_idとsecurity_groupの設定

最初私はPackerの設定ファイルにsubnet_idsecurity_groupを設定していなかったのですが、そうするとPackerが自動的にそれらを設定し、それらがエラーを起こすことがあるようです。

具体的には、以下のようなエラーが出ました。

Build 'amazon-ebs' errored: Error launching source instance: InvalidParameter: Security group sg-something and subnet subnet-something belong to different networks.

subnet-idsecurity_groupが別のネットワークにある、と怒っています。これを避けるために、Packerの設定ファイルに同一ネットワーク上に存在する二者を設定しておきます。

ssh_usernameの設定

PackerでCentOSのイメージを作成する方法を調べると、ssh_usernameec2-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_usernamerootもしくはcentosにしたところ、正常に鍵が取得されるようになりました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【ハマり】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"

AccessDeniedが返ってくる。
image.png

(^ω))))))))^<なんで~っ

結論

パケットポリシーで明示的にPutObjectを禁止していると、事前署名Urlに対してのアクションも禁止されます。
されました。
この明示的禁止ポリシーを削除する事で無事アップロードに成功します。
image.png

デフォルトでも禁止なのですが、バケットポリシーの明示的禁止とデフォルトの禁止には違いがあるようです。
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/example-bucket-policies.html

明示的な拒否は、ACL やユーザーポリシーなどの他の方法を使用して examplebucket バケット内のオブジェクトに付与したすべてのアクセス許可よりも優先されます。

へ~…ふ~ん…そうなんすか…

以上です。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

WAF を使って hot-linking 対応

strempack の Tana です。

概要

動画や画像などを配信しているリンクなどがあると思いますが、外部サービスにリンクを貼られるなど、使われたくないケースがあるかと思います。サーバサイドでは nginx などで制御できますが、急激なスパイクやトラフィックなどを意識したくないので、CDN(CloudFront) できればなぁっと思ってたら、AWS WAF で制御することができることをつい最近知りました(汗)

AWF WAF
https://console.aws.amazon.com/waf/home

細かな IP制限、パラメータ制限、地域制限なども可能ですし、
対象リソースを CloudFront だけでなく、ALBAPI Gateway も連携対象にすることができます。

今回は直リンク(Hot-linking防止)ではアクセスできないようにし、s3のドメインからのみ許可してみます。

設定方法

Web ACLs から作成するとわかりにくいので、String and regex matching から作成します。

String and regex matching: 条件設定

どういう条件を対象にするかを設定します。
URLやパラメータ、Header など細かな条件を指定できます。
domain-check という名前で作成し、今回はHeaderのリファラーをチェックします。

String and regex matching.png

Rule

ルールを作成します。複数の条件を紐づけることができます。
domain-rule という名前で新規に作成、先ほど作成した条件の domain-check というのを紐付けます。

rule.png

Web ACLs 設定

domain-rule を紐付けし、今回事前に作成しておいた、CloudFrontを指定します。

web-acls.png

Edit ACLs

Edit ACLs にて、条件を指定します。
条件にマッチしたもののみ許可! という設定にしてます。
つまり、s3 経由でないとアクセスさせません。

edit-web-acl.png

直リンクでアクセスしてみる

404-error.png

期待通りに、アクセスできません。

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>

動画にアクセスすることができました。

s3-test_html.png

結論

WAFを使えば、UI上で簡単に登録し、制限をかけることができました。
もっと細かにルール・条件を作成すれば、より強固なものが提供できそうです。
リクエスト数によって課金されるようなので、必要なリソースのみ制限をかけるのが良さそうです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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つのステップでできちゃいます。

  1. Private Space 内の Heroku Postgresに Endpointを作成
  2. AWS VPC側に Endpoint Network Interfaceを作成
  3. それぞれの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-privatelink

2. 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を取得することができます。

5196-imported-1558542947-1546968690-Screen-Shot-2019-01-07-at-4.11.57-PM.png

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]をクリックしましょう。

5196-imported-1558542948-1547075343-Screen-Shot-2019-01-09-at-3.05.36-PM.png

ここで、適切な(テキトーな)セキュリティグループ名と詳細を入力して、[Create]ボタンをクリックします

1550854536-1547159779-Screen-Shot-2019-01-10-at-2.34.22-PM.png

次に、できあがったセキュリティグループを選択して、[Actions]から[Edit inbound rules]を実行します

1550854536-1547161352-Screen-Shot-2019-01-10-at-3.01.15-PM.png

接続元のIPアドレス(CIDR)を入力して、Port Range内に5432-5433と指定したら[Save rules]をクリックします。

1550854536-1547156500-Screen-Shot-2019-01-10-at-1.39.03-PM.png

2. endpointを作成する

VPCダッシュボードから[Endpoints]タブを選択して、[Create Endpoint]をクリックします。

5196-imported-1558542948-1547158556-Screen-Shot-2019-01-10-at-2.10.34-PM.png

Create Endpoint画面になったら、Find service by nameを選択して、Service Name項目へ、先程確認(コピー)した Service Nameを入力(ペースト)します。

次に、Verifyボタンをクリックして、利用可能なサブネットリストを確認します。

1558470081-Screen-Shot-2019-05-21-at-1.06.14-PM.png

[Security group]で、先ほど作成したセキュリティグループを指定して、[Create endpoint]ボタンをクリックします。

1558470122-Screen-Shot-2019-05-21-at-1.09.24-PM.png

endpointの作成して Availableになるまで、だいたい5分から10分程度かかります。

5196-imported-1558542948-1547169381-Screen-Shot-2019-01-10-at-5.15.21-PM.png

Amazon VPC endpointからHerokuへ接続する

Amazon VPC endpointが利用可能(Available)になったら、VPCがPrivate Space内のHeroku Postgresへ接続するためのURLを取得できるようになります。

まず、PrivateLink endpoint から、後半の17桁のEndpoint IDを取得します。また、このIDは大文字にして利用します。

もしEndpoint IDvpce-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インスタンスを指定しています。

5196-imported-1558542949-1547170100-Screen-Shot-2019-01-10-at-5.27.12-PM.png

5196-imported-1558542949-1547170154-Screen-Shot-2019-01-10-at-5.28.55-PM.png

インスタンスの詳細を設定するときに、VPCネットワークでは、先ほど作成したセキュリティグループを指定します。まちがいないことを確認できたら、Review and LaunchをクリックしてEC2インスタンスを起動します。

5196-imported-1558542949-1547170256-Screen-Shot-2019-01-10-at-5.30.39-PM.png

インスタンスのステータスが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-10

EC2インスタンスから、Heroku Postgresへ接続するには、次のコマンドを実行します。

psql postgres://user:password@vpc-endpoint-dns-name:5432/database

正常に接続できると、次の画面のようになります。

1550854537-1547172839-Screen-Shot-2019-01-10-at-6.08.25-PM.jpg

制限事項

  • 作成する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により接続できる場合には、この方式での接続を推奨します。


怪しい意訳があったら、とっととご連絡を。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS DeepRacerの仮想サーキットでランキング50位圏内に入るまでに得たノウハウを晒してみる

AWS DeepRacerで仮想サーキットのランキング上位を目指そうと試行錯誤していますが、なんとか50位圏内に入ることができました。(パチパチ-

なので、ここまでに得たノウハウを共有してみます。

以下の記事もよろしければご参考ください。

AWS DeepRacerを利用する際に覚えておいたほうがよいこと - Qiita
https://qiita.com/kai_kou/items/5ebf54ef41d38d16f24d

AWS DeepRacerで報酬関数の実装をあれこれ試してみた - Qiita
https://qiita.com/kai_kou/items/8a45c687baca8c9465f6

AWS 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とおなじで、グラフの表示期間が変更できます。

右肩上がりのままだからまだトレーニングしてもいいかなとか、
スクリーンショット 2019-05-14 17.55.35.png

横ばいで微妙だなぁとか
スクリーンショット 2019-05-14 13.01.04.png

ある時点から下がってきてるぞとか
スクリーンショット 2019-05-14 9.48.55.png

私もよくわかってなくて感覚で申し訳ありませんが、実装した報酬関数のままトレーニング継続するか、実装を見直すかなどの判断に報酬グラフを参考にしています。

モデルのクローンを活用する

公式ドキュメントにあるように、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/18440bea7aa0fc8aa17f

100%完走できるモデルにこだわらない

トレーニング完了後の試走で5周すればすべて完走できるモデルにしなくても(いまのところは)良いと思います。
LondonLoopだと2周連続で完走すればラップタイムが記録されるルールになっています。
なので、5周のうち2,3回完走できるようになったら仮想サーキットに挑むのもありです。

3周完走できたモデルをSubmitしたらうまい具合に2周連続で完走してくれてラップタイム記録されました。
スクリーンショット 2019-05-22 11.44.50.png

試走結果は変動する

トレーニング後に試走ができますが、必ずしも同じような完走率、タイムにはなりません。
際どい結果になった場合は試走しなおして確認するのもありです。

同じモデルで2回試走した結果。ブレます。
スクリーンショット 2019-05-22 11.44.50.png スクリーンショット 2019-05-22 11.44.50.png

モデル作成時に詳細項目を活用する

トレーニングを繰り返しているとどのモデルが何だったか忘れます。
詳細からアクション設定や報酬関数の実装は確認できますが、クローンしてトレーニングする場合、経緯を詳細にメモっておくと役に立ちます。
スクリーンショット 2019-05-14 12.11.08.png

仮想サーキットのレーサー名は変更できない

仮想サーキットへモデルをSubmitする際に初回のみレーサー名の入力ができます。
初回以降は変更不可で開催される全レースで共通のレーサー名になるので気をつけましょう。
スクリーンショット 2019-05-23 10.27.12.png

1度仮想サーキットにSubmitしたモデルは再Submitできない

5周のうち2,3回完走できるモデルを仮想サーキットにSubmitした場合、運次第で完走するしないが起こりえます。
なので、ラップタイムが記録される条件になるまで同じモデルをSubmitしたいところですが、できないみたいです。
(未確認ですが、)再度Submitしたモデルをクローンして5分くらいトレーニングすれば別モデルとみなされるかもしれません。

やっぱりコストが高い

仮想サーキットのLondonLoopで50位圏内に入るまでに費やしたコストはこちら。
スクリーンショット 2019-05-23 11.40.22.png
いやーきついっす。

最後に

みんなで(出せるところまでは)ノウハウを共有して、ランキング上位目指しましょう!!!

参考

AWS DeepRacerを利用する際に覚えておいたほうがよいこと - Qiita
https://qiita.com/kai_kou/items/5ebf54ef41d38d16f24d

AWS DeepRacerで報酬関数の実装をあれこれ試してみた - Qiita
https://qiita.com/kai_kou/items/8a45c687baca8c9465f6

AWS DeepRacer関連情報まとめ【随時更新】 - Qiita
https://qiita.com/kai_kou/items/5c02d0dca26a33dd8761

AWS 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/8925d170f030878d6582

PPO で学習させる際のベストプラクティス - Qiita
https://qiita.com/dora-gt/items/18440bea7aa0fc8aa17f

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Lambdaのリソースポリシーについて

AWS Lambdaのリソースポリシー

Lambdaの権限設定にはリソースポリシー・IAMポリシーの2つがあります。

リソースポリシーは、簡単に言えばLambdaを呼び出す側に対するパーミッションを与えます。
また、IAMポリシーはLambdaに対してリソースを呼び出し操作するためのパーミッションを与えるものです。

両者の違いや、AWS CLIを利用したポリシーの設定などに関してはClassMethodさんの「AWS LambdaのIAMポリシーとリソースポリシーを理解しよう」という記事が非常にわかりやすいです。

ちなみに、2019年5月23日現在のマネジメントコンソールでは、
スクリーンショット 2019-05-23 23.46.36.png
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するがわかりやすいです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む