-
-
Save niku/b630c3616484dd93b592 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
defmodule Erlcloudsandbox do | |
# Elixir で使いやすいように Record を利用するための準備 | |
# http://elixir-lang.org/docs/v1.0/elixir/Record.html | |
# に書いてあるように Record は単に先頭の要素が Atom である Tuple | |
# 単に Erlang のレコードを使うだけなら,Elixir で Record 宣言する必要はない. | |
# | |
# ただ,Elixir で Record を宣言しておくと, | |
# http://elixir-lang.org/docs/v1.0/elixir/Record.html#defrecord/3 | |
# に書いてあるような Elixir から名前つきアクセスが便利にできるようになる. | |
require Record | |
Record.defrecord :ec2_instance_spec, Record.extract(:ec2_instance_spec, from: "deps/erlcloud/include/erlcloud_ec2.hrl") | |
def main(args) do | |
# OTP アプリケーションを起動しておく | |
# mix.exs の application に | |
# [applications: [:logger, :ssl, :erlcloud]] | |
# と書けば,この 2 行は省略できる | |
:ssl.start | |
:erlcloud.start | |
# 環境変数から値を取る | |
# http://elixir-lang.org/docs/v1.0/elixir/System.html#get_env/1 | |
# | |
# その後,String から Char list へと値を変換する | |
# Char list は,古い Erlang ライブラリくらいでしか使っていないそうだ. | |
# Elixir だけで利用するときはほぼ利用しない. | |
# (確か String に比べて Char list はパフォーマンスがよくない) | |
# Elixir では,"" で String が作れ,'' で Char list が作れるようになっている. | |
# http://elixir-lang.org/getting-started/binaries-strings-and-char-lists.html | |
# | |
# |> はパイプ演算子と呼ばれる,Elixir を特徴づける一つ | |
# |> の手前にある結果を,|> のあとにある結果の第一引数として用いる | |
# "foo" |> String.to_char_list は String.to_char_list("foo") と同じ | |
# http://elixir-lang.org/docs/stable/elixir/Kernel.html#|%3E/2 | |
access_key_id = System.get_env("AWS_ACCESS_KEY_ID") |> String.to_char_list | |
secret_access_key = System.get_env("AWS_SECRET_ACCESS_KEY") |> String.to_char_list | |
ec2_endpoint = 'ec2.ap-northeast-1.amazonaws.com' | |
# Elixir から Erlang のコードを呼ぶときは | |
# :erlang_module_name.erlang_function(args) の形式を利用する | |
# http://elixir-lang.org/crash-course.html#calling-functions | |
:erlcloud_ec2.configure(access_key_id, secret_access_key, ec2_endpoint) | |
spec = ec2_instance_spec(image_id: 'ami-18869819', | |
instance_type: 't2.micro', | |
availability_zone: 'ap-northeast-1a', | |
key_name: 'mykey') | |
:erlcloud_ec2.run_instances(spec) | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment