Skip to content

Instantly share code, notes, and snippets.

@niku
Forked from anonymous/gist:9881ed581698f2334f03
Last active August 29, 2015 14:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save niku/b630c3616484dd93b592 to your computer and use it in GitHub Desktop.
Save niku/b630c3616484dd93b592 to your computer and use it in GitHub Desktop.
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