Swift

Prev Next

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」という名前のアクションを作成する手順は、次の通りです。

cloudfunctions-example-swift_v2_01_ko

実行可能な Swiftアクションをパッケージングしてアクションを作成

Cloud Functionsで Swiftソースコードファイルを使用してアクションを作成する場合、アクションが実行される前にバイナリにコンパイルする必要があります。一度コンパイルされた後は、タスクを待機しているコンテナが削除されるまで発生する後続のアクション呼び出しに対して迅速にレスポンスします。
このようにコンテナが削除された後は、最初のアクション実行時にレスポンス遅延が発生しますが、このようなレスポンス遅延は cold-start遅延として知られています。このような cold-start遅延を避けるためには、Swiftファイルを直接バイナリにコンパイルし、作成された ZIPファイルをアップロードしてアクションを作成する必要があります。
バイナリを作成する最も簡単な方法は、実行される環境と同じ環境内でビルドすることです。簡単なユースケースを通じて直接バイナリを作成してアクションを作成する手順は、次の通りです。

  1. Dockerを利用して Swiftアクションコンテナを実行します。

    $ docker run --rm -it -v "$(pwd):/owexec" openwhisk/action-swift-v3.1.1 bash
    
    • このコマンドで Dockerコンテナ内の bash shellを利用可能
  2. ソースコードをコピーしてビルドを準備します。

    $ 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
    
  3. 必要に応じて 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に追加
  4. Package.swiftを spm-buildフォルダにコピーします。

    $ cp /owexec/Package.swift /swift3Action/spm-build/Package.swift
    
  5. spm-buildフォルダに移動してコンパイルします。

    $ cd /swift3Action/spm-build
    $ swift build -c release
    
  6. zipファイルを作成し、Dockerコンテナから抜け出します。

    $ zip /owexec/hello.zip .build/release/Action
    $ exit
    
    • hello.zipファイルは hello.swiftと同じフォルダ内に作成されている
  7. 作成された zipファイルをアップロードして helloSwiftyという名前の新しいアクションを作成します。

    • アクション実行後、より高速化された速度を確認可能