LoginSignup
12
13

More than 5 years have passed since last update.

AWS MobileHub Swift 版 のチュートリアル -Cloud Logic(Lambda)編-

Posted at

Cloud Logicを使ってみましょう。

サンプルアプリの使い方は、FunctionにLambda関数、Requestにリクエストデータを指定し、Invokeをクリックします。Lambda関数からの戻り値が、Resultに表示されます。

Screen Shot 2016-06-06 at 8.42.45 AM.png
StoryBoardはこんな感じ。
CloudLogic_storyboard_—_Edited.jpg

コードです。
CloudLogicViewController_swift.jpg

Lambda関数の呼び出しには、ヘルパークラスAWSCloudLogicinvokeFunctionを使用します。ブロックでコールバックを処理します。

CloudLogicViewController.swift
    public func invokeFunction(name: String, withParameters parameters: AnyObject?, completionBlock: (AnyObject, NSError) -> Void)

何度かInvokeをタップして実行しましょう。
AWSコンソールのLambdaサービスからアクセスログを見てみます。

Screen Shot 2016-06-06 at 8.19.38 AM.png

きめ細かいアクセスコントロールを実装したい場合は、AWS API Gatewayを使用する必要があります。
残念ながら、まだMobile Hubではサポートしてませんが。。。

余興 - LambdaでSwiftを動かしてみる

サーバサイドのLambdaもSwiftで書きたくなりますよね? 詳細はここ

Swiftはこちらからダウンロードできるようです。Ubuntu版しかありませんね。 :disappointed_relieved:
https://swift.org/download/#releases

AMIはこちらを使用しました。

Ubuntu Server 14.04 LTS (HVM), SSD Volume Type - ami-9abea4fb

設定方法

swiftlambda用のディレクトリを作成します。

sudo mkdir /usr/local/swift
sudo chown ubuntu /usr/local/swift
mkdir ~/lambda

Swiftコンパイラー、ライブラリをインストールします。

# Install dependencies
sudo apt-get update
sudo apt-get install clang libicu-dev libbsd-dev
cd /usr/local/swift/
wget https://swift.org/builds/ubuntu1404/swift-2.2-SNAPSHOT-2015-12-01-b/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04.tar.gz
tar xfz swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04.tar.gz --strip 1
export PATH="/usr/local/swift/usr/bin/:$PATH"

Swiftで、Hello Worldプログラムを書きます。

cd ~/lambda
echo print\("Hello World"\) > hello.swift
swiftc hello.swift
./hello
Hello World!

Lambdaサービスが動いているAmazonLinuxにはダイナミックライブラリがないため一緒にアーカイブします。
(スタティックリンクではダメみたいです。)

ダイナミックライブラリ用のディレクトリを作成します。

mkdir lib

コピーします。

cp /usr/local/swift/usr/lib/swift/linux/*.so lib/
cp /usr/lib/x86_64-linux-gnu/libicudata.so.52 lib/
cp /usr/lib/x86_64-linux-gnu/libicui18n.so.52 lib/
cp /usr/lib/x86_64-linux-gnu/libicuuc.so.52 lib/
cp /usr/lib/x86_64-linux-gnu/libbsd.so lib/libbsd.so.0
vi ~/lambda/index.js

Swiftを呼び出すLambda(Node.js)を書きます。

index.js
var exec = require('child_process').exec;
exports.handler = function(event, context) {
  child = exec("./hello", function(error) {
    // Resolve with result of process
    context.done(error, 'Process complete!');
  });
  // Log process stdout and stderr
  child.stdout.on('data', console.log);
  child.stderr.on('data', console.error);
};

固めます。

sudo apt-get install zip
zip swift.zip hello index.js

こんなファイル構成になってます。

Screen Shot 2016-06-06 at 9.35.22 PM.png

AWSコンソールのLambdaサービスから、作成したswift.zipファイルをアップロードします。
Roleに、Mobile Hubで作成したRoleを指定します。

Lambda_Management_Console_🔊.jpg

Mobile HubのCloud Logicから、作成したLambdaファンクションにチェックを入れます。

AWS_Mobile_Hub_🔊.jpg

コンソールから、テストします。

Lambda_Management_Console_🔊.jpg

Mobile Hubアプリから、作成したSwift Lambdaを呼んでみます。
(クレデンシャルをキャッシュしているので、一旦アプリを再起動してください。)

Screen Shot 2016-06-06 at 10.04.48 PM.png

うまくいきました! :smiley:

12
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
13