お客様の 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 ポリシーと IAM ロールを作成する
Beam の Web サイトエントリポイントが、お客様の AWS アカウントの Amazon S3 バケットにデータをアップロード / ダウンロードするために、お客様の AWS アカウントに以下の設定の IAM ポリシーと IAM ロールを作成します。操作手順について詳しくは、IAM ポリシーと IAM ロールを作成する を参照してください。
項目 | 説明 |
---|---|
IAM ポリシー | このページで説明する機能を体験するために、お客様の AWS アカウントの Amazon S3 バケットにデータをアップロード / ダウンロードする権限を追加します。 具体的には以下のように設定します。
|
IAM ロール | SORACOM の AWS アカウントを、信頼できるエンティティとして指定します。
なお、ここで作成した IAM ロールの ARN を、これ以降、${iam_role_arn} と表記します。例:
|
ステップ 3: SORACOM Beam をセットアップする
Beam の Web サイトエントリポイントを設定します。ここで説明するとおりに設定すると、以下の機能が実現できます。
- IoT SIM を利用するデバイスから送信されたファイルを Beam から Amazon S3 バケットにアップロードする。
- IoT SIM を利用するデバイスで Amazon S3 バケットに保存されているファイルをダウンロードしたりする。
認証情報ストアに AWS IAM ロール認証情報を登録する
Beam から Amazon S3 バケットを利用するために、IAM ロールに関する認証情報を、SORACOM ユーザーコンソールに登録します。
具体的には、認証情報ストアの「認証情報を登録」画面で以下のように登録します。この画面の表示方法については、認証情報を登録する を参照してください。
項目 | 説明 |
---|---|
認証情報を識別するために任意の名前を入力します。例: 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