お客様の AWS アカウントにある Amazon S3 へのアップロードを、Beam が動作する SORACOM の AWS アカウントにのみ許可できます。
Beam の Web サイトエントリポイントを使用すると、以下のようなメリットがあります。
- Amazon S3 バケットにアップロードするための認証情報を、デバイスにインストールする必要がありません。
- デバイスでは、Beam のエントリポイントを指定して、Amazon S3 バケットにファイルをアップロードできます。AWS API リクエストの署名 で説明されている署名バージョン 4 の署名プロセスをデバイスで行う必要はありません。
HTTP エントリポイントは利用できません
Amazon S3 にファイルをアップロードしたりダウンロードしたりする場合は、HTTP エントリポイントは利用できません。このページに書かれているとおり、Web サイトエントリポイントを利用してください。
ステップ 1: Amazon S3 バケットを作成する
Beam からアップロード / ダウンロードする Amazon S3 バケットを作成します。
Amazon S3 の バケット画面 にアクセスして、 をクリックします。
にバケット名を入力して、 をクリックします。
バケット名は、これ以降、${amazon_s3_bucket} と表記します。例:
beam-amazon-s3-bucket
Amazon S3 バケットが作成されます。
作成した Amazon S3 バケットをクリックし、
をクリックして、 の値をコピーします。
の値は、これ以降、${amazon_s3_bucket_arn} と表記します。例:arn:aws:s3:::beam-amazon-s3-bucket
ステップ 2: IAM ロールを作成して SORACOM の AWS アカウントに割り当てる
ステップ 1: Amazon S3 バケットを作成する で作成した Amazon S3 バケットへのアップロードとダウンロードを許可するための AWS IAM ロールを作成し、Beam が動作する SORACOM の AWS アカウントに割り当てます。
IAM コンソール にアクセスし、 → の順にクリックして、 をクリックします。
→ の順にクリックし、 に SORACOM の AWS アカウント ID を入力します。
Beam が動作する SORACOM の AWS アカウントの ID は、カバレッジタイプによって異なります。
- 日本カバレッジ:
762707677580
- グローバルカバレッジ:
950858143650
- 日本カバレッジ:
にチェックを入れ、 に任意の文字列を入力します。
に入力した文字列は、これ以降、${external_id} と表記します。例:External-ID-Rs6E3TFfh5QsyFWp
外部 ID の詳細は、AWS の AWS リソースへのアクセス権を第三者に付与するときに外部 ID を使用する方法 - AWS Identity and Access Management を参照してください。
をクリックします。
「許可を追加」画面が表示されます。
をクリックします。
別のウィンドウまたは別のタブで、「ポリシーの作成」画面が表示されます。
ここからは「ポリシーの作成」画面でポリシーを作成します
「ポリシーの作成」画面の操作が終わったら、
が表示されている「許可を追加」画面に戻ってきて IAM ロールを作成する操作を続けます。画面を閉じないでください。以下の項目を設定します。
項目 説明 をクリックして、 をクリックします。 に「GetObject」と入力し、 にチェックを入れます。同様に、 にもチェックを入れます。 → → の順にクリックします。
「ARN の追加」画面が表示されます。
に、${amazon_s3_bucket_arn} および「/*」(例:arn:aws:s3:::beam-amazon-s3-bucket/*
) を入力して、 をクリックします。「ポリシーの作成」画面に戻ります。
→ の順にクリックします。
に AWS IAM ポリシーの名前を入力し、 をクリックします。
AWS IAM ポリシーが作成され、ポリシー画面が表示されます。
ポリシー画面が表示されているウィンドウまたはタブを閉じて、「許可を追加」画面に戻ります。
をクリックし、手順 10 で入力した AWS IAM ポリシーの名前をテキストボックスに入力して、Enter キーを押します。
作成した AWS IAM ポリシーが表示されます。
作成した AWS IAM ポリシーにチェックを入れて、
をクリックします。に IAM ロールの名前を入力して、 をクリックします。
ロール画面に戻ります。
作成した IAM ロールの名前をクリックし、
をメモします。この ARN は、これ以降、${iam_role_arn} と表記します。例:
arn:aws:iam::XXXXXXXXXXXX:role/beam-amazon-s3-bucket-role
ステップ 3: SORACOM Beam をセットアップする
Beam の Web サイトエントリポイントを設定します。ここで説明するとおりに設定すると、以下の機能が実現できます。
- IoT SIM を利用するデバイスから送信されたファイルを Beam から Amazon S3 バケットにアップロードする。
- IoT SIM を利用するデバイスで Amazon S3 バケットに保存されているファイルをダウンロードしたりする。
認証情報ストアに AWS IAM ロール認証情報を登録する
Beam から Amazon S3 バケットを利用するために、IAM ロールに関する認証情報を、SORACOM ユーザーコンソールの認証情報ストアに登録します。認証情報は、${iam_role_arn} および ${external_id} です。認証情報ストアの「認証情報を登録」画面の表示方法については、認証情報を登録する を参照してください。
認証情報は、以下のように登録します。
項目 | 説明 |
---|---|
認証情報を識別するために任意の名前を入力します。例: AWS-IAM-role-credentials-getObject-putObject | |
「AWS IAM ロール認証情報」を選択します。 | |
${iam_role_arn} を入力します。例: arn:aws:iam::XXXXXXXXXXXX:role/beam-hello-world-invoke-function-url-role | |
${external_id} を入力します。例: External-ID-Rs6E3TFfh5QsyFWp |
Beam の Web サイトエントリポイントを設定する
Beam の設定はグループに対して行います
ここでは、グループの設定を変更する操作のみを説明します。グループの仕組みやグループを作成する操作について詳しくは、グループ設定 を参照してください。
SIM グループ画面で
をクリックします。SIM グループ画面を表示する操作について詳しくは、グループの設定を変更する を参照してください。
→ の順にクリックします。
「SORACOM Beam - Web サイト転送設定」画面が表示されます。
以下のように設定します。
項目 説明 任意の設定名 (例: Amazon S3 bucket
) を入力します。→ 「HTTPS」を選択します。 → ${amazon_s3_bucket}.s3.ap-northeast-1.amazonaws.com
を入力します (例:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.s3.ap-northeast-1.amazonaws.com
)。→ 空欄のままにします。 → オンにして、以下のように設定します。
- : 「AWS Signature V4」を選択します。
- : 「s3」(AWS S3) を選択します。
- : Amazon S3 バケットのリージョンを選択します。
- : Amazon S3 にファイルサイズが 1 MiB を超えるファイルをアップロードする可能性がある場合は、オンにします。
- 認証情報ストアに AWS IAM ロール認証情報を登録する で登録した AWS IAM ロール認証情報を選択します。 :
Web サイトエントリポイントの設定値の意味は、Web サイトエントリポイント を参照してください。
をクリックします。
IoT SIM の Beam の設定が完了しました。
ステップ 4: Web サイトエントリポイントを使用して Amazon S3 にファイルをアップロードする
Beam の Web サイトエントリポイントを使用して、Amazon S3 にファイルをアップロードします。
AWS SDK for Python (Boto3) を使用してファイルをアップロードする
デバイスに、AWS SDK for Python (Boto3) をインストールします。
$ pip install boto3
デバイスに、file_upload_resource.py をダウンロードします。
file_upload_resource.py はサンプルスクリプトです
file_upload_resource.py は、AWS SDK for Python (Boto3) を利用して、Amazon S3 にファイルをアップロードしたり、ダウンロードしたりする機能を持つサンプルスクリプトです。
デバイスで以下のコマンドを実行して、ファイルをアップロードします。
$ python -c "import file_upload_resource; file_upload_resource.upload( bucket_name='beam-amazon-s3-bucket', rel_file_path='./bigfile.zip', key='bigfile.zip', content_type='application/zip')"
file_upload_resource.upload()
メソッドの引数は以下のとおりです。項目 説明 bucket_name
Amazon S3 バケットの名前を指定します。第一階層のフォルダ名として利用されます。 rel_file_path
アップロードするファイルの相対パス (デバイスでのファイル名) を指定します。 key
アップロードしたファイルのキー (Amazon S3 バケットでのファイル名) を指定します。 content_type
アップロードするファイルの種類に合わせて、コンテンツタイプを指定します。 次に、アップロードしたファイルを Amazon S3 コンソールで確認します。
Amazon S3 の バケット画面 にアクセスします。
作成したバケットをクリックします。
アップロードしたフォルダ (バケット名) が表示されます。
デバイスでファイルをダウンロードする場合は、以下のコマンドを実行します。
$ python -c "import file_upload_resource; file_upload_resource.download( bucket_name='beam-amazon-s3-bucket', key='bigfile.zip', rel_output_file_path='downloaded_bigfile.zip')"
file_upload_resource.download()
メソッドの引数は以下のとおりです。項目 説明 bucket_name
Amazon S3 バケットの名前を指定します。第一階層のフォルダ名として利用されます。 key
ダウンロードするファイルのキー (Amazon S3 バケットでのファイル名) を指定します。 rel_output_file_path
ダウンロードしたファイルの名前 (デバイスでのファイル名) を指定します。
100 MiB 以下のファイルをアップロードする場合
100 MiB 以下のファイルをアップロードする場合は、IoT SIM を利用するデバイスで、以下のコマンドを実行してもアップロードできます。この場合は、AWS SDK for Python (boto3) をインストールしたり、「file_upload_resource.py」をダウンロードしたりする必要はありません。
$ curl -X PUT http://beam.soracom.io:18080/test.jpg \
-H "Content-Type: image/jpg" \
-T test.jpg
なお、Content-Type: multipart/form-data, boundary=xxxxxxxxxx
を指定した場合、リクエストボディに挿入した boundary (xxxxxxxxxx
) なども、ファイルの一部としてアップロードされます。
AWS CLI を使用してファイルをアップロードする
AWS CLI を使用して、Amazon S3 バケットにファイルをアップロードしたり、ダウンロードしたりすることもできます。
アップロードの例:
$ aws s3 cp bigfile.zip s3://beam-amazon-s3-bucket/bigfile.zip \
--no-sign-request --endpoint-url http://beam.soracom.io:18080
ダウンロードの例:
$ aws s3 cp s3://beam-amazon-s3-bucket/bigfile.zip ./downloaded_bigfile.zip \
--no-sign-request --endpoint-url http://beam.soracom.io:18080