継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

ケース別 VPC ピアリングの実装の考慮点

タダです.

複数のサブシステムを設計,実装する時に VPC ピアリングを使って相互にネットワーク疎通可能にすることがあると思います.僕も VPC ピアリングを使ったネットワーク設計に関わってきました.VPC ピアリングは VPC 間の連携には欠かせない機能ですが,他の AWS サービスと組み合わせる時に注意すべきことがあると感じたので紹介したいと思います.

参考情報

VPC ピアリングの基本 docs.aws.amazon.com

サポートされてない VPC ピア接続設定 docs.aws.amazon.com

FAQ aws.amazon.com

20190313 AWS Black Belt Online Seminar Amazon VPC Basic

www.slideshare.net

他の AWS サービスと組み合わせる時の注意点

今回は,僕が業務で遭遇した VPC ピアリングを他の AWS サービスと組み合わせて使うときに感じた注意点をケース別に3点まとめます.

Case1. EFS をピアリング越しでマウントする場合

EFS を VPC ピアリング経由でマウントしたい要件があった場合,EFS のエンドポイントを DNS 名前解決ができなくなります.対策として Route53 のプライベートホストゾーンとリソースレコードセットを使って EFS マウントターゲット IPアドレスを定義する必要があります.

プライベートホストゾーンとして、「fs-xxxx.efs.ap-northeast-1.amazonaws.com」を定義し、A レコードとして EFS の IPアドレスを定義するような形です.

別の VPC で EFS マウントポイントに DNS 名前解決を使用することはできません。EFS ファイルシステムをマウントするには、対応する可用性ゾーンのマウントポイントの IP アドレスを使用します。また、DNS サービスとして Amazon Route 53 を使用できます。Route 53 で、プライベートホストゾーンとリソースレコードセットを作成して、別の VPC から EFS マウントターゲット IP アドレスを解決できます。

参考情報

docs.aws.amazon.com

Case2. Route 53 プライベートホストゾーンを 別アカウントのVPC ピアリング経由で利用する場合

Route 53 のプライベートホストゾーンを 別アカウントのVPC ピアリング経由で利用したい場合の設定は AWS マネジメントコンソールから直接行えません.というのもプライベートホストゾーンと関連づける VPC は同一アカウント内であれば Route 53 の管理コンソール上より参照可能なのですが別アカウントの VPC は参照できないため AWS CLIなどで設定が必要になります.

参考情報

docs.aws.amazon.com

docs.aws.amazon.com

この記事では AWS CLI の設定例を書きます.設定作業は2ステップで完了します.

1. Route 53 プライベートホストゾーンが存在するアカウントで create-vpc-association-authorizationを実行する

まず,別アカウントの VPC をプライベートホストゾーンに関連付けるためのリクエストを送信することを送信する許可を プライベートホストゾーンが存在するアカウントの権限でcreate-vpc-association-authorization実行します.

$ aws route53  create-vpc-association-authorization \
--hosted-zone-id <プライベートホストゾーンの ID> \
--vpc <別アカウントの VPC ID>

2. 別アカウントの VPC ピアリングが存在するアカウントで associate-vpc-with-hosted-zoneを実行する

次に別アカウントの権限で associate-vpc-with-hosted-zoneを実行します.

$ aws route53  associate-vpc-with-hosted-zone \
--hosted-zone-id <プライベートホストゾーンの ID> \
--vpc <別アカウントの VPC ID>

Case3. VPC ピアリング越しのエンドポイントを DNS 名前解決したい

RDS のエンドポイントなど AWS のマネージドサービスは DNS 名前解決を行なってアクセスする必要があります.その際は, VPC ピアリングのオプションで DNS 名前解決を有効化して対応します.

オプションを有効化したい VPC ピアリングを選択してチェックボックスを有効化して保存すれば DNS 名前解決オプションを有効化できます.簡単ですね! f:id:sadayoshi_tada:20190614083424p:plain f:id:sadayoshi_tada:20190614083535p:plain

参考情報

docs.aws.amazon.com

まとめ

業務で直面した VPC ピアリングの他の AWS サービスと組み合わせる時に注意すべきと感じたポイントを3点まとめました.

VPC ピアリングは大規模システムになればなるほど利用機会が増えるサービスのため,気に掛けるポイントは把握しておく必要があります.この記事で紹介しきれてない考慮点があればまたこの記事を更新かけていきたいと思います.

Amazon SageMaker の XGBoost フレームワークチュートリアルを試して感じたこと

タダです.

Python もくもく自習室 #20 に参加してきました.もくもくでは Amazon SageMaker(以下,SageMaker)でモデル開発とデプロイを実践しました. retty.connpass.com

フレームワークXGBoost を使うことにしました.今後 Kaggle にチャレンジしたいのですが, XGBoost はよく使われるフレームワークという情報を見つけたため使ってみました.参考にさせてもらったのはこちらのチュートリアルです.今回はチュートリアルを終えて SageMaker を使う際の AWS 観点で注意すべき点をまとめます.

www.codexa.net

SageMaker とは

SageMaker は AWS機械学習サービスの1つで機械学習のモデル開発,トレーニング,デプロイが SageMaker で完結できるものになっています.国内での利用事例も増えつつあると感じており,昨日もちょうど dely さんの SageMaker を活用した寄稿記事がリリースされてました.AWS機械学習をするなら中核となるサービスと言えます.

aws.amazon.com

XGBoost とは

XGBoost は決定木を使った勾配ブースティングのオープンソースフレームワークになります.勾配ブースティングはアンサンブル学習の一種で,教師あり学習アルゴリズムです.

docs.aws.amazon.com

利用したデータセット

今回使ったデータセットは「Bank Marketing Data Set (銀行マーケティング・データセット」を使いました.カルフォルニア大学では様々なオープンデータを公開しているようです.同様にオープンデータを活用したチュートリアルは書評記事を書いた「機械学習の炊いたん。」でも MXNet フレームワークを使ったチュートリアルが解説されているので気になる方は購入を検討してみてください.

archive.ics.uci.edu

関連記事

sadayoshi-tada.hatenablog.com

AWS 観点で注意すべき点

ノートブックインスタンス,モデル訓練用インスタンス,モデルのデプロイ用インスタンスが存在する

今回のチュートリアルを行って初めて知ったのですが,ノートブックインスタンスのみでモデル開発とデプロイが完結するかと勘違いしていました.実際は,モデルの訓練,デプロイしホスティングするインスタンスが異なります.課金もそれぞれの利用時間当たりの料金がかかってきますので利用する際は料金表を参照ください.

aws.amazon.com

チュートリアルでは,モデルの訓練時は「ml.m4.xlarge」でモデルのデプロイとホスティングを「ml.c4.xlarge」で実施しました.なお、今回活用したチュートリアルでの利用料金はおよそ3~4ドルほどとのことです.お試しの料金として問題ない範囲かと思います.

また参考情報としてドキュメントで推奨のインスタンスタイプも紹介されているので参考になると思います.

docs.aws.amazon.com

訓練データの出力先の S3 バケット名について

SageMaker で訓練データで使う S3 を利用します.S3 バケットをモデル開発を行う前に構築しますが,試しに利用する目的であればバケット名に「SageMaker」,「Sagemaker」,「sagemaker」の文言をつければ SageMaker がデータの出力先として認識してくれます.というのも SagaMaker のノートブックインスタンスに付与される IAM ロールで指定されているためです.そのためバケット名に特にこだわりがない場合は以下のいずれかの文言を活用すると良いでしょう.

IAM ポリシー抜粋
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::*SageMaker*",
                "arn:aws:s3:::*Sagemaker*",
                "arn:aws:s3:::*sagemaker*",
                "arn:aws:s3:::*aws-glue*"
            ]
        }

XGBoost 専用のコンテナイメージのエンドポイントについて

モデルの訓練を行う際に ECR の所定のコンテナイメージを指定します.エンドポイントが既にあるのですが下記のように利用しています.アルゴリズムごとに ECR コンテナイメージが用意されているため利用用途に応じて選択ください.

※チュートリアルのコードを抜粋
containers = {'us-west-2': '433757028032.dkr.ecr.us-west-2.amazonaws.com/xgboost:latest',
              'us-east-1': '811284229777.dkr.ecr.us-east-1.amazonaws.com/xgboost:latest',
              'us-east-2': '825641698319.dkr.ecr.us-east-2.amazonaws.com/xgboost:latest',
              'eu-west-1': '685385470294.dkr.ecr.eu-west-1.amazonaws.com/xgboost:latest',
             'ap-northeast-1': '501404015308.dkr.ecr.ap-northeast-1.amazonaws.com/xgboost:latest'}

参考情報

docs.aws.amazon.com

まとめ

今回は SageMaker を使ってモデル開発〜モデルのホスティングまで行う XGBoostチュートリアルを使って感じた SageMaker 利用時のAWS 観点で注意すべき点をまとめました.今回のチュートリアルで使ったのは S3,ECR でしたが他にも関連できるサービスはあるためこれから色々なサービスと組み合わせて使っていければと思います.

もくもくで扱えなかったもの

もくもく会で扱えなかったのですがネットで盛り上がっているディープラーニング入門 Chainer チュートリアルを今度やってみたい.

tutorials.chainer.org

AWS CDK CLI のバージョンアップを行う方法

タダです.

AWS CDK のバージョン0.33.0がリリースされました.

github.com

リリース情報

Bug Fixes

  • core: Fn.cidr should return a list and not a string (#2678) (9d2ea2a), closes #2671
  • cli: fix ts-node usage on Windows (#2660) (5fe0af5)
  • cli: make cdk docs open the new API reference (#2633) (6450758)
  • cli: correctly pass build args to docker build (#2634) (9c58d6f)
  • core: hide dependencyRoots from public API (#2668) (2ba5ad2), closes #2348
  • autoscaling: move lifecycle hook targets to their own module (#2628) (b282132), closes #2447
  • codepipeline: no longer allow providing an index when adding a Stage to a Pipeline. (#2624) (ce39b12)
  • codepipeline-actions: correctly serialize the userParameters passed to the Lambda invoke Action. (#2537) (ceaf54a)
  • cx-api: improve compatibility messages for cli <=> app (#2676) (38a9894)
  • ecs: move high level ECS constructs into aws-ecs-patterns (#2623) (f901313)
  • logs: move log destinations into 'aws-logs-destinations' (#2655) (01601c2), closes #2444
  • s3: move notification destinations into their own module (#2659) (185951c), closes #2445

Features

  • cli: decouple "synth" and "deploy" through cloud assemblies (#2636) (c52bcfc), closes #1893 #2093 #1954 #2310 #2073 #1245 #341 #956 #233 #2016
  • acm: allow specifying region for validated certificates (#2626) (1a7d4db)
  • apigateway: support for UsagePlan, ApiKey, UsagePlanKey (#2564) (203f114), closes #723
  • autoscaling: allow setting spotPrice (#2571) (d640055), closes #2208
  • cfn: update CloudFormation spec to v3.3.0 (#2669) (0f553ee)
  • cli: disable noUnusedLocals and noUnusedParameters from typescript templates (#2654) (b061826)
  • cloudformation: aws-api custom resource (#1850) (9a48b66)
  • cloudwatch: support all Y-Axis properties (#2406) (8904c3e), closes #2385

BREAKING CHANGES

  • logs: using a Lambda or Kinesis Stream as CloudWatch log subscription destination now requires an integration object from the @aws-cdk/aws-logs-destinations package.
  • codepipeline-actions: removed the addPutJobResultPolicy property when creating LambdaInvokeAction.
  • cli: --interactive has been removed
  • cli: --numbered has been removed
  • cli: --staging is now a boolean flag that indicates whether assets should be copied to the --output directory or directly referenced (--no-staging is useful for e.g. local debugging with SAM CLI)
  • assets: Assets (e.g. Lambda code assets) are now referenced relative to the output directory.
  • assert: SynthUtils.templateForStackName has been removed (use SynthUtils.synthesize(stack).template).
  • cx-api: cxapi.SynthesizedStack renamed to cxapi.CloudFormationStackArtifact with multiple API changes.
  • core: cdk.App.run() now returns a cxapi.CloudAssembly instead of cdk.ISynthesisSession.
  • s3: using a Topic, Queue or Lambda as bucket notification destination now requires an integration object from the @aws-cdk/aws-s3-notifications package.
  • autoscaling: using a Topic, Queue or Lambda as Lifecycle Hook Target now requires an integration object from the @aws-cdk/aws-autoscaling-hooktargets package.
  • codepipeline: the property atIndex has been removed from the StagePlacement interface.
  • aws-ecs: These changes move all L3 and higher constructs out of the aws-ecs module into the aws-ecs-patterns module. The following constructs have been moved into the aws-ecs-patterns module: EcsQueueWorkerService, FargateQueueWorkerService, LoadBalancedEcsService, LoadBalancedFargateService and LoadBalancedFargateServiceApplets.
  • cloudwatch: rename leftAxisRange => leftYAxis, rightAxisRange => rightYAxis, rename YAxisRange => YAxisProps.

AWS CDK CLI のバージョンアップ方法

ローカルの「AWS CDK CLI」のバージョンが0.30.0になっていたのですが,リリース情報に以下の記載もあったのでバージョンアップしてみました.今回はその対応時の情報をまとめます.

IMPORTANT: apps created with the CDK version 0.33.0 and above cannot be used with an older CLI version.

バージョンアップ前の情報

$ cdk  --version
0.30.0 (build 4740446)

npm-check-updates を使ってバージョンアップ方法を確認する

AWS CDK CLI」はnpmを使ってインストールしました.そのため npm パッケージの更新方法を確認していたところnpm-check-updatesを使うのが良さそうだと思い使ってみました.

github.com

参考記事

dackdive.hateblo.jp

npm-check-updatesの導入は以下の通りです.

$ npm i -g npm-check-updates
/usr/local/bin/ncu -> /usr/local/lib/node_modules/npm-check-updates/bin/ncu
/usr/local/bin/npm-check-updates -> /usr/local/lib/node_modules/npm-check-updates/bin/npm-check-updates
+ npm-check-updates@3.1.9
added 154 packages from 80 contributors in 10.035s

npm-check-updatesncuコマンドを使ってパッケージのアップデート確認が可能です.実行してみるとnpm -g install aws-cdk@0.33.0 でバージョンアップ可能なことが確認できます.

$ ncu -g aws-cdk
[====================] 1/1 100%

 aws-cdk  0.30.00.33.0

ncu itself cannot upgrade global packages. Run the following to upgrade all global packages:

npm -g install aws-cdk@0.33.0

ncuコマンドで確認したようにコマンドを実行しアップデートをかけてみます.バージョンが0.33.0になったことを確認できました.

$ npm -g install aws-cdk@0.33.0
npm WARN deprecated @aws-cdk/applet-js@0.33.0: Applets have been deprecated in favor of 'decdk'
/usr/local/bin/cdk -> /usr/local/lib/node_modules/aws-cdk/bin/cdk

> core-js@2.6.9 postinstall /usr/local/lib/node_modules/aws-cdk/node_modules/core-js
> node scripts/postinstall || echo "ignore"

Thank you for using core-js ( https://github.com/zloirock/core-js ) for polyfilling JavaScript standard library!

The project needs your help! Please consider supporting of core-js on Open Collective or Patreon:
> https://opencollective.com/core-js
> https://www.patreon.com/zloirock

Also, the author of core-js ( https://github.com/zloirock ) is looking for a good job -)

+ aws-cdk@0.33.0
added 3 packages from 1 contributor, removed 7 packages and updated 25 packages in 31.781s
$ cdk --version
0.33.0 (build 50d71bf)

これで楽しい「AWS CDK CLI」ライフ実現に一歩近づきました.

まとめ

初めて「AWS CDK CLI」のバージョンアップ対応を行なったのでその方法をまとめました.npm-check-updates 使うとアップデート方法がすぐわかって簡単に対応できました.今後アップデート予定の方の何か参考になれば幸いです!

関連記事

sadayoshi-tada.hatenablog.com

sadayoshi-tada.hatenablog.com

AWS のスイッチロール情報を管理するのに役立つ「AWS Extend Switch Roles」

タダです.

AWS のアカウント利用においてマルチアカウントで開発,ステージング,本番など用途に応じてアカウントを切り替える場面があるかと思います.僕も業務で複数の AWS アカウントを切り替えて仕事するのですが,マネジメントコンソールで保存が効く接続先はデフォルトで「5つ」です.

docs.aws.amazon.com

5つ以上のアカウントを切り替えて仕事をする時都度アカウント情報を確認するのって煩わしいし不便ですよね.そこで「AWS Extend Switch Roles」です.これは Google ChromeFirefox のエクステンションなのですが,アカウント切り替えを楽に行うツールで僕もとても役に立ったので紹介します.

AWS Extend Switch Roles とは

AWS Extend Switch Roles」とは AWS マネジメントコンソールのスイッチロール のデフォルト表示が5つまでのところ設定したアカウント分表示してくれるツールになります.マルチアカウント運用業務にあたる方にとって有用なツールで,僕自身も業務でお世話になっています.

github.com

このツールを使うためにはブラウザの拡張機能(エクステンション)を導入する必要があります.

エクステンションの導入

早速エクステンションを導入していきます.普段 Google Chrome を使っているので Chrome Extensions を使いますが Firefox もあります. chrome.google.com

addons.mozilla.org

導入完了しますと,緑の鍵マークアイコンがリスト上に表示されます. f:id:sadayoshi_tada:20190528141049p:plain

アカウント切り替えの設定

スイッチロール の設定をしていくのも画面上から行えます.書式は AWS CLI のコンフィグと形式と似ています.「Configuration」欄に設定値を記載後、「Save」ボタンを押して適用します.合わせて「Hide original role history」のチェックボックスを有効化することをオススメします.この有効化により過去のスイッチロールの情報はキャッシュで保持しているものをブラウザ上に表示させず,「AWS Extend Switch Roles」で設定したスイッチロール 情報が表示されます.

f:id:sadayoshi_tada:20190528125222p:plain

docs.aws.amazon.com

設定例

[プロファイル名(例: dev)]
aws_account_id = アカウント番号(例: 123456789012)
role_name = スイッチロール 名(例: switchrole)

オプションパラメーターとして以下のものがあります.

  • region : スイッチロール 時のリージョンを指定できます
  • color : スイッチロールの色を指定可能で, RGB 16進値で指定できます
  • image: 指定された color 属性の上に使用する画像の URI を指定できます

設定例

[profile marketingadmin]
role_arn = arn:aws:iam::123456789012:role/marketingadmin
color = ffaaee

[anotheraccount]
aws_account_id = 987654321987
role_name = anotherrole
region=ap-northeast-1

[athirdaccount]
aws_account_id = 987654321988
role_name = athirdrole
image = "https://via.placeholder.com/150"

設定後の AWS マネジメントコンソールに移動して確認してみます.僕の設定で8つアカウント設定を行なったのですが,設定したアカウント情報が表示されています.また5つ以上表示されていることも確認できました.

f:id:sadayoshi_tada:20190528141439p:plain

まとめ

AWS Extend Switch Roles」の紹介と設定方法についてまとめました.マルチアカウントの運用業務や開発業務などの利用があるかと思いますが,その際にこのツールを使ってみるのはいかがでしょうか.何か役立つことがあれば幸いです!

技術ネタに止まらない! 趣味の開発や採用まで豊富な AI のトピックを勉強できる「機械学習の炊いたん。」

タダです。

先日の技術書展6で購入した「機械学習の炊いたん。」を読了しました.本書では AI の技術ネタだけでなく,AI エンジニアの採用事情や趣味で深層学習(ディープラーニング)の環境を整えるステップアップの仕方まで AI 分野を様々な角度で解説しています.読了後の所感を含めて本書を紹介します.

booth.pm

本書の構成

本書は6章で構成されています.

本書で学べること

本書を通じて勉強できると感じたのは以下の通りです.

  • AWS SageMaker でのモデルの作り方とデプロイ
  • AI 開発の転職活動や採用活動事情
  • 深層学習の勉強を趣味で進めるためのステップアップ方法(Google Colaboratory から始めて自作マシンを組むところまで)
  • 強化学習やスパース推定の基礎的な解説(コードはなく数学や理論の解説が中心)

モデルの作成とデプロイの体験

@kirikei4さんによるAWS SageMaker での MXNetフレームワークを利用してモデルの開発とデプロイを行う方法を2章で画像とコードを使って解説されています.AWS で AI 開発を行う時の要になるサービス AWS SageMaker の使い方を一通り勉強できるコンテンツなので興味があっても触れていない人にオススメです.

また @kirikei4さんも触れていますが,AWS の良さは他のサービスとの連携を行うことでシナジー効果を得られます.単一で使うより本コンテンツを通じて開発,運用まで考えた使い方を行なっていけるようになるとより良い使い方ができるはずです.

今回は取り上げませんでしたが,LambdaなどのFaaS を使ったお手軽アプリの作成や Amazon Green Galss や IoT Core などど連携したエッジへのデプロイなど,組み合わせ方がたくさんあります.

関連情報

aws.amazon.com

aws.amazon.com

AI 分野の転職や採用事情

@emergentさんが採用担当になって AI 業界における AI 開発者に応募する時の考慮点や採用者目線での意見を3章で解説してくれています.特に応募者の考慮点は僕も気になっていた部分です.応募者の経歴と採用側の期待とのギャップが描写されていますし,企業側も期待を伝えるべきことが記載されています.

現状とてもアツい転職市場の分野かと思います.応募者,採用する企業が双方幸せになるための参考になる情報と思うので転職を考えていたり,人事担当の方も気になれば見てみて欲しい内容です.

深層学習の趣味での勉強ステップアップ方法

@tomo-makesさんによる深層学習の勉強ステップアップ方法の解説が4章です.どんな分野でもまずは手軽に始められるところから少しずつステップアップしていくのが勉強を継続するために必要です.手始めの勉強環境として「Google Colaboratory」からスタートし, GCP のサービスの利用,最終的に自作マシンを組むところまで進んだ実体験まで触れられています.

勉強状況に応じて開発環境も適宜変更していくハウツーの情報は参考になります.これから勉強していく方にとって有益な情報がまとめられています.

関連情報

colab.research.google.com

cloud.google.com

cloud.google.com

cloud.google.com

関連記事

Google Colaboratory」については以下の記事で触れています.

sadayoshi-tada.hatenablog.com

sadayoshi-tada.hatenablog.com

強化学習やスパース推定の基礎的な数理観点の解説

@sonodanoさんと @small_mt さんによる 逆強化学習とスパース推定の解説ページが5,6章です.これまでの章とは異なり数理的な解説が中心です.僕は数式が理解できずなため関連資料のものを使って何度も繰り返し読もうと思います.僕のように数式が苦手な方は周辺情報と合わせて勉強しつつ読み進めるのがオススメです.

関連資料

www.slideshare.net

www.slideshare.net

まとめ

  • 豊富な AI トピックを扱った「機械学習の炊いたん。」を紹介しました.
  • 総ページがP122でしたが,僕は 3時間 ほどで読了できる内容でした.
  • AI 分野が初めてでも1章から4章までは AI 分野でどういった技術か,どんな開発をするのかなど勉強になることが多いです.
    • 後半は数理分野の勉強が中心となるため数式苦手な方は関連情報とゆったり勉強していくと良いと思いました.