はじめてのAWS Snowcone – (2) 事前準備から注文まで

2021.12.13

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

しばたです。

本記事ではAWS Snowconeを注文するまでに必要な事前準備と注文方法(ジョブの作成)までを解説します。

目次

免責事項

本シリーズは実際にSnowconeを試すことで理解を深めることを目的としています。
このため執筆時点ではAWS Snowconeの仕組みや仕様について誤解している部分がある可能性があります。

記事の内容に誤りがあった場合は随時修正していく予定ですが、記事の内容が100%正しいことを保証できない点はご了承ください。

事前要求

AWS Snowconeを注文して利用するにあたり物理的な事前準備とS3など関連するAWSサービスの事前準備が必要となります。

物理的な準備

Snowconeは必要最低限の提供のためデバイス本体以外の付属品は無い状態で発送されます。
このため電源ケーブルは自前で用意する必要があります。
電源ケーブルは定格45W以上のUSB Type-C接続のものが必要となり、AWSで動作確認されているものは以下の二種類となります。

今回私はLenovoの純正品では無く互換製品を別途調達しています。

とりあえず動作確認に使うだけなので値段重視で安い製品を買っていますが、長期利用する場合は多少値が張っても信頼のおける製品を買っておく方が良いでしょう。

LANケーブルはCAT6以上のものを環境に合わせて用意してください。

上記以外にデバイスの配置場所や搬入手段、デバイスの管理方法も併せて検討しておいてください。

AWSサービスの準備

次にSnowconeを注文するまでに以下のAWSサービスの準備をしておく必要があります。

  • Amazon S3 : 「Amazon S3へのインポート」ジョブで使用するS3バケット
    • 「ローカルコンピューティングとストレージのみ」ジョブでもバケット指定だけは必須 (実際には使われない)
  • AWS KMS : デバイスで使用する暗号化キー
    • デフォルトキーがあるためそれを使用する事も可能
  • Amazon SNS : ジョブのステータスが変わったときの連絡先に使用 (メールアドレス通知)
    • デバイス注文時に新規トピックを作成することも可能
  • AWS IAM : ジョブで使用するサービスロール(IAM Role)が必要
    • デバイス注文時に新規ロールを作成することも可能
  • (optional) AMI : デバイスで独自のAMIを使う場合事前に用意しておく必要がある

デバイス注文時に新規作成できるものもあるため、最低限S3バケットだけ作っておけば何とかなります。
あとは要件に応じて必要な設定を事前に行っておきます。

1. AWSサービスの事前準備を行う

ここからはより具体的な事前準備の手順を紹介します。

再現性を高めるため一部AWS CLIを使っていますがマネジメントコンソールから作業しても構いません。
CLI環境はAWS CLI ver.2.4.6 on PowerShell 7.2.0の環境で検証しています。

C:\> aws --version
aws-cli/2.4.6 Python/3.8.8 Windows/10 exe/AMD64 prompt/off
C:\> $PSVersionTable.PSVersion

Major  Minor  Patch  PreReleaseLabel BuildLabel
-----  -----  -----  --------------- ----------
7      2      0

1-1. S3バケットの作成

今回データインポート用のS3バケットをshibata-snowcone-test-2021という名前で東京リージョンに作成します。
特別な設定はせずパブリックアクセスブロックの設定としており、バージョン管理や暗号化もしていません。

CLIからサクッと作っています。

# AWS CLIでサクッとバケットを作成
$bucketName='shibata-snowcone-test-2021'
aws s3 mb "s3://$bucketName" --region ap-northeast-1
aws s3api put-public-access-block --bucket $bucketName `
    --public-access-block-configuration 'BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true'

1-2. KMS暗号化キーの作成

KMSキーは対称キーである必要があります。
今回はエイリアス名my-custom-snowcone-keyとなるキーをCLIから作成しています。

# キー作成
$result = aws kms create-key --description 'Key for AWS Snowcone' `
    --key-usage 'ENCRYPT_DECRYPT' `
    --origin 'AWS_KMS' `
    --no-multi-region `
    --output json
Write-Output ($result | ConvertFrom-Json).KeyMetadata
# エイリアスの割り当て
aws kms create-alias --alias-name 'alias/my-custom-snowcone-key' `
    --target-key-id (($result | ConvertFrom-Json).KeyMetadata.KeyId)

(optional) 1-3. AMIの作成

この手順はSnowconeデバイス上でユーザーカスタムのAMIを動作させる場合のみ必要な手順です。

SnowconeではAWS Marketplaceで公開されている以下のAMIから派生させたAMIを注文時にプリセットすることができます。

これらのAMIをサブスクライブしてからEC2インスタンスを作成し必要なカスタマイズを行います。
その後インスタンスから新しくAMIを作成するとSnowconeの注文時にプリセット対象にすることができます。

AMIは暗号化されていない単一のEBSボリューム(ルートボリュームのみ)で構成され、最大125GB以内である必要があります。

今回は一例としてAmazon Linux 2 AMIの作成例を紹介します。

Amazon Linux 2 AMIの製品ページから「Continue to Subcribe」ボタンをクリックしてAMIをサブスクライブします。

EULAへの同意を求められるので「Accet Terms」ボタンをクリックします。

これでAMIのサブスクライブが完了し、このAMIからインスタンスを作ることが可能になります。

EC2インスタンスの作成方法は他のものと変わり無いため割愛します。
ちなみに動作確認のためインスタンスタイプを実機で使うサイズ(t2.microt2.smallt2.medium)に合わせておくことが推奨されています。

今回はこんな感じのsnowcone-baseというインスタンスを作りyum updateだけしておきました。

【2021年12月25日追記】
上図では検証のためEBSをgp3で作成しています。
デバイス到着後EC2インスタンスの作成を試みたところ一切接続できない状態となりました。原因についてサポート問い合わせ中ですがEBSボリュームはgp2で作っておいた方が良さそうです。

次にこのインスタンスを停止してAMIを作成します。
今回はmy-custom-snowcone-amiという名前で作っています。

出来上がりはこんな感じで、これでSnowconeデバイスの注文時にプリセット可能になります。

手順は割愛しますが同様にしてCentOS 7とUbunt 16.04のイメージも作っておきました。

これで事前準備は完了です。

2. Snowconeを注文する (ジョブの作成)

ここから実際にSnowconeを注文していきます。
今回は「Amazon S3 へのインポート」ジョブで私の自宅へ配送します。

まずはマネジメントコンソールからAWS Snow Familyを選択します。

コンソールの「AWS Snow ファミリーのデバイスを注文」ボタンをクリックします。

ジョブ作成のウィザードが開始されジョブタイプを選択します。
ここで「Amazon S3 へのインポート」を選び「次へ」をクリックします。

※画面上「Amazon S3からのエクスポート」ジョブが表示されていますが、このジョブではSnowconeは選択できません

次に注文前に各種ドキュメントを読んでおくことを求められますので、一読の上「私は、上記の情報を閲読したことを確認します」にチェックを付け「次へ」をクリックします。

デバイスの配送先を指定します。
過去に住所を登録していればその内容を再利用することができますが、今回は初注文ですので新規に配送先の住所を記載します。

今回は私の自宅宛なので一部ぼかしてますが日本語で記載して大丈夫です。
郵便番号と電話番号はハイフンなしで記載します。

配送速度については日本では「Standard Shipping」しか選べませんのでそのまま「次へ」進みます。

ここからジョブの詳細を決めていきます。
まずは任意のジョブ名を決め、今回はmy-first-snowcone-jobとしています。
利用デバイスはもちろんSnowconeです。
そしてSnowconeには電源ケーブルとLANケーブルが付属していない事が記載されていますので「私は、自分で電源とイーサネットケーブルを用意します」にチェックをします。

つづけてデータインポート先となるS3バケットをしています。
前節に作成したshibata-snowcone-test-2021をチェックします。

また、必要に応じてデバイスにプリセットするAMIを選びます。
今回は前節で作成した3AMIと最初から選択可能なAWS IoT Greengrass検証済みAMIを選択します。

一番下にある「AWS IoT Greengrass検証済みAMI」の指定欄については該当するドキュメントを見つけることができず正直よくわかりませんでした...
今回の検証ではIoT Greengrassは試す予定は無いのでチェック無しで「次へ」進むことにしました。

次はセキュリティ関連の指定を行います。
データ暗号化のためのKMSキーに前節で作成したmy-custom-snowcone-keyを選び、新規のサービスロールを作るかたちで「次へ」進みます。

新規に作成されるサービスロールの内容はこんな感じです。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "importexport.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

今度はジョブのステータス変更の通知先を指定します。
今回は新規にmy-snowcone-topicというSNSトピックを作成することにしました。

新規にSNSトピックを作成した場合は当該メールアドレスに購読確認のメールが送られますのでちゃんと「Confirm subscription」するのを忘れないでください。

ここまで終えて最後に指定内容の確認画面に遷移します。

内容に間違いがないことを確認して「ジョブを作成」をクリックします。

これで無事ジョブが新規作成されます。

ジョブの詳細はこんな感じです。
画面上部にジョブのステータスが表示され、例えば「デバイスがAWSから発送された」などの状態を管理します。

あとはデバイスが到着するのを待ちます。

終わりに

今回はここまでとなります。
次はデバイスが到着した後の作業かAWS OpsHubの設定について書こうと思います。