Swift
    • PDF

    Swift

    • PDF

    Article Summary

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

    compute-15-2-401.png

    実行可能な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依存パッケージを追加
      • CCurlKitura-netSwiftyJSONは基本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という名前を持つ新しいアクションを作成します。

      • アクションの実行後に速度が上がったことが確認できる

    この記事は役に立ちましたか?

    What's Next
    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.