どうも、セクションナイン の 吉田真吾(@yoshidashingo)です。
AWSの各種公式ブログで紹介される効果的なアーキテクチャにおいて、LambdaやAPI Gatewayを利用したサーバーレス構成が非常に多くなってきた印象です。はじめはとっつきにくいのが正直なところかと思いますが、スケーラビリティの管理やホストのメンテナンスなどから解放される効果は絶大です。少しずつ触ってみましょう。
- AWS公式
- 1. ECSタスクのためのIAMロールによってコンテナ利用アプリケーションをより安全にする
- 2. Amazon Inspector でセキュリティ脆弱性テストを拡大
- 3. Apache SparkとAmazon DSSTNEを使った、Amazon規模のレコメンデーション生成
- 4. AWS Marketplace が EU の独立系ソフトウェアベンダー (ISV) のサポートを開始
- 5. AWS CodePipeline に手動承認機能を追加
- 6. CloudiaJSを使いAWS LambdaとAPI Gatewayで5分でFacebook MessengerのチャットBotを作る
- 7. サーバーレスでプライベート用短縮URLサービスをつくる
- 8. RとLambda、API Gatewayを利用したゲノム解析
- 9. 特定のIAMロールからS3バケットへのアクセスを制限する方法
- 10. 地球観測衛星のビッグデータを一般利用(有料)できるSentinel Hub
- 11. 【開催報告】アドテクノロジー業界セミナー #AWSAdTechJP
- AWS関連
AWS公式
1. ECSタスクのためのIAMロールによってコンテナ利用アプリケーションをより安全にする
- ECSではコンテナからIAMロールの権限でAWSリソースへのリクエストができるので、環境変数にクレデンシャルを設定する必要がない。
- 新機能は、ECSタスク単位にIAMロールを指定できるので、ホストのロケーションに関係なく、また1つのクラスタ内に複数のECSタスクを実行し、それぞれが別のリソースへのアクセス権限が必要な場合もホストに依存しないタスク単位のIAMロールの指定が可能になった。その際、クラスタ内のホストにはAmazonEC2ContainerServiceforEC2RoleポリシーがあたったIAMロールがあたっている必要がある。
- 注意点としては、同一クラスタ内に複数のECSタスクを別IAMロールで同居は可能になったが、セキュリティグループは依然ホスト単位にかけるものなので、どのECSタスクが載っているかによって変更ができない点。
ECSタスクのためのIAMロールによってコンテナ利用アプリケーションをより安全にする | Amazon Web Services ブログ
2. Amazon Inspector でセキュリティ脆弱性テストを拡大
- Amazon Inspectorでチェックしたセキュリティ脆弱性の診断終了の通知をSNSトピックに発行し、それをトリガにAWS Lambdaを使って「OKじゃなかった場合だけEメールに通知する」サンプル。
- 簡単な実装だけどエラーハンドリングもそこそこ入ってるのでこのまま使えそうな内容。
Amazon Inspector でセキュリティ脆弱性テストを拡大 | Amazon Web Services ブログ
3. Apache SparkとAmazon DSSTNEを使った、Amazon規模のレコメンデーション生成
- AmazonがOSSで公開しているGPU上で動作するディープラーニング用エンジンDSSTNE(the Deep Scalable Sparse Tensor Neural Engine)は、実際にAmazonのECサイトやデバイスにおけるパーソナライズに活用されている
- 学習や予測データの作成に使うSparkはCPUで稼働し、ディープラーニングするDSSTNEはGPU上で稼働するため、CPU用インスタンスとGPU用インスタンスをハイブリッドでクラスタ管理するのは非常に難しい。
- Spark (CPU)のクラスタはAmazon EMR上で実行し、GPUのインスタンスはAmazon ECSで管理することにし、ECSへのタスクのトリガなどはEMR側で管理することで統合されたクラスタ管理ができるようになった。
4. AWS Marketplace が EU の独立系ソフトウェアベンダー (ISV) のサポートを開始
- 今までUS国内に住所と銀行口座があるパートナーに限られていたMarketplaceへの出品がEUにも拡大。
- 営業/回収の手間が不要なソフトウェア販売のプラットフォームとして、すでに日本から世界に(アメリカに会社を設立し)AMIMOTO AMIを販売して急伸しているDigitalCubeのような例もあるので、今後日本にも拡大するようであれば大歓迎したい。
AWS Marketplace が EU の独立系ソフトウェアベンダー (ISV) のサポートを開始 AWS Marketplace Update – Support for ISVs Based in the EU | AWS News Blog
5. AWS CodePipeline に手動承認機能を追加
- AWS CodePipelineの各ステージに手動承認が設定可能になり、レビュー&承認、リリース承認などができるようになった。
- 多くのAWS上のワークフローが「作業者の権限において実施するのみ」であるのに対し、この機能で「(事後承認ではない)統制管理が可能」になったことは非常に意義深いと感じる。特に統制といったあたりを気にする必要がある組織にとっては。
6. CloudiaJSを使いAWS LambdaとAPI Gatewayで5分でFacebook MessengerのチャットBotを作る
- ホントに簡単にデプロイまでできる
Create and Deploy a Chat Bot to AWS Lambda in Five Minutes | AWS Compute Blog
7. サーバーレスでプライベート用短縮URLサービスをつくる
- サービスのシングルページをS3(CloudFront)から配信し、S3にホストしたファイルのURLを短縮する時に、API Gateway経由でLambdaファンクションをコールし、HTTPリダイレクトのための短縮文字を生成し、S3のメタデータに設定する。
- CORS設定を避けるためにすべてのリクエストはCloudFrontで受けて配信するように設定する。
- 上記の設定ができるCloudFormationテンプレートが公開されている。
- 1月に1000件短縮して1000ユーザーから利用されても12セント(約12円)
Build a Serverless, Private URL Shortener | AWS Compute Blog
8. RとLambda、API Gatewayを利用したゲノム解析
- Station XではAmazon LinuxにR環境をセットアップしライブラリなどを整えてLambda用のパッケージを生成しデプロイし、同期リクエスト用にAPI Gatewayをセットアップし、遺伝の影響によるがん患者の生存率の計算に利用している。
Analyzing Genomics Data at Scale using R, AWS Lambda, and Amazon API Gateway | AWS Compute Blog
9. 特定のIAMロールからS3バケットへのアクセスを制限する方法
- (IAMロールとIAMユーザーにS3フルアクセスのポリシーがアタッチされている状況で)一方のS3バケットポリシーにIAMロールのみアクセス可能と記載すれば、一方のバケットのみIAMユーザーからのみアクセスが遮断できる。
- スイッチロールでクロスアカウントアクセスするロールユーザーとアカウントのIAMユーザーは混在している場合、バケットポリシーでユーザーIDを指定して拒否するのと同時に他のアカウントからアクセスすることになるロール名を許可指定する必要がある。
- ここらへん、実際に必要になる場面が結構多いですが大抵の人はハマるとこですので、原理は押さえておきましょう。
10. 地球観測衛星のビッグデータを一般利用(有料)できるSentinel Hub
- 地球観測衛星Sentinel-2は6ヶ月の試運転期間に200TBものデータ(250兆ピクセル)を生成したが、90%以上のデータが再利用されずにいる。
- このパブリックデータ・セットはS3上で公開されているが、効果的にアクセスするためにSentinel Hubというサービスを作り、必要な範囲で必要なデータのみをクエリに応じて描画できるようにした。
- これにより、たとえば特定範囲の最新の航空写真を「雲を取り除く画像処理をLambdaを使って実行して」、閲覧するということが可能
A Minimalistic Way to Tackle Big Data Produced by Earth Observation Satellites | AWS Public Sector Blog www.sentinel-hub.com
11. 【開催報告】アドテクノロジー業界セミナー #AWSAdTechJP
- アドテクは日々進化している。
- Amazonのミッションは「undifferentiated heavy lifting (差別化につながらない重労働)」の排除
- デファクトになりつつあるSparkと、Sparkで処理したデータをためてOLTP処理に利用したりできるDruidの紹介
- その他各社発表があって盛り上がった模様
undifferentiated heavy liftingの排除についてはこちらの記事も参考に
http://archive.oreilly.com/network/2006/12/20/web-20-bezos.html
http://www.cio.co.nz/article/466635/amazon_cto_stop_spending_money_undifferentiated_heavy_lifting_/www.cio.co.nz
www.slideshare.net
AWS関連
12. AmazonがCloud9を買収
- おそらくこれはサービスに統合してコードを書いたらすぐにデプロイできるようにするでしょうし、re:Inventあたりが楽しみですね。
13. チームによる継続運用を意識したAWS環境におけるTerraformの活用
- うちでも同等のTFによるチーム開発実践してたので分かりますがベストプラクティスに近いと思いますね。
- 書いていないところで言うとplanはうまくいってもapplyで失敗するときにどうするかとか、RDSのプロビジョニング時間の長さでTFがタイムアウトするのどうするとか、実態とtfstateがズレた場合に手書きで直すかどうするか、などでしょうか。