やーまんぶろぐ

気が向いた時にだけ書くブログ

AWS Cloud9を使ったLambdaの開発環境を整える(Python3.6)

こないだのre Inventで発表のあったAWS Cloud9。クラウドベースのIDEでLambdaの開発が行えるというものです。

さっそくAWS Cloud9を構築してLambdaの開発環境を整えてみました。

AWS Cloud9構築

構築は簡単でした。以下のリンクの手順に沿っていけば迷うことないと思います。
dev.classmethod.jp

Lambda関数作成

最初のコードはblueprintから簡単に構築できます。welcomeタブの「Create Lambda function」から構築しましょう。

f:id:yamano3201:20171205182037p:plain

ここではPython 3.6のs3-get-object-python3を作成しました。

ローカル実行

トリガーに選択できるのはAPI GatewayのみでS3はありませんでした。

payloadが指定できるので、事前にS3にファイルを配置して直接JSONを指定します。
docs.aws.amazon.com

{  
   "Records":[  
      {  
         "eventVersion":"2.0",
         "eventSource":"aws:s3",
         "awsRegion":"us-east-1",
         "eventTime":"1970-01-01T00:00:00.000Z",
         "eventName":"ObjectCreated:Put",
         "userIdentity":{  
            "principalId":"AIDAJDPLRKLG7UEXAMPLE"
         },
         "requestParameters":{  
            "sourceIPAddress":"127.0.0.1"
         },
         "responseElements":{  
            "x-amz-request-id":"C3D13FE58DE4C810",
            "x-amz-id-2":"FMyUVURIY8/IgAtTv8xRjskZQpcIZ9KG4V5Wp6S7S/JRWeUWerMUE5JgHvANOjpD"
         },
         "s3":{  
            "s3SchemaVersion":"1.0",
            "configurationId":"testConfigRule",
            "bucket":{  
               "name":"XXXXXXXXXXXXXXXXXXXXX",
               "ownerIdentity":{  
                  "principalId":"A3NL1KOZZKExample"
               },
               "arn":"arn:aws:s3:::XXXXXXXXXXXXXXXXXXXXX"
            },
            "object":{  
               "key":"YYYYYYYYYYYYYY.yml",
               "size":1024,
               "eTag":"d41d8cd98f00b204e9800998ecf8427e",
               "versionId":"096fKKXTRTtl3on89fVO.nfljtsv6qko"
            }
         }
      }
   ]
}

Lambda(local)を選択してRunボタンを押してローカル実行します。
f:id:yamano3201:20171205184425p:plain

サードパーティ製のライブラリを使用する

最初からpython3は使用できました。python2であればpipも入っていたのですが、python3には入っていなかったのでまずはpipのインストールから。

bashコマンドプロンプトがあるので環境は好きに構築できました。
docs.aws.amazon.com

インストールするときはLambdaファンクションの作業ディレクトリのローカルにインストールします。
qiita.com

$ curl -O https://bootstrap.pypa.io/get-pip.py
$ sudo python3 get-pip.py
$ cd function_name
$ sudo /usr/bin/pip-3.6 install pyyaml -t .

※よくみたらpip3は最初からあったかも。PATHが通ってなかっただけかも。

デプロイ

Local FunctionsのLambdaファンクションを選択して↑ボタンを押すとデプロイが始まります。
f:id:yamano3201:20171205183907p:plain

Remote functionsに追加されます。(最初からあったかも)

コンソールからLambdaファンクション確認したら中身が更新されてました。

リモート実行

Lambda(remote)を選択してRunボタンを押します。
f:id:yamano3201:20171205184523p:plain

ここで権限まわりの確認ができます。S3のアクセス権がないのでエラーが出ると思います。
Lambdaファンクション作成時に作成されたIAMロールがあるので、それにS3のアクセス権を追加します。

pytestでテスト

$ sudo /usr/bin/pip-3.6 install pytest -t .

pytestをインストールします。pytestでテストを書いておしまいです。

最後に

けっこう良さそう。これでAWS Cloud9で開発する準備が整った気がします。

Googleの理念

Googleの理念の中でも特に好きな2つの理念を大事なのでメモ。英語でなんて言うかすぐに忘れてしまう。。

中身は以下のリンクの引用です。
https://www.rieti.go.jp/jp/events/bbl/12012701.html

Think big but start small

志は大きくとも、とにかく小さいことから始めよう

大きいことを最初から全部成し遂げようとすると、ゴール設定が難しくなったりモラルが下がったりします。Google Booksも元々は創業者が市販のスキャナーで本を1ページごとにスキャンしながらの試みから始まりました。とりあえずできるところから創造の試みを繰り返すことが大事。

Continual innovation, not instant perfection

最初から完璧を極めるのではなく、創造を繰り返し続ける

最初から製品が完璧なものを送り出そうとすると、時間がかかり過ぎ、本来のユーザーにとっての問題などを早く感知することができなくなる。価値が出るものができたら、とりあえずやってみてその仮定で創造を続けていく。

SIMロック解除できないソフトバンク端末で格安SIM(日本通信)に乗り換える方法

SIMロック解除できないソフトバンク端末であるiPhone 6を使っていた私にぴったりの格安SIMが発売されました。

あまり詳しいわけではないですが、私の知る限り公式なソフトバンクMVNOがなかったので嬉しい発表でした。

私はb-mobile S 990ジャストフィットSIMに乗り換える予定なので調べてみました。
www.bmobile.ne.jp

特徴

  • 音声付
    • コミュニケーションは基本LINEだけど、お店に連絡するときは電話するので番号自体は必要ですね。
  • 月額990円から。10GBまで1GB・500円。15GBまで1GB・350円。(初回手数料が別途3000円かかります)
    • 今は月に5G使っているなので、同じ使用量であれば2990円になる計算

手続き

手続きも簡単そうです。
www.bmobile.ne.jp

  • ソフトバンクに電話してMNP予約番号を受け取る
    • *5533にダイヤル (9:00~20:00)。電話でしか受け取れないように見えます。
  • MNP予約番号」「本人確認書類」「クレジットカード」を用意して購入手続きを進める
    • 本人確認は免許証の画像をアップロードします。
  • MNP回線切り替え
    • SIMが届いたらMy b-mobileにログインしてMNP回線切り替えを行います。
    • 手続き後にSIMを切り替えてiPhoneを再起動します。
  • プロファイルのインストールして完了

www.bmobile.ne.jp

補足

契約解除料

2年の更新のタイミングでなければ、契約解除料が9500円かかるとのこと。
契約解除料払ってでも切り替えるほうがお得と判断して払うことにしました。

回線切り替えタイミング

日割り計算にならないらしいので、回線切り替えのタイミングは月末が良さそうです。
乗換元のサービスは、回線切替えが完了するまで使えるようなので、事前にSIMをいただいて月末にMNP回線を切り替えるのが良さそうですね。

Y Mobile

Y Mobileを勧められましたが、公式ではSIMロック解除が必要なので諦めました。

AWS re:Invent 2017 で発表された新サービス

11/27から12/1までラスベガスで開催されていたAWS re:Invent 2017。
reinvent.awsevents.com

基本クラスメソッドさんの記事を追っかけながら情報をキャッチアップしてました。毎度思いますが更新が早すぎです。
dev.classmethod.jp

今年もたくさん新サービスが発表されました。一覧は以下にまとまっています。
dev.classmethod.jp
dev.classmethod.jp

ここでは個人的に気になるサービスだけ抜き出してメモしておきます。

  • Amazon Aurora Multi-Master、Amazon Aurora Serverless、Amazon DynamoDB Global Table
    • DBの可用性向上系のサービス。気になりますね。
  • Amazon DynamoDB Backup and Restore
    • JenkinsとEMRで自前で実装していたところがサービス化されました。さっそく試してみたいですね。
  • Amazon S3 Select、Amazon Glacier Select
    • Athenaとの違いが気になるところ。Glacierは東京対応しているけど、S3は東京対応していないので注意。
  • AWS Systems Manager
    • EC2 Systems Managerの機能拡張ですかね。SSHを使用せず、インスタンスにリモートログインできる機能が気になるところ。踏み台がいらなくなる?
  • Amazon Time Sync Service
    • 地味に嬉しいマネージドなntpサービス。NAT不要でポートも閉じれるので嬉しいですね。USER DATAで設定すればいいのかな?
  • Amazon VPC Inter-Region VPC Peering
    • リージョンをまたいでVPC Peeringできるようになりました。
  • AWS WAF Managed Rules
    • AWS WAFはルールをメンテする敷居が高いと感じていたので、自動化はかなり嬉しいです。これもさっそく試してみたいと思います。
  • Amazon GuardDuty
    • これが今回一番気になっているセキュリティの分析サービス。SOCの代わりになれるかもしれないですね。東京リージョンもサポートされてるのでさっそく試してみたいと思います。
  • Alexa for Business
    • ビジネス向けにも出すんですね。会議室の予約とかめんどくさいし、音声できるようになると楽になるかもしれませんね。
  • AWS Cloud9
    • クラウドベースのIDE。Lambdaのコーディングとかテストが楽になる?これも試してみたいですね。
  • Amazon API Gateway VPC integration
    • バックエンドとしてVPC内のリソースにアクセスできるようになりました。これも嬉しいですね。

いろんなところでキャッチアップのイベントがあるので、いくつか参加する予定です。
来年はぜひ現地に行って参加してみたいですね。

AWS 認定プログラムについて メモ

AWSの認定プログラムについてメモしておきます。
aws.amazon.com

公式でSlideShareに情報がまとめられています。

www.slideshare.net

種類、試験料、勉強方法についてメモしておきます。

種類

現在、Specialtyの資格が増えて全部で7個の資格が存在します。

  • Associate
    • Solution Architect
    • Developer
    • SysOps Administrator
  • Professional
    • Solution Architect
    • DevOps Engineer
  • Specialty
    • Advanced Networking
    • Big Data

料金

  • Associateレベル試験
    • 16200円
  • Professionalレベル試験
    • 32400円
  • 模擬試験(各資格ごとにある)
    • 一律2160円
  • 再認定試験(2年ごとに再認定が必要)
    • 一律8100円

全部受けるとかなり高いです。Professionalを受けるにはそれに対応するAssociateの資格が必要です。
f:id:yamano3201:20171130162013p:plain
ex) DeveloperかSysOps Administratorを持っていれば、DevOps Engineerを受けることが可能

またProfessionalを取得すると、Associateの再認定が不要になるので2年経過する直前にProffessionalを取得するとお得かもしれません。

Solution ArchitectとDevOps Engineerは別々の再認定が必要になります。

勉強法

ある程度AWSを触ったことがある方を前提に書いています。

1. 無料問題集
数は少ないですが、まずは無料の問題集を探してみます。
yamano3201.hatenablog.jp

2. 模擬試験
続いて模擬試験を受けます。問題になれるという意味では一番効果があると思います。
いくつかのパターンからランダムで出題されるようで、同じ問題にあたる可能性があるので1度で充分でしょう。
分野ごとの点数は出ますが、どの問題を間違ったのか、どれが正解なのかはわからないので、必ずコピペして後で復習しておきましょう。

3. 対策本
そして合格対策 AWS認定ソリューションアーキテクト - アソシエイトを購入しましょう。

合格対策 AWS認定ソリューションアーキテクト - アソシエイト

合格対策 AWS認定ソリューションアーキテクト - アソシエイト

探してもこれしかなかった。模擬試験だけで自信がない方は購入すると良いでしょう。

Associateならここまでで充分だと思います。

4. Proffesional対策
Proffesionalの問題がなかなか見つからなかったのですが、UdemyとLinux AcademyにProffesionalの問題が存在しました。有料で英語しかなかったのですが試験を受ける前に目を通すとよいかもしれません。
www.udemy.com
linuxacademy.com

Linnux Academyには7日間の無料トライアルがあるので、こちらを試してみました。
動画の説明資料だけではなく、解答つきの問題があるのでとても便利でした。

おまけ. QuickLabs
QuickLabsにも試験対策があります。
qwiklabs.com

こちらは問題形式ではなく、実際にAWSを触る演習になります。
演習に参加するにはお金がかかりますが、実際に手を動かす環境は一時的なアカウントが発行されて無料で使用できるようになっています。

手を動かせる環境がない場合はこちらを使うのも有効でしょう。今度やってみるか迷い中です。

最後に

私はSolution ArchitectとSysOps AdministratorのAssociateを持っています。
出題範囲が被っていたので、1度の勉強で2つとも取得することができました。

近いうちにSolution ArchitectのProffesionalも受けようと考えています。

Udemy Cyber Monday セール ほとんど1200円

1万円から2万円ほどするオンライン学習動画が1200円で購入できるということで、普段勉強しないような分野から3つ購入しました。

セキュリティの分野から1つ。
www.udemy.com

趣味でしか触ってないフロントエンドの勉強も兼ねて1つ。
www.udemy.com

勉強しようと思っていたけどなかなか手が出せていなかったReactで1つ。
www.udemy.com

他にも無料のものもあったのでAWS関連で2つ。
www.udemy.com

www.udemy.com

中身はまだ見てません。

セールは11/28までなのでお早めに。

CloudFormationでクロススタック参照

まずCloudFormationを勉強したい場合は、「CloudFormation Getting Started with YAML」を読みましょう。とても参考になりました。

www.slideshare.net

後半ではWeb3階層アーキテクチャのテンプレート分割例が記載されています。

テンプレート自体は記載されていなかったので、これを参考にWeb3階層アーキテクチャのテンプレートをクロススタック参照で以下のテンプレートに分割して作成してみました。

  • vpc.template
  • bastion.template
  • app.template
  • db.template
  • lb.template
  • sg.template
  • route53.template

ここではvpc.templateでExportして、bastion.templateでImportするという例でメモしておきたいと思います。

Exportの仕方

vpc.templateでは、VPCやSubnetなど後続のテンプレートで呼び出したい値をOutputsでExportしておきます。

Export Nameは固定値でも良いのですが、同じリージョンで複数作成することを考慮すると変数などを付けてバッティングを避けたほうが良さそうです。

ここではStackNameという事前に定義されている擬似パラメーターを使用することにしました。擬似パラメーター参照 - AWS CloudFormation

!Subという組み込み関数を使用することで変数を展開しています。Fn::Sub - AWS CloudFormation

Outputs:
  VPC:
    Value:
      Ref: VPC
    Export:
      Name: !Sub "${AWS::StackName}-VPC" # 展開するとvpc-stack0-VPC

CloudFormation実行時のスタック名をvpc-stack0として実行したので、vpc-stack0-VPCという名前がExportされました。

Importの仕方

次にbastion.templateをbastion-stack0というスタック名で実行します。
さきほどのVPCの値をImportするときに、vpc-stack0という名前を教えなくてはなりません。

ここではParametersを使って、実行時に値を直接入力することにしてます。VPCStackNameというパラメータを定義し、デフォルトではvpc-stack0が返るようにしています。
Parameters - AWS CloudFormation

あとは値を呼び出したいところでImportします。Exportした値と同じ値を指定すれば呼び出し可能です。

Parameters:
  VPCStackName:
    Type: String
    Default: vpc-stack0
Resources:
  BastionSG: 
    Type: "AWS::EC2::SecurityGroup"
    Properties:
      VpcId:
        Fn::ImportValue: !Sub ${VPCStackName}-VPC # 展開するとvpc-stack0-VPC

デフォルト値を使用した場合は展開するとvpc-stack0-VPCをImportすることになります。

最後に

整理したら全てのテンプレートを公開したいですね。