- 印刷する
- PDF
Swift
- 印刷する
- PDF
Classic/VPC環境で利用できます。
Swift形式のアクションを作成して様々な形で活用する方法と、その例を紹介します。
アクションの作成
Swiftアクションを作成する手順は、JavaScriptアクション作成のそれとさほど変わりません。 Swiftで作成したコードは複数の関数を含めますが、main
関数はプログラムのエントリーポイントとして宣言される必要があります。 以下は、この点を考慮して名前と場所を含めて「Hello World in Naver!」を出力するSwift形式の簡単なサンプルコードの「hello」です。
func main(args: [String:Any]) -> [String:Any] {
let name: String = args["name"] as? String ?? "World"
let place: String = args["place"] as? String ?? "Naver"
return [ "payload" : "Hello \(name) in \(place)!" ]
}
以下は、上記で作成してコードを使用してコンソールで「helloSwift」という名前のアクションを作成する手順です。
実行可能なSwiftアクションにパッケージ化してアクション作成
Cloud FunctionsでSwiftソースコードファイルを使用してアクションを作成する際は、アクションが実行される前にバイナリにコンパイルされる必要があります。 一度コンパイルされると、作業を待つコンテナが削除されるまで、発生する事後アクションの呼び出しに対しては素早くレスポンスします。
このようにコンテナが削除された後は、アクションを初回実行するとレスポンス遅延が発生します。このレスポンス遅延はcold-start遅延として知られています。 こういったcold-start遅延を避けるため、Swiftファイルを直接バイナリにコンパイルし、作成されたZIPファイルをアップロードしてアクションを作成します。
バイナリを作成する最も簡単な方法は、実行される環境と同じ環境内でビルドすることです。 簡単な例を通じてバイナリを直接作成してアクションを作成する手順を確認すると、以下のとおりです。
Dockerを利用してSwiftアクションコンテナを実行します。
$ docker run --rm -it -v "$(pwd):/owexec" openwhisk/action-swift-v3.1.1 bash
- このコマンドを利用してDockerコンテナ内のbash shellを利用できる
ソースコードをコピーしてビルドを準備します。
$ cp /owexec/hello.swift /swift3Action/spm-build/main.swift
$ cat /swift3Action/epilogue.swift >> /swift3Action/spm-build/main.swift
$ echo '_run_main(mainFunction:main)' >> /swift3Action/spm-build/main.swift
必要な場合は、Package.swiftファイルを作成して依存パッケージを追加します。
import PackageDescription let package = Package( name: "Action", dependencies: [ .Package(url: "https://github.com/apple/example-package-deckofplayingcards.git", majorVersion: 3), .Package(url: "https://github.com/IBM-Swift/CCurl.git", "0.2.3"), .Package(url: "https://github.com/IBM-Swift/Kitura-net.git", "1.7.10"), .Package(url: "https://github.com/IBM-Swift/SwiftyJSON.git", "15.0.1"), .Package(url: "https://github.com/watson-developer-cloud/swift-sdk.git", "0.16.0") ] )
example-package-deckofplayingcards
依存パッケージを追加CCurl
、Kitura-net
、SwiftyJSON
は基本Swiftアクションに含まれているので、Package.swiftに追加
Package.swiftをspm-buildフォルダにコピーします。
$ cp /owexec/Package.swift /swift3Action/spm-build/Package.swift
spm-buildフォルダに移動してコンパイルします。
$ cd /swift3Action/spm-build $ swift build -c release
ZIPファイルを作成してDockerコンテナから抜け出します。
$ zip /owexec/hello.zip .build/release/Action $ exit
- hello.zipファイルはhello.swiftと同じフォルダ内に作成されている
作成したZIPファイルをアップロードしてhelloSwiftyという名前を持つ新しいアクションを作成します。
- アクションの実行後に速度が上がったことが確認できる